我正在研究this tutorial-我所在的部分使引导程序访问堆栈。我正在尝试理解以下代码:
mov ah, 0x0e ; int 0x10 writes to tty
mov bp, 0x8000 ; set the base of our stack
mov sp, bp ; there's nothing in the stack, so the base pointer
; and the stack pointer are the same.
push 'A'
push 'B'
push 'C' ; bp at 0x8000, sp at 0x7ffe.
mov al, [0x7ffe]
int 0x10 ; this prints what's at the top of the stack, 'A'
mov al, [0x7fff]
int 0x10 ; this prints garbage or nothing, for some reason, but
; I would expect it to print 'B'
```
我知道我希望通过push
和pop
与堆栈进行交互。但是,如果我可以直接访问堆栈的顶部,为什么不能访问中间或底部?在启动过程的早期,CPU或MMU是否正在实施访问限制?
如果有帮助,我正在通过以下方式测试此代码:
nasm -f bin 'this_code.asm' -o boot.bin
qemu-system-x86_64 --nographic boot.bin