主题:[讨论]这个宏汇编怎么错的
exchange macro a
mov al,a
local error_ptr,ret_macro,num_ptr
cmp al,'F'
ja error_ptr;;大于F不合法则跳转
cmp al,'0'
jc error_ptr;;小于0则跳转
cmp al,'9'
jbe num_ptr;;比9小则是数字,跳转到数字操作
sub al,37h
jmp ret_macro;;是字母减37H后,跳转出去
num_ptr:
sub al,30h
jmp ret_macro
error_ptr:
push ax
push dx
mov ah,09h
mov dx,offset error_printf_word;;返回前打印提示,内容为:操作数据不合法,系统将会自动返回
int 21h
pop dx
pop ax
mov ah,4ch
int 21h
ret_macro:
mov a,al
endm ;;结束宏定义
.model small
.data
buf db 'ABCDE12345'
error_printf_word db 'WHAT YOU INPUT IS ERROR!'
.stack
.code
.startup
push cx
mov cx,10
mov di,offset buf
again:
exchange byte ptr[di]
inc di
loop again
pop cx
.exit 0
end
mov al,a
local error_ptr,ret_macro,num_ptr
cmp al,'F'
ja error_ptr;;大于F不合法则跳转
cmp al,'0'
jc error_ptr;;小于0则跳转
cmp al,'9'
jbe num_ptr;;比9小则是数字,跳转到数字操作
sub al,37h
jmp ret_macro;;是字母减37H后,跳转出去
num_ptr:
sub al,30h
jmp ret_macro
error_ptr:
push ax
push dx
mov ah,09h
mov dx,offset error_printf_word;;返回前打印提示,内容为:操作数据不合法,系统将会自动返回
int 21h
pop dx
pop ax
mov ah,4ch
int 21h
ret_macro:
mov a,al
endm ;;结束宏定义
.model small
.data
buf db 'ABCDE12345'
error_printf_word db 'WHAT YOU INPUT IS ERROR!'
.stack
.code
.startup
push cx
mov cx,10
mov di,offset buf
again:
exchange byte ptr[di]
inc di
loop again
pop cx
.exit 0
end