第3章指令系统与寻址方式导论.ppt

  1. 1、本文档共110页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三章指令系统与寻址方式 ; 本章重点;3.1 汇编语言指令 ;3.1.2 汇编指令;目的操作数;2.指令属性;3.1.3 指令系统 ;3.1.4汇编指令举例;3.2指令的存取;3.2指令的存取;3.1.1 8086PC取指过程;3.1.4修改CS、IP的指令;3.1.4修改CS、IP的指令;如何修改AX中的值?;修改CS、IP的指令;修改CS、IP的指令;例子:;问题分析结果:;3.1.5 代码存放的地方-代码段;3.1.5代码段;3..1.5代码段;3.2 数据存取;问题: 写几条指令,将al中的数据送入内存单元10000H?(思考后分析) 分析问题本质: 怎样将数据从寄存器送入内存单元? 结论:mov bx,1000H mov ds,bx mov [0],al (一种合理的回答);3.2.2 字的传送;问题:内存中的情况如右图,写出下面指令执行后寄存器ax,bx,cx中的值。 思考后看分析。(单步跟踪);3.2.2 字的传送(续);问题:内存中的情况如右图,写出下面指令执行后寄存器ax,bx,cx中的值。 思考后看分析。(单步跟踪);问题分析;add和sub指令同mov一样,都有两个操作对象。 它们可以对段寄存器进行操作吗? (请自行在Debug中试验);3.2.4 数据段;3.2.4 数据段(续);我们将123B0H~123BAH的内存单元定义为数据段,我们现在要累加这个数据段中的前3个单元中的数据,代码如下:;问题 写几条指令,累加数据段中的前3个字型数据。 思考后看分析。;问题分析;3.2.5 小结;小结(续);3.3 栈;;;栈有两个基本的操作:入栈和出栈。 入栈:将一个新的元素放到栈顶; 出栈:从栈顶取出一个元素。 栈顶的元素总是最后入栈,需要出栈时,又最先被从栈中取出。 栈的操作规则:LIFO (Last In First Out,后进先出);3.3.1 CPU提供的栈机制;3.3.1 CPU提供的栈机制(续);下面举例说明,我们可以将10000H~1000FH这段内存当作栈来使用。 下面一段指令的执行过程: mov ax,0123H push ax mov bx,2266H push bx mov cx,1122H push cx pop ax pop bx pop cx;两个疑问;对于两个疑问的分析;push 指令的执行过程;push 指令的执行过程;问题:如果我们将10000H~1000FH 这段空间当作栈,初始状态栈是空的,此时,SS=1000H,SP=? 思考后看分析。;问题分析;问题分析(续);问题分析(续);问题分析(续);pop 指令的执行过程;pop 指令的执行过程;pop 指令的执行过程;3.3.3 栈顶超界的问题;3.3.3 栈顶超界的问题(续);栈顶超界是危险的: 因为我们既然将一段空间安排为栈 ,那么在栈空间之外的空间里很可能存放了具有其他用途的数据、代码等,这些数据、代码可能是我们自己的程序中的,也可能是别的程序中的。 (毕竟一个计算机系统并不是只有我们自己的程序在运行);但是由于我们在入栈出栈时的不小心,而将这些数据、代码意外地改写,将会引发一连串的错误。 我们当然希望CPU 可以帮我们解决这个问题,;比如说在CPU中有记录栈顶上限和下限的寄存器,我们可以通过填写这些寄存器来指定栈空间的范围 ,然后 ,CPU 在执行push指令的时候靠检测栈顶上限寄存器,在执行pop 指令的时候靠检测栈顶下限寄存器保证不会超界。 实际情况:8086CPU中并没有这样的寄存器。;8086CPU不保证对栈的操作不会超界。 这就是说, 8086CPU 只知道栈顶在何处(由SS:SP指示),而不知道读者安排的栈空间有多大。这点就好像 ,CPU 只知道当前要执行的指令在何处(由CS:SP指示)而不知道读者要执行的指令有多少。 从这两点我们可以看出;8086CPU的工作机理,只考虑当前的情况: 当前栈顶在何处; 当前要执行的指令是哪一条。 结论;结论: 我们在编程的时候要自己操心栈顶超界的问题 ,要根据可能用到的最大栈空间,来安排栈的大小,防止入栈的数据太多而导致的超界;执行出栈操作的时候也要注意,以防栈空的时候继续出栈而导致的超界。;栈与内存;3.3.5栈的综述;3.3.5栈的综述(续);3.3.6 栈段;3.3.6 栈段(续);将一段内存当作栈段,仅仅是我们在编程时的一种安排,CPU 并不会由于这种安排,就在执行push、pop

文档评论(0)

1112111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档