《微型计算机原理及应用:寻址方式2013》由会员分享,可在线阅读,更多相关《微型计算机原理及应用:寻址方式2013(21页珍藏版)》请在金锄头文库上搜索。
1、1指令的寻址方式指令的寻址方式就是寻找指令操作数所在地址的方式,以就是寻找指令操作数所在地址的方式,以确定数据的来源和去处。确定数据的来源和去处。8086/8088指令中的操作数有三种可能的存放位置:指令中的操作数有三种可能的存放位置: 操作数在指令中,即指令的操作数部分就是操作数本操作数在指令中,即指令的操作数部分就是操作数本身,这种操作数叫立即操作数。身,这种操作数叫立即操作数。 操作数包含在操作数包含在CPU的某个内部寄存器中,这时指令的的某个内部寄存器中,这时指令的操作数部分是操作数部分是CPU内部寄存器的一个编码。内部寄存器的一个编码。 操作数在内存的数据区中,这时指令的操作数部分包
2、操作数在内存的数据区中,这时指令的操作数部分包含此操作数所在的内存地址。含此操作数所在的内存地址。 下面介绍下面介绍8086/8088的几种寻址方式。的几种寻址方式。8086/8088的寻址方式的寻址方式228086/8088提供了共提供了共7种不同的寻址方式种不同的寻址方式 立即数寻址立即数寻址 寄存器相对寻址寄存器相对寻址 寄存器寻址寄存器寻址 基址基址-变址寻址变址寻址 直接寻址直接寻址 相对的基址相对的基址-变址寻址变址寻址 寄存器间接寻址寄存器间接寻址 8086/8088的操作数寻址方式的操作数寻址方式指令系指令系统中指令操作数的来源共有中指令操作数的来源共有4种:种:(1)立即数)
3、立即数 MOV AX, 2000H(2)寄存器)寄存器 MOV AX, BX(3)存)存储器器 MOV AX,BX(4)I/O端口端口 IN AX,40H3(1)立即数寻址方式)立即数寻址方式 定义:操作数直接存放在指令中,紧跟在操作码之后,与操定义:操作数直接存放在指令中,紧跟在操作码之后,与操作码一起存放在代码段区域。立即数可以是作码一起存放在代码段区域。立即数可以是8位、位、16位。立即数可位。立即数可以用二进制数、八进制数、十进制数以及十六进制数来表示。以用二进制数、八进制数、十进制数以及十六进制数来表示。 【例例1】MOV AL,10 ;(;(AL)立即数立即数10(十进制数)(十进
4、制数)MOV AL,00100101B ;(;(AL)立即数立即数00100101B(二进制数)(二进制数)MOV AH,0AH ;(;(AH)立即数立即数0AH(十六进制数)(十六进制数)MOV AL,58H ;(;(AL)立即数立即数58H(十六进制数)(十六进制数)MOV BX,1234H ;(;(BX)立即数立即数1234H后两条指令执行结果如图所示。后两条指令执行结果如图所示。立即数寻址立即数寻址注意:注意:立即数寻址方式只能用于源操作数,不能用于目的立即数寻址方式只能用于源操作数,不能用于目的操作数,且原操作数长度与目的操作数长度一致。主要用操作数,且原操作数长度与目的操作数长度一
5、致。主要用于给寄存器赋值。于给寄存器赋值。 立即数寻址方式不执行总线周期,执行速度快。立即数寻址方式不执行总线周期,执行速度快。 立即数为立即数为16位时,低位字节存放在存储器低地址单位时,低位字节存放在存储器低地址单元,高位字节存放在存储器高地址单元。元,高位字节存放在存储器高地址单元。4(2)寄存器寻址方式)寄存器寻址方式 定义:操作数放在寄存器内,由指令直接给出某个寄存器的名定义:操作数放在寄存器内,由指令直接给出某个寄存器的名字,以寄存器的内容作为操作数。寄存器可以是字,以寄存器的内容作为操作数。寄存器可以是16位的位的AX、BX、CX、DX、SI、DI、SP、BP寄存器,也可以是寄存
6、器,也可以是8位的位的AH、AL、BH、BL、CH、CL、DH、DL寄存器。寄存器。 【例例2】 MOV AX,CX ;(;(AX)(CX) INC AL ;(;(AL)(AL)+1 指令执行结果如图所示指令执行结果如图所示图图 寄存器寻址寄存器寻址注意:注意: 寄存器寻址方式的指令操作在寄存器寻址方式的指令操作在CPU内部执行,内部执行,不需要执行总线周期,执行速度快。不需要执行总线周期,执行速度快。 寄存器寻址方式既适用于指令的源操作数,也寄存器寻址方式既适用于指令的源操作数,也适用于目的操作数,并且可同时用于源操作数和目适用于目的操作数,并且可同时用于源操作数和目的操作数。的操作数。 5
7、(3)直接寻址方式)直接寻址方式 定义:操作数在存储器中,指令中直接给出操作数所在存储单定义:操作数在存储器中,指令中直接给出操作数所在存储单元的有效地址。有效地址(元的有效地址。有效地址(EA Effective Address)也称为偏移地址,)也称为偏移地址,它代表操作数所在存储单元距离段首址的字节数。有效地址是一个它代表操作数所在存储单元距离段首址的字节数。有效地址是一个无符号的无符号的16位二进制数。位二进制数。【例例3】MOV AH,1234H ;将;将DS段中段中1234H单元的内容送给单元的内容送给AHMOV AH,VALUE ;将;将DS段中段中VALUE单元的内容送给单元的
8、内容送给AHMOV AX, 2100H ;将;将DS段中段中2100H单元的内容送给单元的内容送给AL, 2101H单元的内容送给单元的内容送给AHMOV BX,ES:【2000H】 ;段超越,操作数在附加段。即;段超越,操作数在附加段。即 物理地址(物理地址(ES)* 10H +2000H注意:注意: 直接寻址方式的操作数所在存储单元的段地址直接寻址方式的操作数所在存储单元的段地址一般在数据段寄存器一般在数据段寄存器DS中。中。 如果操作数在其它段,则需要在指令中用段超如果操作数在其它段,则需要在指令中用段超越前缀指出相应的段寄存器名。越前缀指出相应的段寄存器名。 VALUE是一种符号表示法
9、,此内容将在伪指令是一种符号表示法,此内容将在伪指令中给予讲解。中给予讲解。 在实地址方式下,物理地址在实地址方式下,物理地址10H*段地址段地址(DS)+偏移地址(偏移地址(EA)6【例例4】 MOV AX,DS:2000H 解:当(解:当(DS)=3000H时,时,物理地址物理地址 10H *3000H+2000H32000H,指令的执行结果是:(指令的执行结果是:(AL)=(32000H),),(AH)=(32001H) 即内存即内存32000H和和32001H单元的内单元的内容已传送到寄存器容已传送到寄存器AX中。中。指令的执行情况如图指令的执行情况如图 所示。所示。直接寻址指令执行示
10、意图直接寻址指令执行示意图7可以分成两种情况:可以分成两种情况: 以以SI、DI、BX间接寻址,则通常操作数在现行数据间接寻址,则通常操作数在现行数据段段DS区域中,物理地址的计算方法为:区域中,物理地址的计算方法为:物理地址物理地址= 10H (DS)+(BX)(寄存器)(寄存器SI、DI类同)类同) 当使用寄存器当使用寄存器BP时,操作数所在存储单元的段地址时,操作数所在存储单元的段地址在堆栈段寄存器在堆栈段寄存器SS中。物理地址的计算方法为:中。物理地址的计算方法为: 物理地址物理地址= 10H (SS)+(BP)(4)寄存器间接寻址方式)寄存器间接寻址方式 定义:操作数在存储器中,指令
11、中寄存器的内容定义:操作数在存储器中,指令中寄存器的内容作为操作数所在存储单元的有效地址。寄存器可以是某作为操作数所在存储单元的有效地址。寄存器可以是某个基址寄存器个基址寄存器BX、BP,或某个变址寄存器,或某个变址寄存器SI、DI。操作数有效地址操作数有效地址EA为:为: 8【例例5】 已知:(已知:(DS)3000H,(,(SI)2000H指令:指令:MOV AX,SI ;(;(AX)(SI)有效地址有效地址EA2000H物理地址物理地址 10H (DS)+(SI)163000H+2000H=30000H+2000H32000H 指令执行结果是将指令执行结果是将32000H和和32001H
12、单元的内容送入单元的内容送入寄存器寄存器AX中。若在指令中规定是段超越的,则中。若在指令中规定是段超越的,则SI内容也可内容也可以与其它的段寄存器相加,形成物理地址。指令的执行情以与其它的段寄存器相加,形成物理地址。指令的执行情况如图况如图 所示。所示。图图 MOV AX,SI 指令的执行示意图指令的执行示意图9(5)寄存器相对寻址方式(或称直接变址寻址方式)寄存器相对寻址方式(或称直接变址寻址方式) 定义:操作数在存储器内,指令中寄存器的内容与指令定义:操作数在存储器内,指令中寄存器的内容与指令指定的位移量(指定的位移量(DISP)之和作为操作数所在存储单元的有效)之和作为操作数所在存储单元
13、的有效地址。寄存器可以是基址寄存器地址。寄存器可以是基址寄存器BX、BP,也可以是变址寄存,也可以是变址寄存器器SI、DI。位移量是一个。位移量是一个8位(位(DISP8)或)或16位(位(DISP16)的)的带符号二进制数。有效地址带符号二进制数。有效地址EA的计算方法为:的计算方法为: 使用寄存器使用寄存器BX、SI、DI时与数据段寄存器时与数据段寄存器DS有关,使用有关,使用寄存器寄存器BP时与堆栈段寄存器时与堆栈段寄存器SS有关。有关。以寄存器以寄存器SI、8位位移量为例,物理地址为位位移量为例,物理地址为:物理地址物理地址=16(DS)+(SI)+DISP8(使用寄存器(使用寄存器B
14、X、DI类同)类同)以寄存器以寄存器BP、16位位移量为例,物理地址为位位移量为例,物理地址为:物理地址物理地址= 10H (SS)+(BP)+DISP1610【例例7】 已知:(已知:(DS)2000H,(,(SI)1000H,ARRAY2000H(16位位移量)位位移量)指令:指令:MOVBX,ARRATSI 或或: MOVBX,ARRAY+SI有效地址有效地址EA(SI)+(ARRAY)1000H+2000H3000H。物理地址物理地址 10H (DS)+(SI)+DISP1620000H+1000H+2000H23000H。指令执行结果是将。指令执行结果是将23000H和和23001H
15、单元的内容送入寄存器单元的内容送入寄存器BX中。指令执行情况如图所示。中。指令执行情况如图所示。这种寻址方式同样可用这种寻址方式同样可用于表格处理,表格的首于表格处理,表格的首地址可设置为位移量,地址可设置为位移量,利用修改基址或变址寄利用修改基址或变址寄存器的内容来取得表格存器的内容来取得表格中的值。中的值。MOVBX,ARRATSI 指令执行示意图指令执行示意图11(6)基址变址寻址方式)基址变址寻址方式 定义:操作数在存储器内,指令将基址寄存器(定义:操作数在存储器内,指令将基址寄存器(BX或或BP)与变址寄)与变址寄存器(存器(SI或或DI)内容之和作为操作数所在存储单元的有效地址)内
16、容之和作为操作数所在存储单元的有效地址EA。有效。有效地址地址EA的计算方法为:的计算方法为:EA(BX)/(BP)+(SI)/(DI)。)。l 当使用基址寄存器当使用基址寄存器BX时,段寄存器为时,段寄存器为DS,物理地址计算方法为:,物理地址计算方法为:物理地址物理地址16(DS)+(BX)+(SI /DI )。)。l 当使用基址寄存器当使用基址寄存器BP时,段寄存器为时,段寄存器为SS,物理地址计算方法为:,物理地址计算方法为: 物理地址物理地址16(SS)+(BP)+(SI /DI )。)。【例例8】 已知:(已知:(DS)2000H,(,(BX)1234H,(,(SI)5678H指令
17、:指令:MOV AL,BX SI或或 MOVAL,BX+SI有效地址有效地址EA(BX)+(SI)1234H+5678H68ACH。物理地址物理地址10H(DS)+ EA20000H+68ACH268ACH。指令执行结果是将指令执行结果是将268ACH单元的内容送入寄存器单元的内容送入寄存器AL中。中。 注意如下是错误书写:注意如下是错误书写:MOV AX,BX+BP ;不允许同时使用;不允许同时使用BX和和BPMOV AX,SI+DI ;不允许同时使用;不允许同时使用SI和和DI 基址变址寻址方式中,可以使用段跨越前缀标识操作基址变址寻址方式中,可以使用段跨越前缀标识操作数所在的段。数所在的
18、段。MOV AX, ES:BX+DI物理地址物理地址16(ES)+(BX)+(DI) 这种寻址方式同样适用于数组或表格处理,首地址可这种寻址方式同样适用于数组或表格处理,首地址可存放在基址寄存器中,而用变址寄存器来访问数组中的某存放在基址寄存器中,而用变址寄存器来访问数组中的某个元素。个元素。12基址加变址寻址基址加变址寻址例:例: 操操作作数数的的有有效效地地址址是是一一个个基基址址寄寄存存器器内内容容加加上上一一个个变变址址寄寄存存器器内内容容,默默认认的的段段寄寄存存器器关关系系同同上。上。基址加变址寻址举例。基址加变址寻址举例。 MOV AX,BX+SI设(设(DS)=5500H,(,
19、(BX)=0256H,(SI)=3094H,物理地址为:,物理地址为:582EAH。内存的存储情况内存的存储情况如下页如下页图所示。图所示。 ?13基址加变址寻址示意图基址加变址寻址示意图(AX)=2A08H。 14(7)相对基址变址寻址方式)相对基址变址寻址方式 定义:操作数在存储器内。指令将基址寄存器(定义:操作数在存储器内。指令将基址寄存器(BX或或BP)与变址寄存器()与变址寄存器(SI或或DI)的内容之和再加上位移量()的内容之和再加上位移量(8位或位或16位),得到操作数所在存储单元的有效地址。位),得到操作数所在存储单元的有效地址。l有效地址有效地址EA的计算方法为:的计算方法为
20、:EA(BX)/(BP)+(SI)/(DI)+DISP8 / DISP16 l 当使用当使用基址基址寄存器寄存器BX时,段寄存器为时,段寄存器为DS,物理地址计算,物理地址计算方法:方法:物理地址物理地址16(DS)+(BX)+(SI)/(DI)+ DISP8/ DISP16l 当使用当使用基址指针基址指针寄存器寄存器BP时,段寄存器为时,段寄存器为SS,物理地址,物理地址计算方法:计算方法:物理地址物理地址16(SS)+(BP)+(SI)/(DI)+ DISP8/ DISP1615(7)相对基址变址寻址方式举例)相对基址变址寻址方式举例 【例例9】 已知:(已知:(DS)2000H,(,(B
21、X)1000H,(,(SI)0500H,DA11220H指令:指令:MOV AX,DA1BXSI或或 MOV AX,DA1 BX+SI或或 MOV AX,DA1+BX+SI有效地址有效地址EA (BX)+(SI)+DISP161000H+0500H+1220H 2720H物理地址物理地址 10H(DS)+EA20000H+1000H+0500H+1220H 22720H指令执行结果是将指令执行结果是将22720H、22721H单元的内容送入寄存器单元的内容送入寄存器AX中。指令执行情况如图所示。中。指令执行情况如图所示。 注意如下是错误书写:注意如下是错误书写:MOV AX,DATBX+BP
22、;不允许同时使用;不允许同时使用BX和和BPMOV AX,DATSI+DI ;不允许同时使用;不允许同时使用SI和和DI这种寻址方式通常用于对二维数组的寻址。例如,存储器中这种寻址方式通常用于对二维数组的寻址。例如,存储器中存放着由多个记录组成的文件,则位移量可指向文件之首,存放着由多个记录组成的文件,则位移量可指向文件之首,基址寄存器指向某个记录,变址寄存器则指向该记录中的一基址寄存器指向某个记录,变址寄存器则指向该记录中的一个元素。个元素。 16(7)相对基址变址寻址方式举例)相对基址变址寻址方式举例 基址加变址也允许带一个基址加变址也允许带一个8 8位位或或1616位的位移量位的位移量。
23、 MOV AX,MASK +BX+DI 设(设(DS)=5000H,(,(BX)=1256H,(DI)=1500H,MASK=1F34H, 物理地址为:物理地址为:5468AH。内存的存储情况内存的存储情况如下页如下页图所示,图所示, ?17(AX)=2A08H18操作数寻址小结操作数寻址小结l指令由(指令由( )和()和( )构成)构成l如何取得操作数如何取得操作数称为(称为( )操作码操作码 操作数操作数寻址方式寻址方式19 寻址方式可分为寻址方式可分为立即数寻址立即数寻址直接寻址直接寻址寄存器相对寻址寄存器相对寻址寄存器寻址寄存器寻址基址基址-变址寻址变址寻址基址基址-变址相对寻址变址相对寻址寄存器间接寻址寄存器间接寻址20寄存器间接、寄存器相对、基址变址、相对基址变址四种寻寄存器间接、寄存器相对、基址变址、相对基址变址四种寻址方式的比较:址方式的比较: 寻址方式寻址方式 指令操作数形式指令操作数形式n 寄存器间接寄存器间接 只有一个寄存器(只有一个寄存器(BX/BP/SI/DI之一)之一)n 寄存器相对寄存器相对 一个寄存器加上位移量一个寄存器加上位移量n 基址加变址基址加变址 两个不同类别的寄存器两个不同类别的寄存器n 相对基址加变址相对基址加变址 两个不同类别的寄存器加上位移量两个不同类别的寄存器加上位移量