OS专题-了解栈

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日
许可协议