Assembly 函数正在打印Ascii等效值,而不是将整数打印为字符串
下面是我尝试编写的一个函数,用于将整数转换为字符串。我不确定我是否正确使用了推送功能。我试着把整数除以10,然后把48小时加到余数上,然后把它加到堆栈中。然后重复该过程,直到整个整数转换为字符串。此函数以Ascii格式打印字符串,但我希望以字符串表示形式打印精确的整数。例如,如果变量answer中存储的整数是75,则我希望此函数将“75”打印为字符串,但它将打印“K”Assembly 函数正在打印Ascii等效值,而不是将整数打印为字符串,assembly,Assembly,下面是我尝试编写的一个函数,用于将整数转换为字符串。我不确定我是否正确使用了推送功能。我试着把整数除以10,然后把48小时加到余数上,然后把它加到堆栈中。然后重复该过程,直到整个整数转换为字符串。此函数以Ascii格式打印字符串,但我希望以字符串表示形式打印精确的整数。例如,如果变量answer中存储的整数是75,则我希望此函数将“75”打印为字符串,但它将打印“K” XOR eax, eax mov eax, [esi] mov cl, 10 ;move
XOR eax, eax
mov eax, [esi]
mov cl, 10 ;move 10 to cl
div cl ;divide by eax by 10
add edx, 48h ;add 48h to remainder
push edx
mov [edi], edx
pop eax
inc edi ;increments the edi pointer
这就是我调用函数将存储在answer中的整数转换为sting并打印它的方式
lea esi, answer
call num2str
call PrintString
另外,我正在使用visual studio 2012进行编译。谢谢 问题在于div cl是一个8位除法。它将ax除以cl,将结果放入al中,剩余部分放入ah-edx中不受影响。您需要使用div ecx来获得一个除法,该除法将edx/eax寄存器对中的64位值进行除法,并将结果放入eax中,如果您希望代码正常工作,则将余数放入edx中-这需要清除ecx的上24位并清除edx:
;; eax = number to be converted to ASCII
;; edi = END of the buffer in which to store string
xor ecx,ecx
mov [edi], cl
mov cl,10
loop:
xor edx,edx
div ecx
add dl, 48h
dec edi
mov [edi], dl
test eax,eax
jnz loop
;; edi now points at the ASCII string