-
1 教学内容
-
2 教学视频
本节教学内容:
1、指令寻址
2、数据寻址
教学目的和要求:
1、掌握立即数寻址方式及其指令格式;
2、掌握直接寻址方式及其指令格式;
3、掌握隐含寻址方式及其指令格式;
4、掌握间接寻址方式及其指令格式;
5、掌握寄存器寻址方式及其指令格式;
6、掌握寄存器间接寻址方式及其指令格式;
7、掌握基址寻址方式及其指令格式;
8、掌握变址寻址方式及其指令格式;
9、掌握相对寻址方式及其指令格式;
10、掌握堆栈寻址方式及其指令格式;
重点:1、各种数据寻址方式;
2、操作数的类型。
难点:1、理解指令格式
重点:操作数类型对程序效率的影响
难点:指令的寻址方式
第1、2讲 各种寻址方式
一、知识要点
1、指令寻址
2、数据的各种寻址方式
二、教学安排
先介绍指令寻址方式,然后具体介绍各种数据寻址方式,包括:立即寻址、直接寻址、隐含寻址、间接寻址、寄存器寻址、寄存器间接寻址、基址寻址、变址寻址、相对寻址、堆栈寻址,讲解时注意各种寻址方式的特点和它们之间的区别。
三、教学内容
1、指令寻址
寻址方式就是处理器根据指令中给出的地址信息来寻找物理地址的方式,是确定本条指令的数据地址以及下一条要执行的指令地址的方法。
指令的寻址方式有以下两种,下图示意了指令寻址过程。

顺序寻址方式
由于指令地址在内存中按顺序安排,当执行一段程序时,通常是一条指令接一条指令地顺序进行。也就是说,从存储器取出第1条指令,然后执行这条指令;接着从存储器取出第2条指令,再执行第二条指令;接着再取出第3条指令。[2]
这种程序顺序执行的过程,称为指令的顺序寻址方式。为此,必须使用程序计数器(又称指令计数器)PC来计数指令的顺序号,该顺序号就是指令在内存中的地址。
跳跃寻址方式
当程序转移执行的顺序时,指令的寻址就采取跳跃寻址方式。所谓跳跃,是指下条指令的地址码不是由程序计数器给出,而是由本条指令给出。注意,程序跳跃后,按新的指令地址开始顺序执行。因此,程序计数器的内容也必须相应改变,以便及时跟踪新的指令地址。
采用指令跳跃寻址方式,可以实现程序转移或构成循环程序,从而能缩短程序长度,或将某些程序作为公共程序引用。指令系统中的各种条件转移或无条件转移指令,就是为了实现指令的跳跃寻址而设置的。
2、数据寻址
数据寻址方式种类较多,在指令字中必须设一字段来指明属于哪一种寻址方式。指令的地址码子段通常都不代表操作数的真实地址,把它称为形式地址,记作A。操作数的真实地址称为有效地址,记作EA,它是由寻址方式和形式地址共同来确定的。由此可得指令的格式应如下图所示。

1)立即寻址
指令的地址字段指出的不是操作数的地址,而是操作数本身,这种寻址方式称为立即寻址。立即寻址方式的特点是指令执行时间很短,因为它不需要访问内存取数,从而节省了访问内存的时间。如:MOV AX,5678H 注意:立即数只能作为源操作数,不能作为目的操作数。

2)直接寻址
直接寻址是一种基本的寻址方法,其特点是:在指令格式的地址的字段中直接指出操作数在内存的地址。由于操作数的地址直接给出而不需要经过某种变换,所以称这种寻址方式为直接寻址方式。在指令中直接给出参与运算的操作数及运算结果所存放的主存地址,即在指令中直接给出有效地址

3)隐含寻址
这种类型的指令,不是明显地给出操作数的地址。而是在指令中隐含着操作数的地址。例如,单地址的指令格式,就不明显地在地址字段中指出第2操作数的地址,而是规定累加寄存器AC作为第2操作数地址。指令格式明显指出的仅是第1操作数的地址D。因此,累加寄存器AC对单地址指令格式来说是隐含地址。如:DAA。

