数据寻址方式
归纳的记忆方法在最底下
立即数寻址
- 操作数直接存放在指令中,紧跟在操作码之后。
- 立即数可以是8位或16位
- 不加H是十进制,加H才是十六进制
MOV AX,5
寄存器寻址
- 16位数可以是AX BX CX DX SI DI SP BP
- 8位数可以是AL AH BL BH CL CH DL DH
- 操作数在寄存器中,运算速度较高
MOV AX,BX
新增的预备知识
- 有效地址EA:操作数的偏移地址
EA=基址+(变址×比例因子)+位移量 - 不允许段跨越前缀情况:
串处理指令的目的串必须用ES段
PUSH指令的目的和POP指令的源必须用SS段
指令必须放在CS段中 - 默认段选择规则
指令——代码段——CS寄存器
堆栈——堆栈段——SS寄存器
局部数据——数据段——DS寄存器
目的串——附加数据段——ES寄存器
直接寻址
- 有效地址 = 位移量
MOV AX,[2000H]
EA=2000H - 用符号地址代替数值地址
MOV AX,[VALUE]
EA=VALUE
寄存器间接寻址
- 有效地址 = 寄存器的内容
-
,其中BP的默认段是SS,不是DS
MOV AX,[BX]
EA=BX
寄存器相对寻址/直接变址寻址
- 有效地址 = 基址寄存器/变址寄存器 + 指令中的位移量
MOV AX,COUNT[SI]或
MOV AX,[COUNT+SI]
EA=CONUT+SI
基址变址寻址
- 有效地址 = 基址寄存器内容 + 变址寄存器内容
MOV AX,[BX][DI]或
MOV AX,[BX+DI]
EA=BX+DI
相对基址变址寻址方式
- 有效地址 = 基址寄存器内容 + 变址寄存器内容 + 指令中指定的位移量
MOV AX,MASK[BX][SI]或
MOV AX,MASK[BX+SI]或
MOV AX,[MASK+BX+SI]
EA=MASK+BX+SI
好了,说了一大堆,怎么记呢?
- 最前面两个立即数寻址和寄存器寻址不涉及偏移地址,特殊拎出来记一下就好了
- 后面的一大堆******寻址方式,找关键词就好了。
判断这四个有效地址中成分:寄存器,基址,变址,相对(指令中的位移量),有哪些就叫什么寻址。 - 当然还有一个例外,直接寻址,有效地址直接就是位移量