3.1.1 寻址方式
-
立即寻址 数据直接存入指定的寄存器
- 指令格式: MOV DST, SRC 例:MOV AX, 5
- SRC可以为8位或16位,但是SRC、DST字长需一致
-
寄存器寻址 操作数在寄存器中
- 指令格式:MOV DST, SRC 例:MOV AX, BX
- CS不能作为DST
-
直接寻址 操作数存在寄存器中,指令中给出有效地址
- 指令格式:MOV DST, [] 例:MOV AX, [1234H]
- 段寄存器:[偏移地址] = 段寄存器的值X16 + 偏移地址
-
寄存器间接寻址 有效地址在 SI/ DI/ BX/ BP之一
- 指令格式:MOV DST, [] 例:MOV AX, [BX]
- SRC 和 DST 的字长一致
- 若有效地址在BP中,则以SS段寄存器中的内容为段值
-
寄存器相对寻址 相对上一方式增加偏移量
- 指令格式:MOV AX, COUNT[BX]
-
基址变址寻址 有效地址由 BX/ BP和 SI/ DI之一相加提供
- 指令格式:MOV AX, [BX] [DI]
- PA = (DS)×16+(BX)+ (DI) / (SS)×16+(BP)+ (DI)
-
相对基址变址寻址 相对上一方式增加偏移量
记忆方法:
寄存器间接寻址 = [ 一个寄存器]
寄存器相对寻址 = [一个寄存器+立即数]
基址变址寻址 = [两个寄存器]
相对基址变址寻址 = [两个寄存器+立即数]
3.1.2 指令系统
数据传送指令
通用数据传送指令
-
传送指令:MOV DST, SRC (SRC) 传给 (DST)
-
双操作数指令, 长度需一致
-
DST、SRC 不能同时为段寄存器
-
DST不能是立即数 / CS
-
DST、SRC 不能同时为存储器寻址
-
-
堆栈指令:PUSH SRC / POP DST
- 通用寄存器/段寄存器/存储单元中的一个字入栈或出栈
- DST不能是CS
-
交换指令::XCHG OPR1, OPR2
- 不允许使用段寄存器,操作数不能为立即数
地址传送指令
- LEA REG, SRC
- 有效地址给寄存器
- LDS REG, SRC
- 指针给寄存器 / DS
- LES REG, SRC
- 指针给寄存器 / ES
类型转换指令
- CBW
- AL给AX,若(AL)的最高有效位为0,则(AH)= 00H; 若(AL)的最高有效位为1,则(AH)= FFH
- CWD
- AX给 DX 和 AX,(AX)的最高有效位为0,则(DX)= 0000H; (AX)的最高有效位为1,则(DX)= FFFFH
算术指令
加法指令
- ADD DST, SRC
- ADC DST, SRC
- INC OPR
参考资料: https://www.cnblogs.com/alwaysking/p/6476443.html