《汇编语言》讲稿_03 (2).ppt

《汇编语言》讲稿_03 (2).ppt

ID:48243745

大小:497.50 KB

页数:77页

时间:2020-01-18

《汇编语言》讲稿_03 (2).ppt_第1页
《汇编语言》讲稿_03 (2).ppt_第2页
《汇编语言》讲稿_03 (2).ppt_第3页
《汇编语言》讲稿_03 (2).ppt_第4页
《汇编语言》讲稿_03 (2).ppt_第5页
资源描述:

《《汇编语言》讲稿_03 (2).ppt》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、2DS和[address]CPU要读取一个内存单元的时候,必须先给出这个内存单元的地址;在8086PC中,内存地址由段地址和偏移地址组成。8086CPU中有一个DS寄存器,通常用来存放要访问的数据的段地址。例如7/20/20211内存中字的存储问题:(1)0地址单元中存放的字节型数据是多少?(2)0地址字单元中存放的字型数据是多少?(3)2地址字单元中存放的字节型数据是多少?7/20/20212DS和[address]从哪个内存单元送到哪个寄存器中呢?mov指令的格式:mov寄存器名,内存单元地址“[…]”表示一个内存单元,“

2、[…]”中的…表示内存单元的偏移地址。那么内存单元的段地址是多少呢?7/20/20212DS和[address]例如:我们要读取10000H单元的内容可以用如下程序段进行:movbx,1000Hmovds,bxmoval,[0]上面三条指令将10000H(1000:0)中的数据读到al中。7/20/20214mov、add、sub指令根据已知指令进行推测:mov段寄存器,寄存器mov寄存器,段寄存器(验证)mov内存单元,寄存器mov内存单元,段寄存器mov段寄存器,内存单元7/20/20212DS和[address]m

3、oval,[0]mov[1],[0]moval,[0]mov[1],al7/20/20212DS和[address]如何把1000H送入ds?相似的方式movds,1000H?8086CPU不支持将数据直接送入段寄存器的操作,ds是一个段寄存器。(硬件设计的问题)movds,1000H是非法的。数据一般的寄存器段寄存器7/20/20212DS和[address]结论:movbx,1000Hmovds,bxmov[0],al7/20/20213字的传送因为8086CPU是16位结构,有16根数据线,所以,可以一次性传送16位

4、的数据,也就是一次性传送一个字。7/20/2021数据段前面讲过,对于8086PC机,我们可以根据需要将一组内存单元定义为一个段。比如我们用123B0H~123B9H这段空间来存放数据:段地址:123BH长度:10字节7/20/20215数据段如何访问数据段中的数据呢?将一段内存当作数据段,是我们在编程时的一种安排,我们可以在具体操作的时候,用ds存放数据段的段地址,再根据需要,用相关指令访问数据段中的具体单元。示例7/20/20215数据段例题:将123B0H~123BAH的内存单元定义为数据段,请累加这个数据段中的前3个单

5、元中的数据,代码如下:7/20/20215数据段问题5写几条指令,累加数据段中的前3个字型数据。7/20/2021问题5分析注意:一个字型数据占两个单元,所以偏移地址是0、2、4。7/20/20216栈我们研究栈的角度:栈是一种具有特殊的访问方式的存储空间。它的特殊性就在于,最后进入这个空间的数据,最先出去。可以用一个盒子和3本书来描述栈的操作方式7/20/20217/20/20217/20/20216栈栈有两个基本的操作:入栈和出栈。入栈:将一个新的元素放到栈顶;出栈:从栈顶取出一个元素。栈顶的元素总是最后入栈,需要出栈时,

6、又最先被从栈中取出。栈的操作规则:LIFO(LastInFirstOut,后进先出)7/20/20217CPU提供的栈机制现今的CPU中都有栈的设计。8086CPU提供相关的指令来以栈的方式访问内存空间。PUSH和POP指令这意味着,我们在基于8086CPU编程的时候,可以将一段内存当作栈来使用。7/20/20217CPU提供的栈机制8086CPU提供入栈和出栈指令:(最基本的)PUSH(入栈)POP(出栈)pushax:将寄存器ax中的数据送入栈中;popax:从栈顶取出数据送入ax。8086CPU的入栈和出栈操作都是以字为

7、单位进行的。7/20/20216栈下面举例说明,我们可以将10000H~1000FH这段内存当作栈来使用。下面一段指令的执行过程:movax,0123Hpushaxmovbx,2266Hpushbxmovcx,1122Hpushcxpopaxpopbxpopcx7/20/20216栈指令序列的执行过程演示注意:字型数据用两个单元存放,高地址单元放高8位,低地址单元放低8位。7/20/20217/20/2021两个问题1、CPU如何知道一段内存空间被当作栈使用?2、执行push和pop的时候,如何知道哪个单元是栈顶单元?分析结论

8、:任意时刻,SS:SP指向栈顶元素。7/20/2021对于两个疑问的分析回想:CPU如何指向当前要执行的指令所在的位置?寄存器CS和IP中存放着当前指令的段地址和偏移地址。8086CPU中,另有两个寄存器:段寄存器SS存放栈顶的段地址寄存器SP存放栈顶的偏移地址任意时刻,SS

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。