4)间接寻址
间接寻址是相对直接寻址而言的,在间接寻址的情况下,指令地址字段中的形式地址不是操作数的真正地址,而是操作数地址的指示器,或者说此形式地址单元的内容才是操作数的有效地址。

间接寻址与直接寻址相比,扩大了操作数的寻址范围,因为A的位数通常小于指令字长,而存储字长可与指令字长相等。
间接寻址的第二个优点在于它便于编制程序。例如,用间接寻址可以很方便地完成子程序返回,下图示意了用于子程序返回的间址过程。

5)寄存器寻址
当操作数不放在内存中,而是放在CPU的通用寄存器中时,可采用寄存器寻址方式。显然,此时指令中给出的操作数地址不是内存的地址单元号,而是通用寄存器的编号(可以是8位也可以是16位(AX,BX,CX,DX))。指令结构中的RR型指令,就是采用寄存器寻址方式的例子。如:MOV DS,AX

6)寄存器间接寻址
寄存器间接寻址方式与寄存器寻址方式的区别在于:指令格式中的寄存器内容不是操作数,而是操作数的地址,该地址指明的操作数在内存中。

7)基址寻址
在基址寻址方式中将CPU中的基址寄存器的内容,加上变址寄存器的内容而形成操作数的有效地址。基址寻址的优点是可以扩大寻址能力,因为与形式地址相比,基址寄存器的位数可以设置得很长,从而可以在较大的存储空间中寻址。

被引用的专用寄存器含有一个存储器地址,地址字段含有一个相对于该地址的偏移量(通常是无符号的整数)。寄存器的引用可以使显式的,也可以是隐式的。
基址寻址方式,主要用来解决程序的动态定位问题。
在多道程序的环境下,用户不可决定自己使用的主存区,因而在编程时常按(以零为基准地址)相对地址来编写,当程序被放入主存时,操作系统根据主存空间情况给基址寄存器赋值,从而将虚地址转化为实地址。
8)变址寻址
变址寻址方式与基址寻址方式计算有效地址的方法很相似,它把CPU中某个变址寄存器的内容与偏移量D相加来形成操作数有效地址。

在通用寄存器中,有些寄存器可作为变址寄存器。把变址寄存器的内容(通常是首地址)与指令地址码部分给出的地址(通常是位移量)之和作为操作数的地址来获得所需要的操作数就称为变址寻址。
例:设数据块首地址为D,求N 个数的平均值

9)相对寻址
相对寻址是把程序计数器PC的内容加上指令格式中的形式地址D而形成操作数的有效地址。程序计数器的内容就是当前指令的地址。“相对”寻址,就是相对于当前的指令地址而言。采用相对寻址方式的好处是程序员无须用指令的绝对地址编程,因而所编程序可以放在内存的任何地方。指令格式:MOVAX,[BX+1200H] 操作数物理地址PA=(DS/SS)*10H+EA EA=(BX/BP/SI/DI)+(6/8)位偏移量Disp 对于BX,SI,DI寄存器来说段寄存器默认为DS,对于SP来说,段寄存器默认为SS。

10)堆栈寻址
堆栈寻址要求计算机中设有堆栈。堆栈既可用寄存器组来实现,也可利用主存的一部分空间作堆栈。堆栈的运行方式为先进后出或先进先出两种,先进后出型堆栈的操作数只能从一个口进行读或写。以软堆栈为例,可用堆栈指针SP指出栈顶地址,也可用CPU中一个或两个寄存器作为SP。操作数只能从栈顶地址指示的存储单元存或取。可见堆栈寻址也可视为一种隐含寻址,其操作数的地址总被隐含着SP中。堆栈寻址就其本质也可视为寄存器间接寻址,因SP可视为寄存器,它存放着操作数的有效地址。下图示意了堆栈寻址过程。

下图表示进栈“PUSH A”的过程。

下图表示出栈”POP A”的过程。

四、互动及练习
本次课采用提问的互动方式:
1、直接寻址与间接寻址的区别。
在讲完操作数寻址方式的知识后,请同学们先自己分析讨论,然后总结出比较好的区分方法和记忆方法。
2、堆栈进栈和出栈时SP的变化。
请同学们先谈谈自己的想法,然后引入堆栈寻址,通过例题来分析栈顶指针SP在进栈和出栈时分别作怎样的变化。

