编辑: AA003 | 2019-05-21 |
将16进制数80H送入AL MOV AX,1090H ;
将1090H送AX,AH中为10,AL中为90H 获得操作数所在 的地址的方法 代码段10H 90H MOV 操作码 低8位高8位代码段立即数AH AL 寻找操作数所在地址的方法 寻找转移地址的方法 ? www.xju.edu.cn 3.2.2 直接寻址(direct addressing) 使用直接寻址方式时,数据总是在存储器中,存储单元的偏移 地址由指令直接指出,该地址与指令的操作码一起存放在内存的代 码段.也是低8位在前,高八位在后.所以直接寻址是对存储器进 行访问时可采用的最简单的方式.例如: MOV AX,[3102H] ;
将DS段的3102H、3103H两单元 内容送AX中若(DS)=2000H,则所寻找的操作数的物理地址为: 20000H+3102H=23102H 数据段02H 31H 默认为段寄 存器是数据 寄存器DS 23102H 偏移地址
31 02 AH AL 直接寻址方式 下,操作数的段 地址默认为数据 段(DS),但允 许段重设,即由 指令定义段. ?例:MOV AX,ES:[1200H] ? www.xju.edu.cn 采用寄存器寻址方式的指令在执行时,操作就在CPU内 部进行,不需要使用总线周期,因此,执行速度快.在一条 指令中,可以对源操作数采用寄存器寻址方式,也可以对目 的操作数采用寄存器寻址方式,还可能两者都用寄存器寻址 方式. 参加操作的操作数在CPU的内部寄存器中. 3.2.3 寄存器寻址(register addressing) AX BX ? www.xju.edu.cn 3.2.4 寄存器间接寻址 (register indirect addressing) 寄存器间接寻址时,指令中指定的寄存器的内容不是操作数, 而是操作数的偏移地址.参与操作的操作数存放在内存中,其偏移 地址为指令中的寄存器的内容. [例3-5] MOV AX, [SI]
6000 DS S
1200 1
6 0
0 0
0 6
1 2
0 0
61200 H AX 44H 33H 存储器 数据段1200?www.xju.edu.cn 寻址时默认的段寄存器通常为DS.如寄存 器为BP时,则对应的段寄存器为SS. 寄存器间接寻址可分为以下4种: 采用寄存器间接寻址时,操作数一定在存储器中,存储单元的 有效地址由寄存器指出: ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? DI SI BP BX EA 寄存器 间接寻址 基址寻址(间址寄存器为基址寄存器BX,BP) 变址寻址(间址寄存器为变址寄存器SI,DI) ? 操作数的段地址(数据处于哪个段)取决于选择哪一个间址 寄存器: BX,SI,DI 默认在数据段 BP 默认在堆栈段 3.2.4 寄存器间接寻址 (register indirect addressing) ? www.xju.edu.cn ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 位位移量 位位移量
16 8 DI SI BP BX EA 采用寄存器间接寻址时,允许在指令中指定一个位移量, 这样,有效地址通过一个寄存器的内容加上一个位移量来得 到.位移量可以为8位,也可以为16位.即3.2.5 寄存器相对寻址 [例3-7] MOV AX,DATA[BX] 假设(DS)=6000H, (BX)=1000H, DATA=08H 则物理地址=61008H AL AX AH
61008 操作码 代码段 数据段
08 偏移量最低字节
00 偏移量最高字节
6 0
0 0 DS
1 0
0 0 BX
0 0
0 8 DATA
6 1
0 0
8 ? www.xju.edu.cn 3.2.6 基址-变址寻址 将BX、BP、SI、DI等寄存器组合起来进行间接寻址-------- 基址加变址的寻址.
8 0
0 0 DS
2 0
0 0 BX
1 0
0 0 SI AX AH AL
8 3
0 0
0 83000 操作码 代码段 数据段 ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? DI SI BP BX EA ? www.xju.edu.cn 3.2.7 基址-变址-相对寻址 指令中指定了一个基址寄存器和一个变址寄存器,同时还给出 一个8位或16位的位移量,将3者相加就得到操作数的偏移地址. [例3-10] MOV AX, DATA[DI][BX] 设(DS)=8000H,(BX)=2000H,(DI)=1000H, DATA =0200H,则指令访问的存储单元的物理地址=83200H. ? www.xju.edu.cn 3.2.8 隐含寻址 ? 指令隐含了的一个或两个操作数的地址,即操作数在默认的 地址中 ? 例: MUL BL 指令的执行:AL*BL AX ? www.xju.edu.cn 3.3 8086指令系统 ? 传送指令;