堆栈
栈:只有一个出口
栈顶:最后一个数据的存放位置
SS:SP 来感知堆栈,并且 SS:SP任何时候都指向栈顶
SS*16 + SP 指向的内容就是栈的空间
SS存放栈的基地址
SP存放栈的偏移地址
入栈:
将AX中的数据存入SS:SP指向的内存,并且SS:SP指向新的栈顶
新栈顶的位置计算:SP-2
入栈地址是从高字节到低字节排列
原始状态:
1408:FFFC
1408:FFFD
1408:FFFE <-SS:SP
1408:FFFF
PUSH ax 入栈以后
1408:FFFC <-SS:SP //会指向新的栈顶 SP-2
1408:FFFD
1408:FFFE 34
1408:FFFF 12
POP ax 出栈以后
1408:FFFC
1408:FFFD
1408:FFFE <-SS:SP //会指向新的栈顶 SP+2
1408:FFFF
入栈出栈的例子:
mov ax,1111
mov bx,2222
mov cx,3333
push ax //把AX里的值放入 SS:SP指向的空间
push bx
push cx
pop ax //把ss:sp指向的空间的值 放入AX
pop bx
pop cx
栈顶超界(栈满再入栈),栈空再出栈:
需要开发人员记住入栈出栈的数量,防止危险
数据段
栈段
代码段
ASM_3堆栈
最新推荐文章于 2021-05-17 21:10:29 发布