我正在尝试将存储在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