鱼C论坛

 找回密码
 立即注册
查看: 2969|回复: 0

[学习笔记] 《零基础入门学习汇编语言》第十七讲

[复制链接]
发表于 2017-6-27 21:57:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 shuiyu 于 2017-6-29 21:35 编辑

小白刚学,不对的请各位大佬指正,谢谢

一、栈顶超界的问题
(1)当栈满的时候再使用push指令入栈,栈空的时候再使用pop指令出栈,都将发生栈顶超界问题。(C语言的缓冲区溢出原理差不多)
(2)我们当然希望CPU 可以帮我们解决这个问题,但是8086CPU中并没有这样的寄存器。8086CPU的工作机理,只考虑两种情况:当前栈顶在何处;当前要执行的指令是哪一条。
(3)我们在编程的时候要自己操心栈顶超界的问题 ,要根据可能用到的最大栈空间,来安排栈的大小,防止入栈的数据太多而导致的超界;执行出栈操作的时候也要注意,以防栈空的时候继续出栈而导致的超界。


二、push、pop指令
(1)push和pop指令的格式(通用寄存器)
push 寄存器:将一个寄存器中的数据入栈
pop寄存器:出栈,用一个寄存器接收出栈的数据
例如:
push ax
pop bx
(2)push和pop指令的格式(段寄存器)
push和pop指令的格式
push 段寄存器:将一个段寄存器中的数据入栈
pop段寄存器:出栈,用一个段寄存器接收出栈的数据
例如:
push ds
pop es
(3)push和pop指令的格式(内存单元)
push内存单元:将一个内存单元处的字入栈(栈操作都是以字为单位)
pop 内存单元:出栈,用一个内存字单元接收出栈的数据
例如:
push [0]
pop [2]
(4)指令执行时 ,CPU 要知道内存单元的地址,可以在 push、pop 指令中给出内存单元的偏移地址,段地址在指令执行时,CPU从ds中取得。
(5)push ax
1.将SS:SP指向的内存单元处的数据送入ax中;
2.SP = SP-2,SS:SP指向当前栈顶下面的单元,以当前栈顶下面的单元为新的栈顶。

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



谢谢小甲鱼带来的视频教程,感谢!!


   
本节结束,多谢览阅!
小白刚学,不对的请各位大佬指正,谢谢

评分

参与人数 1鱼币 +4 收起 理由
小甲鱼 + 4 支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 17:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表