【发布时间】:2021-02-15 14:54:13
【问题描述】:
我试图正确理解我在何处以及如何将被调用者保存的寄存器(如 ebx)推入/移出堆栈以恢复它们以供以后使用。
这段代码是否正确恢复了ebx 寄存器?
global main
extern printf
section .text:
print:
mov eax, 0x1
add eax, ebx
push eax
push message
call printf
add esp, 8
ret
main:
mov ebx, 0x1
push ebx
call print
pop ebx
ret
message db "result = %d", 10, 0
我应该像这样使用后直接弹出ebx吗?:
global main
extern printf
section .text:
print:
push ebx
mov ebx, 0x1
mov eax, 0x1
add eax, ebx
push eax
push message
call printf
add esp, 8
pop ebx
ret
main:
call print
ret
message db "result = %d", 10, 0
【问题讨论】:
标签: assembly scope x86 cpu-registers calling-convention