2.4 寄存器间接寻址方式
寄存器间接寻址是将指定的寄存器内容为地址,由该地址所指定的单元内容作为操作数。
例如,设将内部RAM的65H单元内容(47H)送A,可执行指令:MOV A,@R0,其中R0内容为65H。
指令的执行过程为:当程序执行到本指令时,就以指令中所指定的工作寄存器R0的内容(65H)为指针,将内部数据存储器65H单元的内容(47H)送累加器A。
2.5 寄存器相对寻址方式
该寻址方式是以指定的寄存器内容,加上指令中给出的位移量(8位或16位),并以一个段寄存器为基准,作为操作数的地址。指定的寄存器一般是一个基址寄存器或变址寄存器。
假设指令:MOV BX, [SI 100H],在执行它时,(DS)=1000H,(SI)=2345H,内存单元12445H的内容为2715H。
根据寄存器相对寻址方式的规则,在执行本例指令时,源操作数的有效地址EA为:
EA=(SI) 100H=2345H 100H=2445H
该操作数的物理地址应由DS和EA的值形成,即:
PA=(DS)*16 EA=1000H*16 2445H=12445H。
所以,该指令的执行效果是:把从物理地址为12445H开始的一个字的值传送给BX。
2.6 基址加变址寻址方式
基址加变址寻址方式是指将寄存器(该寄存器一般指基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。
假设指令:MOV BX, [BX SI],在执行时,(DS)=1000H,(BX)=2100H,(SI)=0011H,内存单元12111H的内容为1234H。
根据基址加变址寻址方式的规则,在执行本例指令时,源操作数的有效地址EA为:
EA=(BX) (SI)=2100H 0011H=2111H
该操作数的物理地址应由DS和EA的值形成,即:
PA=(DS)*16 EA=1000H*16 2111H=12111H
所以,该指令的执行效果是:把从物理地址为12111H开始的一个字的值传送给BX。
2.7 相对基址加变址寻址方式
在相对基址变址寻址方式中,通常把BX和BP看作是基址寄存器,把SI和DI看作变址寄存器。它是把一个基址寄存器BX或BP的内容,加上变址寄存器SI或DI的内容,再加上指令中给定的8位或16位位移量,并以一个 段寄存器 作为地址基准,作为 操作数 的地址。
假设指令:MOV AX, [BX SI 200H],在执行时,(DS)=1000H,(BX)=2100H,(SI)=0010H,内存单元12310H的内容为1234H。
根据相对基址加变址寻址方式的规则,在执行本例指令时,源操作数的有效地址EA为:
EA=(BX) (SI) 200H=2100H 0010H 200H=2310H
该操作数的物理地址应由DS和EA的值形成,即:
PA=(DS)*16 EA=1000H*16 2310H=12310H
所以,该指令的执行效果是:把从物理地址为12310H开始的一个字的值传送给AX。
3 指令种类3.1 数据传送指令
这是一种常用的指令,用以实现寄存器与寄存器,寄存器与存储单元以及存储器单元与存储器单元之间的数据传送,对于存储器来说,数据传送包括对数据的读(相当于取数指令)和写(相当于存数指令)操作。
通用数据传送指令 MOV
条件传送指令 CMOVcc
交换指令 XCHG/XLAT/BSWAP
地址或段描述符选择子传送指令 LEA/LDS/LES/LFS/LGS/LSS等
3.2 算术运算指令
计算机指令系统一般都设有二进制数加、减、比较和求补等最基本的指令,此外还设置了乘、除法运算指令、浮点运算指令以有十进制动算指令等。
加法指令 ADD/ADC
减法指令 SUB/SBB
加一指令 INC
减一指令 DEC
比较操作指令 CMP
乘法指令 MUL/IMUL
除法指令 DIV/IDIV
符号扩展指令 CBW/CWDE/CDQE
十进制调整指令 DAA/DAS/AAA/AAS
3.3 逻辑运算指令
一般计算机都具有与、或、非(求反)、异或(按位加)和测试等逻辑运算指令。
逻辑运算指令 NOT/AND/OR/XOR/TEST等。
3.4 移位操作指令
移位操作指令分为算术移位、逻辑移位和循环移位三种,可以实现对操作数左移或右移一位或若干位。