Я пытаюсь написать функцию для преобразования целого числа, помещенного в стек, в коды ASCII. Преобразование работает нормально, но у меня проблема с параметром, который передается в стек.
org 100h
section .text
start:
mov eax, 12345
push eax
call print_int
add esp, 4 ;clear the stack
jmp _exit
;value is in the stack
print_int:
push ebp
mov ebp, esp
mov ecx, 0Ah ;divide by 10
mov eax, [ebp+8] ;value is in ebp + 8
again1:
mov edx, 0
idiv ecx ;quotent in EAX, remainder in EDX
push edx
cmp eax, 0
jne again1
printing:
;output a digit
pop edx ;get digit from stack
add dl, 30h ;convert to ASCII
mov ah, 02h
int 21h ; print
cmp esp, ebp
jne printing
mov esp, ebp
pop ebp
ret
_exit:
mov al, 0
mov ah, 4ch
int 21h
section .data
section .bss
Проблема в том, что mov eax, [ebp + 8] устанавливает eax на 0 вместо 12345. Если я изменю mov eax, [ebp + 8] на mov eax, 12345, все в порядке.