汇编(六)

 
 

  • 栈:是一种具有特殊的访问方式的存储空间(后进先出, Last In Out Firt,LIFO)
  • 8086会将CS作为代码段的段地址,将CS:IP指向的指令作为下一条需要取出执行的指令
  • 8086会将DS作为数据段的段地址,mov ax,[address]就是取出DS:address的内存数据放到ax寄存器中
  • 8086会将SS作为栈段的段地址,任意时刻,SS:SP指向栈顶元素
  • 8086提供了PUSH(入栈)和POP(出栈)指令来操作栈段的数据
    • 比如push ax是将ax的数据入栈,pop ax是将栈顶的数据送入ax

push ax

push ax 的执行由以下两个步骤完成

  • SP = SP - 2,SS:SP 指向当前栈顶前面的单元,以当前栈顶前面的单元为新的栈顶;
  • 将ax中的内容送入 SS:SP 指向的内存单元处,SS:SP此时指向新栈顶

pop ax

pop ax的执行过程和push ax刚好相反,由以下两步完成

  • 将SS:SP指向的内存单元处的数据送入ax中;
  • SP=SP+2,SS:SP 指向当前栈顶下面的单元,以当前栈顶下面的单元为新的栈顶

思考

如果将10000H 到 1000FH 这段空间当做栈,初始状态栈是空的,此时,SS=1000H,SP=?思考后看分析

  • 栈空,SS:SP执行栈控件最高地址单元的下一个单元
结果

栈顶超界

push

pop

image.png
书上图1
书上图2

push&pop汇编

image.png

注意:在8086中,push、pop操作的数据都是2个字节的

练习

编程: (1)将10000H到1000FH 这段空间当做栈,初始状态栈是空的; (2)设置AX=001AH,BX=001BH; (3)利用栈,交换AX和BX中的数据.


mov ax,1000H
mov ss,ax
mov sp,0010H

mov ax,001AH
mov bx,001BH

push ax
push bx
pop ax
pop bx

栈段

  • 对于8086来说,在编程时,可以根据需要,将一组内存单元定义为一个段
  • 我们可以将一组长度为N(N<=64KB)、地址连续、起始地址为16倍数的内存单元,当做栈空间来使用,称为栈段。比如用10010H~1001FH这段内存空间当做栈来使用,我们就可以认为10010H~1001FH是一个栈段,它的段地址为1001H,长度为16字节
  • 如何使用push、pop等栈操作指令访问我们定义的栈段?
    • 用SS存放栈段的段地址,用SP存放栈顶的偏移地址

段总结



练习


练习1

答案

练习2

答案

编写完整的汇编程序...


作者:请叫我Hank
链接:http://write.blog.csdn.net/postedit/78175069
來源:CSDN
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逻辑教育_Hank

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值