OS专题-了解栈 本文最后更新于:2024-11-18T14:20:10+08:00 OS专题-了解栈内存中栈的使用非常广泛,几乎任何地方都能看到栈的影子,为了更好的实现操作系统,我们需要学习这个结构。 在汇编中BP寄存器用来存储栈的基地址(也就是栈底),SP寄存器存储栈顶地址。在内存中栈是从BP开始向下增长,也就是说SP的大小是逐级递减的。 下面我们来试试如何在MBR中操作栈: mov ah, 0x0e mov bp, 0x8000 ; 我们需要找一个远离BIOS加载MBR代码的一个地方使用栈,否则会导致我们的程序被覆盖,然后崩溃。 mov sp, bp ; 初始化的栈是空的,所以他的栈顶和栈底地址相等 ; 推入三个字符 push 'A' push 'B' push 'C' ; 用来显示栈是如何增长的 mov al, [0x7ffe] ; 0x8000 - 2 int 0x10 ; 现在你不能访问栈顶, ; 对于栈而言,他只有一个入口和出口 mov al, [0x8000] int 0x10 ; 弹出字符到BX寄存器 pop bx mov al, bl int 0x10 ; 打印 pop bx mov al, bl int 0x10 pop bx mov al, bl int 0x10 ; 因为栈已经没有数据了,所以现在拿到的是没有用的脏数据 mov al, [0x8000] int 0x10 jmp $ ; 无限循环 ; 填充其他位的值为00 times 510-($-$$) db 0 ; 魔数 dw 0xaa55 OS专题-了解栈 https://blog.cikaros.top/doc/7fb90e78.html 作者 Cikaros 发布于 2022年9月23日 许可协议 Please enable JavaScript to view the comments