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