汇编sp和bp寄存器



我需要一些帮助来理解堆栈寄存器如何在x86汇编中工作。下面的代码片段来自我正在研究的一个引导加载程序。

print函数有三个参数。因为我把这三个都推到堆栈中,所以我期望sp0xfff9处。bp在print函数中使用一次相同的地址。

为什么我必须做[bp+4]而不是[bp+2] ?因为不是变量我推在位置0xfffd, 0xfffb0xfff9 ?然后,当我从打印函数返回时,我添加add sp, 6以在打印之前将sp恢复到相同的位置。

; stack initialization
mov ax, 0x0000
mov ss, ax
mov sp, 0xffff
mov bp, 0xffff

EDIT忘了函数返回地址

BP points to where the previous BP value was pushed
BP + 2 points to the return address pushed by `call PRINTMESSAGE`
BP + 4 points to the last argument pushed
and so on

最新更新