1、第三章第三章 操作数的寻址方式操作数的寻址方式 复习复习(1)指令指令:制指挥计算机完成某一个操作的命令:制指挥计算机完成某一个操作的命令(2)程序程序:指令的集合:指令的集合(3)存储程序式计算机存储程序式计算机:针对待解决的问题,事先编:针对待解决的问题,事先编制好程序,存在存储器中,改动程序执行制好程序,存在存储器中,改动程序执行(4)指令基本形式指令基本形式(5)操作数寻址操作数寻址:指定操作数或操作数存放位置的方:指定操作数或操作数存放位置的方法法(6)基本寻址方式(基本寻址方式(7种)种)立即寻址方式、寄存器寻址方式、直接寻址立即寻址方式、寄存器寻址方式、直接寻址方式、寄存器间接寻
2、址方式、寄存器相对寻址方方式、寄存器间接寻址方式、寄存器相对寻址方式、基址加变址寻址方式、相对基址加变址寻址式、基址加变址寻址方式、相对基址加变址寻址方式等。其中,后五种寻址方式是确定内存单元方式等。其中,后五种寻址方式是确定内存单元有效地址的五种不同的计算方法。另外,在有效地址的五种不同的计算方法。另外,在32位位微机系统中,为了扩大对存储单元的寻址能力,微机系统中,为了扩大对存储单元的寻址能力,增加了一种新的寻址方式增加了一种新的寻址方式32位地址的寻址方位地址的寻址方式。式。(7)存储空间分段存储管理思想存储空间分段存储管理思想 存储空间分段存储空间分段 物理地址物理地址=段起始地址段起
3、始地址+段内偏移量(段内偏移量(EA)段起始地址由段寄存器提供代码计算所得,段起始地址由段寄存器提供代码计算所得,EA由指令地址段处理所得由指令地址段处理所得(8)表示形式表示形式 X 存储单元存储单元X (x)存储单元存储单元x中的内容中的内容 AX 寄存器寄存器AX (AX)寄存器寄存器AX中的内容中的内容 (9)指令形式指令形式 无操作数指令无操作数指令 单操作数指令单操作数指令 双操作数指令双操作数指令3.1 立即寻址方式立即寻址方式(1)操作数直接写在指令地址段中操作数直接写在指令地址段中(2)立即数不能作第一操作数(目标操作数)立即数不能作第一操作数(目标操作数)(3)不涉及存储器
4、地址不涉及存储器地址(4)例如:例如:MOV AH,80H ADD AX,1234H MOV ECX,123456H MOV B1,12H MOV W1,3456H ADD D1,32123456H 其中:其中:B1、W1和和D1分别是字节、字和双字单元。分别是字节、字和双字单元。下图是指令下图是指令“MOV AX,4576H”的存储形式的存储形式和执行情况示意图。和执行情况示意图。3.2 寄存器寻址方式寄存器寻址方式(1)操作数存在寄存器中操作数存在寄存器中(2)指令地址段给出寄存器编号指令地址段给出寄存器编号(3)源操作数可放在寄存器中源操作数可放在寄存器中 目标操作数可放在寄存器中目标操
5、作数可放在寄存器中 两者均可以作为寄存器形式两者均可以作为寄存器形式(4)最好用最好用注意位数一致注意位数一致 3.3 直接寻址方式直接寻址方式(1)操作数放在内存单元中,指令中给出操作数在段操作数放在内存单元中,指令中给出操作数在段中的相对位置中的相对位置有效地址有效地址(2)一般情况下,数据存在数据段中,首地址信息存一般情况下,数据存在数据段中,首地址信息存于于DS中,若不存在数据段时,指令要给我前缀中,若不存在数据段时,指令要给我前缀(3)指令形式指令形式 MOV AX,TAX ;给出标号给出标号/符号名符号名 (EA=TAX)MOV AX,1234H;直接给出相对号直接给出相对号 (E
6、A=1234H)注意注意:不能写成不能写成MOV AX,1234H 这样就成了立即数寻址这样就成了立即数寻址 前两者数据存在数据段中,引用到前两者数据存在数据段中,引用到DS MOV AX,TAX;“MOV AX,TAX”等价等价 MOV AX,ES:TAX ;数据存在附加段中数据存在附加段中例例3.1 假设有指令:假设有指令:MOV BX,1234H,在执行时,在执行时,(DS)=2000H,内存单元,内存单元21234H的值为的值为 5213H。问该指令执行后,。问该指令执行后,BX的值是什么?的值是什么?解:根据直接寻址方式的寻址规则,把该指令的具体解:根据直接寻址方式的寻址规则,把该指
7、令的具体执行过程如下图所示。执行过程如下图所示。3.4 寄存器间接寻址方式寄存器间接寻址方式(1)操作数存放在存储单元中操作数存放在存储单元中(2)有效地址存放在存储器中(通常为变址)有效地址存放在存储器中(通常为变址)(3)指令给出寄存器编号(变址)操作数在存储器中,指令给出寄存器编号(变址)操作数在存储器中,操作数的有效地址用操作数的有效地址用SI、DI、BX和和BP等四个寄存等四个寄存器之一来指定,称这种寻址方式为寄存器间接寻址器之一来指定,称这种寻址方式为寄存器间接寻址方式。方式。该寻址方式物理地址的计算方法如下:该寻址方式物理地址的计算方法如下:(4)例例 假设有指令:假设有指令:M
8、OV BX,DI,在执行时,在执行时,(DS)=1000H,(DI)=2345H,存储单元,存储单元12345H的内容的内容是是4354H。问执行指令后,。问执行指令后,BX的值是什么?的值是什么?解:根据寄存器间接寻址方式的规则,在执行本例解:根据寄存器间接寻址方式的规则,在执行本例指令时,寄存器指令时,寄存器DI的值不是操作数,而是操作数的值不是操作数,而是操作数的地址。该操作数的物理地址应由的地址。该操作数的物理地址应由DS和和DI的值的值形成,即:形成,即:PA=(DS)*16+(DI)=1000H*16+2345H=12345H。该指令的执行效果:该指令的执行效果:把从物理地址为把从
9、物理地址为12345H开始的一个字的开始的一个字的值传送给值传送给BX。3.5 寄存器相对寻址方式寄存器相对寻址方式(1)操作数存放在存储器中操作数存放在存储器中(2)有效地址时一个基址寄存器(有效地址时一个基址寄存器(BX,BP)或变址或变址寄存器(寄存器(SI,DI)的内容和指令中给出相对量之和的内容和指令中给出相对量之和(3)在没有前缀时,默认:在没有前缀时,默认:u若有效地址用若有效地址用SI、DI和和BX等之一来指定,则其缺等之一来指定,则其缺省的段寄存器为省的段寄存器为DS;u若有效地址用若有效地址用BP来指定,则其缺省的段寄存器为来指定,则其缺省的段寄存器为SS(即:堆栈段即:堆
10、栈段)。(4)例例 假设指令:假设指令:MOV BX,SI+100H,在执行它,在执行它时,时,(DS)=1000H,(SI)=2345H,内存单元,内存单元12445H的内容为的内容为2715H,问该指令执行后,问该指令执行后,BX的值是什么?的值是什么?解:根据寄存器相对寻址方式的规则,在本指令中的解:根据寄存器相对寻址方式的规则,在本指令中的源操作数的有效地址源操作数的有效地址EA为:为:EA=(SI)+100H=2345H+100H=2445H该操作数的物理地址应由该操作数的物理地址应由DS和和EA的值形成的值形成即:即:PA=(DS)*16+EA=1000H*16+2445H=124
11、45H。该指令的执行效果是:该指令的执行效果是:把从物理地址为把从物理地址为12445H开始的一个字开始的一个字的值传送给的值传送给BX。3.6 基址加变址寻址方式基址加变址寻址方式(1)操作数存放在存储单元中操作数存放在存储单元中(2)有效地址是一个基址寄存器有效地址是一个基址寄存器(BX、BP)和一个变址和一个变址寄存器寄存器(SI、DI)的内容之和。的内容之和。其有效地址的计算公式如下:其有效地址的计算公式如下:(3)指令地址段给出基址和变址寄存器指令地址段给出基址和变址寄存器(4)在不使用段超越前缀的情况下,有下列规定:在不使用段超越前缀的情况下,有下列规定:若有效地址用若有效地址用S
12、I、DI和和BX等之一来指定,则其缺等之一来指定,则其缺省的段寄存器为省的段寄存器为DS;若有效地址用若有效地址用BP来指定,则其缺省的段寄存器为来指定,则其缺省的段寄存器为SS(即:堆栈段即:堆栈段)。(5)例例 假设指令:假设指令:MOV BX,BX+SI,在执行时,在执行时,(DS)=1000H,(BX)=2100H,(SI)=0011H,内存单,内存单元元12111H的内容为的内容为1234H。问指令执行后,。问指令执行后,BX的的值是什么?值是什么?解:根据基址加变址寻址方式的规则,在本指令的解:根据基址加变址寻址方式的规则,在本指令的源操作数的有效地址源操作数的有效地址EA为:为:
13、EA=(BX)+(SI)=2100H+0011H=2111H该操作数的物理地址应由该操作数的物理地址应由DS和和EA的值形成,即:的值形成,即:PA=(DS)*16+EA=1000H*16+2111H=12111H 该指令的执行效果是:该指令的执行效果是:把从物理地址为把从物理地址为12111H开始的一个开始的一个字的值传送给字的值传送给BX。3.7 相对基址加变址寻址方式相对基址加变址寻址方式(1)操作数存在存储单元中操作数存在存储单元中(2)有效地址是一个基址寄存器有效地址是一个基址寄存器(BX、BP)的值、一个的值、一个变址寄存器变址寄存器(SI、DI)的值和指令中的的值和指令中的8位位
14、/16位偏移量位偏移量之和。之和。其有效地址的其有效地址的计算公式如右:计算公式如右:(3)在不使用段超越前缀的情况下,有下列规定:在不使用段超越前缀的情况下,有下列规定:u若有效地址用若有效地址用SI、DI和和BX等之一来指定,则其缺等之一来指定,则其缺省的段寄存器为省的段寄存器为DS;u若有效地址用若有效地址用BP来指定,则其缺省的段寄存器为来指定,则其缺省的段寄存器为SS(即:堆栈段即:堆栈段)。(4)例例 假设指令:假设指令:MOV AX,BX+SI+200H,在执,在执行时,行时,(DS)=1000H,(BX)=2100H,(SI)=0010H,内存单元内存单元12310H的内容为的
15、内容为1234H。问指令执行后,。问指令执行后,AX的值是什么?的值是什么?解:根据相对基址加变址寻址方式的规则,本指令解:根据相对基址加变址寻址方式的规则,本指令中源操作数的有效地址中源操作数的有效地址EA为:为:EA=(BX)+(SI)+200H=2100H+0010H+200H=2310H 该操作数的物理地址应由该操作数的物理地址应由DS和和EA的值形成,即:的值形成,即:PA=(DS)*16+EA=1000H*16+2310H=12310H 该指令的执行效果是:该指令的执行效果是:把从物理地址为把从物理地址为12310H开始的一个开始的一个字的值传送给字的值传送给AX。(5)其他表示其
16、他表示相对基址加变址寻址方式与其它寻相对基址加变址寻址方式与其它寻址方式之间的变形关系址方式之间的变形关系3.8 32位地址的寻址方式位地址的寻址方式(1)保留保留16位的寻址方式位的寻址方式(EAX、EBX、ECX、EDX、ESI、EDI、EBP和和ESP)(2)新增加:新增加:所有所有32位寄存器均可作为地址偏移量的一部分(位寄存器均可作为地址偏移量的一部分(16bit机只能用基址或变机只能用基址或变址寄存器)址寄存器)用用32位地址偏移量进行寻址的位地址偏移量进行寻址的有效地址计算公式:有效地址计算公式:(3)注意:谁是基址,谁是变址?注意:谁是基址,谁是变址?关键是谁写在前,谁在后关键
17、是谁写在前,谁在后 前前基址基址 后后变址变址(5)例例 下面列举几个下面列举几个32位地址寻址指令及其内存位地址寻址指令及其内存操作数的段寄存器。操作数的段寄存器。MOV AX,123456H ;默认段寄存器默认段寄存器DSMOV EAX,EBX+EBP ;默认段寄存器默认段寄存器DSMOV EBX,EBP+EBX ;默认段寄存器默认段寄存器SSMOV EBX,EAX+100H ;默认段寄存器默认段寄存器DSMOV EDX,ES:EAX*4+200H ;显式段寄存器显式段寄存器ESMOV ESP+EDX*2,AX ;默认段寄存器默认段寄存器SSMOV EBX,GS:EAX+EDX*2+300
18、H ;显式段寄存器显式段寄存器GSMOV AX,ESP ;默认段寄存器默认段寄存器SS寄存器间接寻址的例子寄存器间接寻址的例子:例例 已知表已知表TA中存由中存由60个数据(字),将该表数个数据(字),将该表数 据接到表据接到表TB中去,设中去,设TB表有足够空间表有足够空间开始TA SITB DIO BX(BX)60(SI)AX(AX)(DI)(SI)+2 (SI)(DI)+2 (DI)(BX)+1 BX结束解题解题TA表头表头 SI为取初值为取初值TB表头表头 DI为存初值为存初值以以BX为计数控制器为计数控制器因为是字操作,故因为是字操作,故SI、DI增量为增量为2因为(因为(BX)从从0开始开始所以其正常范围为所以其正常范围为0 59使用寄存器相对寻址的例子(同上题)使用寄存器相对寻址的例子(同上题)开始O SI O DI(SI)120(TA+(SI)AX(AX)TB+(DI)(SI)+2 SI(DI)+2 DI结束解题解题SI、DI初值为初值为0因为是字操作,地址增量是因为是字操作,地址增量是2因为是因为是60个元素,故(个元素,故(SI)正常值范围为正常值范围为0 118此法中:此法中:初偏址为初偏址为TA+(SI)存偏址为存偏址为TB+(DI)巧妙地利用(巧妙地利用(SI)来表示地址来表示地址增量,又作计数控制增量,又作计数控制