+ -
当前位置:首页 → 问答吧 → 汇编初学者一个问题不明白,请教一下

汇编初学者一个问题不明白,请教一下

时间:2011-11-08

来源:互联网

我想实现检查输入的字符是不是16进制数(也就是0-9a-zA-Z)
可是每次一输入就弹出ntvdm cpu 之类的东西,但是如果我在输入后面增加一个输出的话就不会遇到这样的情况,我是初学者不知道问题出在哪里,请大家帮忙指出错误在哪里,谢谢!
Assembly code

;*******************************************************************
data segment
 error_msg        db 'Your input is not correct!','$'
data ends
;-------------------------------------------------------------------
stack   segment para stack 'stack'
db   20  dup(?)
stack   ends
;*******************************************************************
code segment
;-------------------------------------------------------------------
main proc far
   assume cs:code , ds:data , ss:stack
start:
mov ax , data
mov ds , ax
mov ax , stack
mov ss , ax
mov sp , 20
mov dx , offset input_first
mov ah , 9h
int 21h
mov ah , 01h
int 21h
call check_if_right
jmp exit

check_if_right:
cmp al , '0'
jb error_delect
cmp al , '9'
jbe right
cmp al , 'A'
jb error_delect
cmp al , 'F'
jbe right
cmp al , 'a'
jb error_delect
cmp al , 'f'
ja error_delect

right:
ret

error_delect:
mov dx , offset error_msg
mov ah , 9h
int 21h
jmp exit

exit:
mov ax , 4c00h
int 21h
main endp
;-------------------------------------------------------------------
code ends
;*******************************************************************
end start

作者: ww884203   发布时间: 2011-11-08

补充一下,在data里面还有一句是
input_first "Input the first digit $"
因为里面先定义了几个字符串,有的还没输出就删除了才发上来,不小心多删了一句。总之不是由于input_first确实的问题。
多谢大家指教,谢谢!我刚看汇编才半天,代码也是根据例子东拼西凑的,可能很不规范或者犯了什么基本错误,大家不要见笑,谢谢!

作者: ww884203   发布时间: 2011-11-08