第三章 -寄存器

本文详细介绍了栈的LIFO特性以及8086CPU中的栈操作,包括PUSH和POP指令的使用,栈顶指针SS:SP的变化,并讨论了栈顶超界的问题,强调了在编程时需要自行考虑栈空间的管理。示例展示了如何初始化栈并执行入栈操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3.6栈
栈是一种具有特殊的访问方式的存储空间,是一种LIFO
3.7CPU提供的栈机制
指令:PUSH ax–入栈
POP ax –出栈
以字为单位
段寄存器SS和寄存器SP
任意时刻SS:SP指向栈顶元素
8086CPU中,入栈时,栈顶从高地址向低地址方向增长。
如果是一个空栈,SS:SP将指向栈空间最高地址单元的下一个单元
注意:出栈后,SS:SP将指向新的栈顶地址,POP操作前的栈顶元素依然存在,只不过是出栈了。再次写入PUSH命令,将会覆盖
3.8栈顶超界的问题
栈顶超出栈空间,此后如果在执行入栈命令,会将后面的数据覆盖
但是CPU并不提供这样的机制,需要我们自己去考虑这个问题
3.9 PUSH,POP指令:
eg;将10000H:1000FH作为栈:

mov ax 1000
mov ss ax

mov bx 0010
mov sp bx

push ax
push bx
push ds

1.

mov ax 1000
mov ss ax

mov bx 0010
mov sp bx

mov ax 001A
mov bx 001B

push ax
push bx

mov ax 0//sub ax ax
mov bx 0//sub bx bx

pop bx
pop ax//入栈顺序和出栈顺序要相反

//如果交换ax,bx的值的话,
pop ax
pop bx

执行mov指令只需一步
执行PUSH和POP要两步:1.先改变SP得值,后向SS:SP进行操作
栈操作的最大范围是0 – ffff
3.10栈 段
将一段内存当做栈段,仅仅是我们在编程时的一种安排
当栈空的时候为SP = 0
一个栈段的最大容量为64KB

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值