程序集“div ten”返回错误的值

时间:2016-04-17 19:13:10

标签: assembly x86 dos

我正在尝试将存储在EBX中的数字打印到EDI中的指针,由于某种原因第二次循环进行并将eax除以10,问题就出现了。 因此,当我运行代码时,第一个循环将8000转换为CCC,第二个循环将CCC转换为CCCCCE14。我不明白为什么会这样。

当调用过程并且edi指向值+3时,ebx的值为FFFF8000 = -32768。

value db 10,13,'         $'
ten dd 10 
mone dd -1
minus db '-$'
printnum proc near ;print ebx starting from position edi in string value
    mov ecx,0
    mov eax,ebx
    cmp eax,0    ;check if number is negative
    jg goagain
    mov ah,9
    mov dx,offset minus 
    int 21h
    mov eax,ebx
    imul mone       ;print a minus and convert number to positive

goagain:    
    inc ecx      ;counter
    div ten
    push edx
    cmp eax,0
    jne goagain
    dec ecx
poprint:
    pop ebx
    add ebx,'0'
    mov [edi+ecx],edx
    dec ecx
    cmp ecx,0
    jge poprint
    ret
printnum endp

0 个答案:

没有答案