汇编sp和bp寄存器

时间:2014-03-19 10:26:07

标签: assembly stack osdev

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

打印功能需要三个"参数"。由于我将所有三个推送到堆栈,我希望sp位于0xfff9bp在打印功能中一次获取相同的地址。

为什么我必须[bp+4]代替[bp+2]?由于我不是在0xfffd0xfffb0xfff9位置推送的变量?然后当我从打印功能返回时,我添加add sp, 6以在打印之前将sp恢复到相同的位置。

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

编辑忘记了函数返回地址。

1 个答案:

答案 0 :(得分:4)

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