版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、LOGO课件课件第第3 章存放器内存访问章存放器内存访问v 3.1 内存中字的存储内存中字的存储v 3.2 DS和和addressv 3.3 字的传送字的传送v 3.4 mov、add、sub指令指令v 3.5 数据段数据段v 3.6 栈栈v 3.7 CPU提供的栈机制提供的栈机制v 3.8 栈顶超界的问题栈顶超界的问题v 3.9 push、pop指令指令v 3.10 栈段栈段引言引言v在第在第2章中,我们主要从章中,我们主要从 CPU 如何执行如何执行指令的角度讲解了指令的角度讲解了8086CPU的逻辑构造、的逻辑构造、构成物理地址的方法、相关的存放器以及构成物理地址的方法、相关的存放器以及
2、一些指令。一些指令。v这一章中,我们从访问内存的角度继续学这一章中,我们从访问内存的角度继续学习几个存放器。习几个存放器。v在在0地址处开场存放地址处开场存放20000(4E20H)v0号单元是低地址单元,号单元是低地址单元,1号单元是高地址单元。号单元是高地址单元。3.1 内存中字的存储内存中字的存储3.1 内存中字的存储内存中字的存储v问题:问题:v10地址单元中存放的地址单元中存放的字节型数据是多少?字节型数据是多少?v20地址字单元中存放地址字单元中存放的字型数据是多少?的字型数据是多少?v32地址字单元中存放地址字单元中存放的字节型数据是多少?的字节型数据是多少?3.1 内存中字的存
3、储内存中字的存储v问题:问题:v42地址单元中存放的地址单元中存放的字型数据是多少?字型数据是多少?v51地址字单元中存放地址字单元中存放的字型数据是多少?的字型数据是多少?v结论结论3.1 内存中字的存储内存中字的存储v结论:结论:v 任何两个地址延续的内存单元,任何两个地址延续的内存单元,N号单号单元和元和 N+1号单元,可以将它们看成两号单元,可以将它们看成两个内存单元个内存单元 ,也可以看成一个地址为,也可以看成一个地址为N的字单元中的高位字节单元和低位字节的字单元中的高位字节单元和低位字节单元。单元。3.2 DS和和addressvCPU要读取一个内存单元的时候,必需先要读取一个内存
4、单元的时候,必需先给出这个内存单元的地址;给出这个内存单元的地址;v在在8086PC中,内存地址由段地址和偏移中,内存地址由段地址和偏移地址组成。地址组成。v8086CPU中有一个中有一个 DS存放器,通常用存放器,通常用来存放要访问的数据的段地址。来存放要访问的数据的段地址。v例如例如3.2 DS和和addressv例如:我们要读取例如:我们要读取10000H单元的内容,单元的内容,送入存放器送入存放器al中。中。v 3.2 DS和和address知的知的mov指令可完成的两种传送功能:指令可完成的两种传送功能:1将数据直接送入存放器;将数据直接送入存放器;2将一个存放器中的内容送入另一个存
5、放器中。将一个存放器中的内容送入另一个存放器中。 mov 指令指令 还可以将一个内存单元中的内容送入还可以将一个内存单元中的内容送入一个存放器。一个存放器。3.2 DS和和addressv从哪个内存单元送到哪个存放器中呢?从哪个内存单元送到哪个存放器中呢?vmov指令的格式:指令的格式:v mov 存放器名,存放器名,偏移地址偏移地址3.2 DS和和addressv执行指令时,执行指令时,8086CPU自动取自动取DS中的数中的数据为内存单元的段地址。据为内存单元的段地址。v如何把如何把1000H送入送入ds?v传送指令传送指令 mov ds,1000H? v8086CPU不支持将数据直接送入
6、段存放器不支持将数据直接送入段存放器的操作,的操作,ds是一个段存放器。是一个段存放器。vmov ds,1000H 是非法的。是非法的。v数据数据普通的存放器普通的存放器段存放器段存放器v正确:正确: mov bx,1000Hv mov ds,bx错误3.2 DS和和address下面三条指令将下面三条指令将10000H1000:0中的中的数据读到数据读到al中。中。 mov bx,1000Hmov ds,bxmov al,0v 问题:问题:v 写几条指令,将写几条指令,将al中的数据送入内存单元中的数据送入内存单元10000H?思索后分析思索后分析v 分析问题本质:分析问题本质:v 怎样将数
7、据从存放器送入内存单元?怎样将数据从存放器送入内存单元?v 结论:结论:mov bx,1000Hv mov ds,bxv mov 0,al3.3 字的传送字的传送v由于由于8086CPU是是16位构造,有位构造,有16根数根数据线,所以,可以一次性传送据线,所以,可以一次性传送16位的数据,位的数据,也就是一次性传送一个字。也就是一次性传送一个字。v v问题问题3.3:内存中的情况如右图,写出下:内存中的情况如右图,写出下面指令执行后存放器面指令执行后存放器ax,bx,cx中的值。中的值。3.3 字的传送字的传送3.4 mov、add、sub指令指令v已学已学mov指令的几种方式:指令的几种方
8、式:v mov 存放器,数据存放器,数据v mov 存放器,存放器存放器,存放器v mov 存放器,内存单元存放器,内存单元v mov 内存单元,存放器内存单元,存放器v mov 段存放器,存放器段存放器,存放器vadd和和sub指令同指令同mov一样,都有两个一样,都有两个操作对象。操作对象。v它们可以对段存放器进展操作吗?它们可以对段存放器进展操作吗?3.4 mov、add、sub指令指令3.5 数据段数据段v前面讲过,对于前面讲过,对于8086PC机,我们可以根机,我们可以根据需求将一组内存单元定义为一个段。据需求将一组内存单元定义为一个段。v我们可以将一组长度为我们可以将一组长度为NN
9、64K、地、地址延续、起始地址为址延续、起始地址为16的倍数的内存单元的倍数的内存单元当作专门存储数据的内存空间,从而定义当作专门存储数据的内存空间,从而定义了一个数据段。了一个数据段。v比如我们用比如我们用123B0H123B9H这段空间这段空间来存放数据:来存放数据:v段地址:段地址:123BHv长度:长度:10字节字节3.5 数据段数据段v如何访问数据段中的数据呢?如何访问数据段中的数据呢?v将一段内存当作数据段,是我们在编程时的将一段内存当作数据段,是我们在编程时的一种安排,我们可以在详细操作的时候一种安排,我们可以在详细操作的时候 ,用,用 ds 存放数据段的段地址,再根据需求,用相
10、存放数据段的段地址,再根据需求,用相关指令访问数据段中的详细单元。关指令访问数据段中的详细单元。v例如例如3.5 数据段数据段v我们将我们将123B0H123BAH的内存单元定义的内存单元定义为数据段,我们如今要累加这个数据段中的前为数据段,我们如今要累加这个数据段中的前3个单元中的数据,代码如下:个单元中的数据,代码如下:3.5 数据段数据段v问题问题3.5v写几条指令,累加数据段中的前写几条指令,累加数据段中的前3个字型数个字型数据。据。v思索后看分析。思索后看分析。问题问题3.5分析分析v留意:一个字型数据占两个单元,所以偏移留意:一个字型数据占两个单元,所以偏移地址是地址是0、2、4。
11、3.1节节3.5节节 小结小结v 1字在内存中存储时字在内存中存储时 ,要用两个地址延续的内,要用两个地址延续的内存单元来存放,字的低位字节存放在低地址单元中,存单元来存放,字的低位字节存放在低地址单元中,高位字节存放再高地址单元中。高位字节存放再高地址单元中。v 2用用 mov 指令要访问内存单元,可以在指令要访问内存单元,可以在mov指令中只给出单元的偏移地址,此时,段地址默许指令中只给出单元的偏移地址,此时,段地址默许在在DS存放器中。存放器中。v 3address表示一个偏移地址为表示一个偏移地址为address的的内存单元。内存单元。3.1节节3.5节节 小结续小结续v4在内存和存放
12、器之间传送字型数据时,在内存和存放器之间传送字型数据时,高地址单元和高高地址单元和高8位存放器、低地址单元和位存放器、低地址单元和低低8位存放器相对应。位存放器相对应。v5mov、add、sub是具有两个操作对是具有两个操作对象的指令。象的指令。jmp是具有一个操作对象的指令。是具有一个操作对象的指令。3.6 栈栈v我们研讨栈的角度:我们研讨栈的角度:v 栈是一种具有特殊的访问方式的存储空栈是一种具有特殊的访问方式的存储空间。它的特殊性就在于,最后进入这个空间。它的特殊性就在于,最后进入这个空间的数据,最先出去。间的数据,最先出去。v可以用一个盒子和可以用一个盒子和3本书来描画本书来描画v 栈
13、的操作方式栈的操作方式3.6 栈栈v栈有两个根本的操作:入栈和出栈。栈有两个根本的操作:入栈和出栈。v入栈:将一个新的元素放到栈顶;入栈:将一个新的元素放到栈顶;v出栈:从栈顶取出一个元素。出栈:从栈顶取出一个元素。v栈顶的元素总是最后入栈,需求出栈时,又最先栈顶的元素总是最后入栈,需求出栈时,又最先被从栈中取出。被从栈中取出。v栈的操作规那么:栈的操作规那么:LIFOvLast In First Out,后进先出,后进先出3.7 CPU提供的栈机制提供的栈机制v8086CPU提供相关的指令来以栈的方提供相关的指令来以栈的方式访问内存空间。式访问内存空间。v这意味着,我们在基于这意味着,我们在
14、基于8086CPU编程编程的时候,可以将一段内存当作栈来运用。的时候,可以将一段内存当作栈来运用。3.7 CPU提供的栈机制提供的栈机制v8086CPU提供入栈和出栈指令:提供入栈和出栈指令: 最最根本的根本的v PUSH入栈入栈v POP 出栈出栈v push ax:将存放器:将存放器ax中的数据送入中的数据送入栈中;栈中;v pop ax :从栈顶取出数据送入:从栈顶取出数据送入ax。v8086CPU的入栈和出栈操作都是以字为的入栈和出栈操作都是以字为单位进展的。单位进展的。3.6 栈栈v 下面举例阐明,我们可以将下面举例阐明,我们可以将10000H1000FH这段内这段内存当作栈来运用。
15、存当作栈来运用。v 下面一段指令的执行过程:下面一段指令的执行过程:v mov ax,0123Hv push axv mov bx,2266Hv push bxv mov cx,1122Hv push cxv pop axv pop bxv pop cx3.6 栈栈v指令序列的执行过程演示指令序列的执行过程演示v留意:字型数据用两个单元存放,高地址单留意:字型数据用两个单元存放,高地址单元放高元放高 8 位,低地址单元放低位,低地址单元放低8 位。位。v能否有疑惑?能否有疑惑?v 两个疑问两个疑问 v 两个疑问两个疑问v1、CPU如何知道一段内存空间被当作栈如何知道一段内存空间被当作栈运用?运
16、用?v2、执行、执行push和和pop的时候,如何知道哪的时候,如何知道哪个单元是栈顶单元?个单元是栈顶单元?v分析分析v 结论:恣意时辰,结论:恣意时辰,SS:SP指向栈顶元素。指向栈顶元素。v 对于两个疑问的分析对于两个疑问的分析回想:回想:CPU如何指点当前要执行的指令所在的位置?如何指点当前要执行的指令所在的位置?存放器存放器CS和和IP中存放着当前指令的段地址和偏移地中存放着当前指令的段地址和偏移地址。址。8086CPU中,有两个存放器:中,有两个存放器:段存放器段存放器SS 存放栈顶的段地址存放栈顶的段地址存放器存放器SP 存放栈顶的偏移地址存放栈顶的偏移地址 恣意时辰,恣意时辰,
17、SS:SP指向栈顶元素。指向栈顶元素。push 指令的执行过程指令的执行过程vpush axv1SP=SP2;v2将将ax中的内容送入中的内容送入SS:SP指向的内存指向的内存单元处,单元处,SS:SP此时指向新栈顶。此时指向新栈顶。v图示图示push 指令的执行过程指令的执行过程3.6 栈栈v问题问题3.6:假设我们将:假设我们将10000H1000FH 这段空间当作栈,初始形状栈是空的,此时,这段空间当作栈,初始形状栈是空的,此时,SS=1000H,SP=?v思索后看分析。思索后看分析。问题问题3.6分析分析vSP = 0010Hpop 指令的执行过程指令的执行过程vpop axv1将将S
18、S:SP指向的内存单元处的数据送指向的内存单元处的数据送入入ax中;中;v2SP = SP+2,SS:SP指向当前栈顶指向当前栈顶下面的单元,以当前栈顶下面的单元为新的下面的单元,以当前栈顶下面的单元为新的栈顶。栈顶。v图示图示pop 指令的执行过程指令的执行过程v留意留意pop 指令的执行过程指令的执行过程v留意:留意:v出栈后,出栈后,SS:SP指向新的栈顶指向新的栈顶 1000EH,pop操作前的栈顶元素,操作前的栈顶元素,1000CH 处的处的2266H 依然存在依然存在 ,但是,它已不在栈中。,但是,它已不在栈中。v当再次执行当再次执行push等入栈指令后,等入栈指令后,SS:SP移
19、移至至1000CH,并在里面写入新的数据,它将,并在里面写入新的数据,它将被覆盖。被覆盖。3.8 栈顶超界的问题栈顶超界的问题vSS和和SP只记录了栈顶的地址,依托只记录了栈顶的地址,依托SS和和SP可以保证在入栈和出栈时找到栈顶。可以保证在入栈和出栈时找到栈顶。v可是,如何可以保证在入栈、出栈时,栈顶可是,如何可以保证在入栈、出栈时,栈顶不会超出栈空间?不会超出栈空间?3.8 栈顶超界的问题栈顶超界的问题v栈顶超界是危险的:栈顶超界是危险的:v 由于我们既然将一段空间安排为栈由于我们既然将一段空间安排为栈 ,那么,那么在栈空间之外的空间里很能够存放了具有其在栈空间之外的空间里很能够存放了具有
20、其他用途的数据、代码等,这些数据、代码能他用途的数据、代码等,这些数据、代码能够是我们本人的程序中的,也能够是别的程够是我们本人的程序中的,也能够是别的程序中的。序中的。3.8 栈顶超界的问题栈顶超界的问题v但是由于我们在入栈出栈时的不小心,而但是由于我们在入栈出栈时的不小心,而将这些数据、代码不测地改写,将会引发将这些数据、代码不测地改写,将会引发一连串的错误。一连串的错误。v我们当然希望我们当然希望CPU 可以帮我们处理这个问可以帮我们处理这个问题,题,3.8 栈顶超界的问题栈顶超界的问题v 比如说在比如说在CPU中有记录栈顶上限和下限的存放器,中有记录栈顶上限和下限的存放器,我们可以经过
21、填写这些存放器来指定栈空间的范围我们可以经过填写这些存放器来指定栈空间的范围 ,然后然后 ,CPU 在执行在执行push指令的时候靠检测栈顶指令的时候靠检测栈顶上限存放器,在执行上限存放器,在执行pop 指令的时候靠检测栈顶下指令的时候靠检测栈顶下限存放器保证不会超界。限存放器保证不会超界。v 实践情况:实践情况:8086CPU中并没有这样的存放器。中并没有这样的存放器。v 8086CPU不保证对栈的操作不会超界。不保证对栈的操作不会超界。v 这就是说,这就是说, 8086CPU 只知道栈顶在何处由只知道栈顶在何处由SS:SP指示,而不知道读者安排的栈空间有多大。指示,而不知道读者安排的栈空间
22、有多大。3.8 栈顶超界的问题栈顶超界的问题v结论:结论:v 我们在编程的时候要本人操心栈顶超界我们在编程的时候要本人操心栈顶超界的问题的问题 ,要根据能够用到的最大栈空间,要根据能够用到的最大栈空间,来安排栈的大小,防止入栈的数据太多而来安排栈的大小,防止入栈的数据太多而导致的超界;执行出栈操作的时候也要留导致的超界;执行出栈操作的时候也要留意,以防栈空的时候继续出栈而导致的超意,以防栈空的时候继续出栈而导致的超界。界。3.9 push、pop指令指令v push和和pop指令是可以在存放器和内存指令是可以在存放器和内存之间传送数据的。之间传送数据的。vpush和和pop指令的格式指令的格式
23、栈与内存栈与内存v栈空间当然也是内存空间的一部分,它只是栈空间当然也是内存空间的一部分,它只是一段可以以一种特殊的方式进展访问的内存一段可以以一种特殊的方式进展访问的内存空间。空间。3.9 push、pop指令指令vpush和和pop指令的格式指令的格式1vpush 存放器:将一个存放器中的数据入存放器:将一个存放器中的数据入栈栈vpop 存放器:出栈,用一个存放器接纳出存放器:出栈,用一个存放器接纳出栈的数据栈的数据v例如:例如:push axv pop bx3.9 push、pop指令指令vpush和和pop指令的格式指令的格式2vpush 段存放器:将一个段存放器中的数段存放器:将一个段
24、存放器中的数据入栈据入栈vpop 段存放器:出栈,用一个段存放器接段存放器:出栈,用一个段存放器接纳出栈的数据纳出栈的数据v例如:例如:push dsv pop es3.9 push、pop指令指令v push和和pop指令的格式指令的格式3v push 内存单元:将一个内存单元处的字入栈内存单元:将一个内存单元处的字入栈栈操作都是以字为单位栈操作都是以字为单位v pop 内存单元:出栈,用一个内存字单元接纳内存单元:出栈,用一个内存字单元接纳出栈的数据出栈的数据v 例如:例如:push 0v pop 23.9 push、pop指令指令v问题问题3.7v 编程:编程:v 将将10000H100
25、0FH 这段空间当作栈,这段空间当作栈,初始形状是空的,将初始形状是空的,将 AX、BX、DS中的数中的数据入栈。据入栈。v思索后看分析。思索后看分析。问题问题3.7分析分析3.9 push、pop指令指令v问题问题3.8v 编程:编程:v1将将10000H1000FH 这段空间当作这段空间当作栈,初始形状是空的;栈,初始形状是空的;v2设置设置AX=001AH,BX=001BH;v3将将AX、BX中的数据入栈;中的数据入栈;v4然后将然后将AX、BX清零;清零;v5从栈中恢复从栈中恢复AX、BX原来的内容。原来的内容。v思索后看分析。思索后看分析。问题问题3.8分析分析v结论结论问题问题3.
26、8分析分析v从上面的程序我们看到,用栈来暂存以后需从上面的程序我们看到,用栈来暂存以后需求恢复的存放器中的内容时求恢复的存放器中的内容时 ,出栈的顺序要,出栈的顺序要和入栈的顺序相反,由于最后入栈的存放器和入栈的顺序相反,由于最后入栈的存放器的内容在栈顶的内容在栈顶 ,所以在恢复时,要最先出栈。,所以在恢复时,要最先出栈。3.9 push、pop指令指令v问题问题3.9v 编程:编程:v 1将将10000H1000FH 这段空间当这段空间当作栈,初始形状是空的;作栈,初始形状是空的;v 2设置设置AX=002AH,BX=002BH;v 3利用栈利用栈 ,交换,交换 AX 和和 BX 中的数据。
27、中的数据。v思索后看分析。思索后看分析。问题问题3.9分析分析3.9 push、pop指令指令v 问题问题3.10v 我们假设要在我们假设要在10000H处写入字型数据处写入字型数据2266H,可以,可以用以下的代码完成:用以下的代码完成:v mov ax,1000Hv mov ds,axv mov ,ax,2266Hv mov 0,axv 补全下面的代码补全下面的代码3.9 push、pop指令指令v 补全下面的代码,完成同样的功能:补全下面的代码,完成同样的功能:v在在10000H处写入字型数据处写入字型数据2266H。v _v _v _v mov ax,2266Hv push axv 要求:不能运用要求:不能运用“mov 内存单元内存单元,存放器这类指令存放器这类指令v 思索后看分析。思索后看分析。问题问题3.10分析分析v我们看需补全代码的最后两条指令,将我们看需补全代码的最后两条指令,将ax中的中的2266H压入栈中,也就是说,最终应由压入栈中,也就是说,最终应由push ax将将2266H写入写入10000H处。处。v问题的关键就在于:如何使问题的关键就在于:如何使push ax访问的内访问的内存单元是存单元是10000H。vPush指令是入栈指
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工程基础材料加工术 6
- 工程基础材料加工术 4
- 大学生就业指导研究突破点
- 2026 八年级下册《阿基米德原理》课件
- 医院档案管理员岗位制度
- 医院负责制度规范
- 单位食堂采购配送制度
- 卫生单位工作制度
- 卫生站工作制度范本
- 卫生院培训医疗核心制度
- 【MOOC】《电网络分析》(浙江大学)章节期末慕课答案
- 2025年贵州省公安厅招聘警务辅助人员考试真题(含答案)
- 算力中心容器化部署方案
- 殡仪馆面试题目及答案
- 低空经济农林植保
- 拍摄剪辑培训课件
- 《数控加工编程》课件-端面粗车循环指令G72
- 2024年凤凰新华书店集团有限公司市县分公司招聘笔试真题
- 人教版八年级下册历史教案全册
- 五一游西安作文400字左右
- 毒品与艾滋病预防智慧树知到期末考试答案章节答案2024年湖南警察学院
评论
0/150
提交评论