1.立即寻址
立即寻址方式所提供的操作数直接包含在指令中,它作为指令的一部分,紧跟在指令操作码后面,是8位或16位二进制补码。就是说,指令操作码和紧跟其后的操作数都在代码段中,16位立即数按“高高低低”(即数据的高位存放在存储器高地址存储单元,低位存放在低地址存储单元)的原则存放,如图3-1a所示。
例3-1 MOV AX,0lFFH
解:该指令的功能是将操作数01FFH送AX。其中目的操作数地址是AX。源操作数是01FFH,其存放地址是存放指令操作码的下一单元,如图3-1b所示。
图3-1 立即寻址示意图
立即寻址方式主要用来给寄存器或存储器赋初值,也可以与寄存器操作数或存储器操作数进行算术逻辑运算。
2.寄存器寻址
在寄存器寻址方式中,操作数在CPU内部的寄存器指令中指定寄存器号。操作数可为8位或16位。由于寄存器是微处理器的一部分,因此采用寄存器寻址方式可以提高工作效率。特别是累加器AX(或AL),若用它存放运算结果,则指令的执行时间要短些。对于那些需要经常存取的操作数,采用寄存器寻址方式较为合适。
例3-2 MOV DX,AX或MOV AL,BH
该例中源操作数和目的操作数均在寄存器中,都为寄存器寻址方式。
3.直接寻址
在直接寻址方式中,操作数的16位偏移地址EA直接包含在指令中,紧跟在指令操作码后面。操作数的物理地址由其所在段的段寄存器内容左移4位与指令中给出的偏移地址EA相加形成,如图3-2a所示。操作数通常存放在数据段中,也可以存放在其他三个段中。
例3-3 MOV AX,[1000H]
该例中括号的内容为偏移地址,即EA=1000H,省略段超越前缀,则默认值为DS。设数据段寄存器DS为3000H,操作数的物理地址PA=(DS)左移4位+EA=30000H+1000H=31000H。该指令的功能是把物理地址为31000H的单元的内容送AX,其操作过程如图3-2b所示。
图3-2 直接寻址示意图
例3-4 MOV AX,BUFA
该例中BUFA为变量名,即用符号表示的数据单元的偏移地址,因此该指令的源操作数采用的是直接寻址方式。该指令的功能是将符号地址BUFA所表示的单元内容送AX。
在直接寻址方式中,若省略段超越前缀,则默认值为DS。同时8086/8088 CPU允许段超越,只要在指令中指明段超越前缀,则16位的偏移地址可以与相应的DS、ES、SS或CS的内容左移4位相加形成物理地址。例3-3中,若将指令改为MOV AX,ES:[1000H],则操作数在附加段中。
表3-1给出存储器存取时的约定段和段更换。
表3-1 存储器存取时的约定段和段更换
4.寄存器间接寻址
在寄存器间接寻址方式中,操作数存放在存储器中,而操作数的偏移地址EA存放在寄存器中,指令中给出寄存器号。能够用来间接寻址的寄存器只能是SI、DI、BX、BP的其中之一,该寻址方式给出的操作数、偏移地址EA表示如下:
使用约定段时,以上四个寄存器可分为两种情况:
①若用SI、DI、BX间接寻址,则操作数在当前数据段中,即用数据段寄存器DS的内容左移4位,加上SI、DI或BX中的偏移地址EA形成操作数的物理地址PA。
②若用寄存器BP间接寻址,则操作数在堆栈段中,即用堆栈段寄存器SS的内容左移4位,加上BP中的偏移地址EA形成操作数的物理地址PA。
例3-5 MOV AX,[SI]
解:该指令的功能是将数据段寄存器DS的内容左移4位与SI寄存器所提供的偏移地址相加后得到20位的物理地址,将该地址开始的连续两个单元中的内容送到AX中,如图3-3所示。
例3-6 MOV AX,[BP](www.xing528.com)
解:该指令的功能是将堆栈段寄存器SS的内容左移4位与BP寄存器所提供的偏移地址相加后得到20位的物理地址,将该地址开始的连续两个单元中的内容送到AX中,如图3-4所示。
图3-3 寄存器SI间接寻址示意图
图3-4 寄存器BP间接寻址示意图
若在指令中指明段超越前缀,则这些寄存器应与其他对应的段寄存器的内容左移4位相加,形成操作数的地址。
5.寄存器相对寻址
在寄存器相对寻址方式中,操作数在存储器中,而操作数偏移地址EA是指令中指定的寄存器的内容与指令中给出的位移量相加之和。即
允许使用的寄存器和使用段寄存器的规定与寄存器间接寻址相同。位移量是用8位或16位二进制补码表示的有符号数。
例3-7 MOV AX,COUNT[SI]
该指令的功能是数据段寄存器DS的内容左移4位加上SI的内容(即16位的变址),再加上指令中给定的位移量COUNT,所得的结果作为操作数地址,将该地址开始的连续两个单元中的内容送AX,如图3-5所示。该指令还可以写成以下格式:
图3-5 寄存器相对寻址示意图
6.基址加变址寻址
在基址加变址寻址方式中,操作数在存储器中,而操作数偏移地址EA是指令中指定的基址寄存器、变址寄存器的内容相加之和。即
其中,BX、BP为基址寄存器,SI、DI为变址寄存器,使用时只能出现一个基址寄存器和一个变址寄存器。基址寄存器选用BP还是BX,决定了是从堆栈段还是从数据段中获取操作数(约定的情况下)。若选用BP,则操作数在堆栈段中,操作数的物理地址由堆栈段寄存器SS的内容左移4位与BP的内容、变址寄存器SI或DI相加形成。若选用BX,则操作数在数据段中,操作数的物理地址由数据段寄存器DS的内容左移4位与BX的内容、变址寄存器SI或DI相加形成。
例3-8 MOV AX,[BX][SI]
该指令的功能是以数据段为基准,加上基址寄存器BX和变址寄存器SI的内容作为操作数的地址,如图3-6所示。
图3-6 基址加变址寻址示意图
7.相对基址加变址寻址
在相对基址加变址寻址方式中,操作数在存储器中,而操作数偏移地址EA是指令中指定的基址寄存器、变址寄存器的内容及指令中给出的位移量相加之和。即
其中,COUNT为位移量,其值是用8位或16位二进制补码表示的有符号数。SI、DI为变址寄存器,BX、BP为基址寄存器,使用时只能出现一个基址寄存器和一个变址寄存器。基址寄存器选用BP还是BX,决定了是从堆栈段还是从数据段中获取操作数(约定的情况下)。若选用BP,则操作数在堆栈段中,操作数的物理地址由堆栈段寄存器SS的内容左移4位与BP的内容、变址寄存器SI或DI、位移量COUNT相加形成。若选用BX,则操作数在数据段中,操作数的物理地址由数据段寄存器DS的内容左移4位与BX的内容、变址寄存器SI或DI、位移量COUNT相加形成。
例3-9 MOV AX,10H[BX][SI]
该指令的功能是以数据段为基准,加上基址寄存器BX和变址寄存器SI的内容,再加上指令中指定的位移量10H作为操作数的地址,如图3-7所示。
图3-7 相对基址加变址寻址示意图
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。