检查是否为数字

时间:2013-02-23 03:13:03

标签: 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 > '9')      
    jg error    ;error()        

    push edx    ;put value into STACK   
    add esi,1       
    test eax,eax    
    jz loop2
    jmp loop1   

问题是:

    cmp edx,'0'     
    jl error        
    cmp edx,'9'     
    jg error    

即使对于mov eax,msg msg msg db "abc" error,代码也不会{{1}}例程。

如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

无符号除法除以10的余数永远不会小于0或大于9,因此jljg指令永远不会跳转到error。< / p>