push 寄存器
pop 寄存器
push 段寄存器
pop 段寄存器
push 内存单元
pop 内存单元
数据是不能直接跟段寄存器发生关系的,需要先经过通用寄存器,再保存到段寄存器
问题3.7
编程,将10000H~1000FH这段空间当做栈,初始状态栈是空的,将AX、BX、DS中的数据入栈。
1) 写指令
通过R命令知道现在CS:IP指向为073F:0178,所以要把指令写于此处
sp可以直接赋值数字
2)T命令执行完后,根据SS和SP查看1000:000A地址处内存空间
问题3.8
编程:
- 将10000H~1000FH这段空间当做栈,初始状态栈是空的
- 设置AX=001AH,BX=001BH
- 将AX、BX中的数据入栈
- 然后将AX、BX清零
- 从栈中恢复AX、BX原来的内容
(1)编写指令
时刻谨记,ax操作的是字,2字节
清零这里使用的是mov,对应机器码占用3字节,如果使用sub ax,ax机器码为两个字节
先pop bx,出栈顺序和入栈顺序相反
(2)执行指令,观察到AX最终赋值为001A,BX最终赋值为001B
如果想交换ax,bx的值,pop时颠倒下它们的顺序即可
push和pop是分两步执行的
执行push时:
先改变sp,后向ss:sp处传送
执行pop时:
先向ss:sp处传送,再改变sp
注意
push、pop等栈操作指令,修改的只是sp。也就是说,对16位CPU来说,栈顶的变化范围最大为:0~FFFFH