Assembly 检查是否为数字
我有一个将数字转换为ASCII的例程。问题是数字检查不起作用Assembly 检查是否为数字,assembly,x86,nasm,Assembly,X86,Nasm,我有一个将数字转换为ASCII的例程。问题是数字检查不起作用 .loop1: xor edx,edx ;0 mov ebx,10 ;divisor div ebx ;eax = eax/ebx add edx,48 ;eax += 48 cmp edx,'0' ;if(edx < '0') jl error ; error() cmp edx,'9' ;if(edx &g
.loop1:
xor edx,edx ;0
mov ebx,10 ;divisor
div ebx ;eax = eax/ebx
add edx,48 ;eax += 48
cmp edx,'0' ;if(edx < '0')
jl error ; error()
cmp edx,'9' ;if(edx > '9')
jg error ;error()
push edx ;put value into STACK
add esi,1
test eax,eax
jz loop2
jmp loop1
即使对于mov eax,msg
其中msg
是msg db“abc”
代码也不会出现错误
例程
如何解决这个问题?无符号除10的余数永远不会小于0或大于9,因此那些
jl
和jg
指令永远不会跳转到错误无符号除10的余数永远不会小于0或大于9,所以那些jl
和jg
指令永远不会跳转到error
,但是有一个addedx,48
。如果看到非数字,则该值可能大于“9”,对吗?请进行数学运算0'=48,...,'9'=57. 因此,无论您是直接将余数与0…9进行比较,还是先将48相加,然后再将总和与48…57进行比较,结果都不会改变。但是有一个add edx,48
。如果看到非数字,则该值可能大于“9”,对吗?请进行数学运算0'=48,...,'9'=57. 所以,不管你是直接将余数与0…9进行比较,还是先加48,然后再与48…57进行比较,结果都不会改变。
cmp edx,'0'
jl error
cmp edx,'9'
jg error