我想在屏幕上打印寄存器中的数字。此外,我想将其保存为字符串(字节)。因此,如果我有一个像 150 这样的数字,我想将其保存在某个地址
"1"、"5"、"0"
mov ebx, dword ptr[ebp+8]
; eax contains value
; ebx contains address to store characters
; here is where conversion would take place
由于它在寄存器中,您是否必须将其转换为十进制值,然后分隔每个位置?
我不确定如何打印 ASCII 以及如何分隔每个地方。所以我只想展示如何将EAX的值转换为十进制ASCII并将其存储到DS:EBX的地址。对于最大 0FFFFFFFFh 的 32 位值,我们需要一个放置十个十进制 ASCII (4294967295) 的位置。例如,如果值是十进制 150,那么我们得到 ASCII 的 "0000000150" 开头有一些"0"。
mov cl, 0Ah ; counter for ten decimal ASCII's
mov edi, 1000000000
P1: xor edx, edx
div edi
add al, 30h ; convert to ASCII
mov esi, edx ; save remainder
mov [ebx], al ; store ASCII to the address of DS:EBX
inc ebx
mov eax, edi
mov edi, 0Ah
xor edx, edx
div edi
mov edi, eax
mov eax, esi
dec cl
jnz P1