寻址方式

16 位的二进制可以表示 65536 个字节地址,从 0 - 65535 = 64k
机器规定了 小段是 16位 , 小段的起始地址必须从 0 开始 到 F


偏移 :存储单元的地址与所在段的起始地址的差称为 段内偏移

存储单元的物理地址 == 段值 * 16 + 偏移 >> [段值0 + 偏移]


1 立即寻址: 操作数包含在指令里,作为指令的一部分,跟在操作码的后面
MOV AX,1234H   --1234H 是个立即数


2 寄存器寻址:操作数在CUP内部的寄存器里
这里的寄存器只是 通用数据寄存器 AX,BX,CX,DX,SP,BP,SI.DI,AH,AL,BH,BL,CH,CL,DH,DL
MOV AX,AX|BX|CX|DX|SP|BP|SI|DI|AH|AL|BH|BL|CH|CL|DH


3 直接寻址:操作数的有效地址包含在指令里,跟在操作码的后面,作为源操作数
MOV AX,[1234H] --这里的1234H 用括号括起来表示它是一个有效的数据偏移地址,并非立即数
要传送数据的物理地址 = MOV AX,[DS+1234H] ,因为没有使用段前缀,所以默认是数据段 ,数据段的首地址 + 数据偏移 = 数据物理地址
使用段前缀 : MOV AX,ES:[1234H] ,这里的 1234H 是数据物理地址 在 附加段的偏移 >> 附加段的首地址 + 数据偏移[1234H] = 数据物理地址


4 寄存器间接寻址:操作数在存储器中,操作数的有效地址在 SI,DI,BX,BP 中
MOV AX,[SI|DI|BX|SP] 这里的中括号表示 寄存器内的数据为 有效数据的偏移    这里求物理地址 注意 采用的段值
如果有效地址在 SI,DI,BX 中,则以 DS 段寄存器为段值
如果有效地址在 BP 中,则以 SS 段寄存器为段值

 

5 寄存器相对寻址:操作数在存储器中,操作数的有效地址是一个基址寄存器[BX,BP]或变址寄存器[SI,DI] 内容 + 位移量
注意 ://单反相对寻址 肯定会有 位移量 ,有位移量肯定是 相对寻址
MOV AX,[SS+BP+1OH]   --注意 BP 与 堆栈段 SS 结合使用 10H 是一个位移量
MOV AX,[DS+BP|SI|DI+1OH] -- 如果不指定段寄存器,默认的是数据段 DS

 


6 基址 + 变址寻址:
MOV AX,[SS+BP+SI|DI] --注意 BP 必须与 SS 结合使用
MOV AX,[DS+BX+SI|DI]

 

7 基址 + 变址 相对寻址:
MOV AX,[SS+BP+SI|DI]
MOV AX,[DS+BX+SI|DI]

你可能感兴趣的:(寻址方式)