寻址方式

一、802868中寻址方式

1、 立即寻址方式(immediate addressing

立即数:操作数直接放在指令中,紧跟在操作码之后,它作为指令的一部分存放在代码段里。

指令中的源操作数是立即数,即源操作数是参加操作的数据本身。

eg1:MOV   AL, 5

指令执行后,(AL)=05H

eg2:MOV   AX, 1234H

执行指令后,(AX) = 1234H

备注:立即寻址方式用来表示常数,它经常用于给寄存器赋初值,并且只能用于源操作数字段,不能用于目的操作数字段,且源操作数长度应与目的操作数长度一致。

2、 寄存器寻址方式(register addressing

参加操作的操作数在CPU的通用寄存器中(寄存器可存放源、目的操作数)。

eg: MOV AX, BX

如(BX) = 1234H,执行指令后(AX) = 1234H

3、 直接寻址方式(direct addressing

指令中直接给出操作数的偏移地址。

eg:   MOV AX, [0012]

备注:基地址默认在DS处,否则应该指定段跨越前缀,在该方式下可用符号地址代替数值偏移地址。MOV   AX, [ VALUE ]

80x86为了使指令字不要过长,规定双操作数中,只能有一个使用存储器寻址方式,这就是一个变量常常要送到寄存器的原因。

4、 寄存器间接寻址方式(register indirect addressing

参与操作的操作数存放在内存中,其偏移地址为指令中的寄存器的内容。由寄存器间接给出操作数的偏移地址。

间址寄存器:存放偏移地址的寄存器。包括a、基址寄存器(BX,BP)。b、                 变址寄存器(SI,DI)

操作数的段地址(数据处于哪个段)取决于选择哪一个间址寄存器:

BX,SI,DI -> 默认在数据段

BP          -> 默认在堆栈段

寄存器间接寻址包括:基址寻址(间址寄存器为基址寄存器BX,BP)和变址寻址(间址寄存器为变址寄存器SI,DI)。

5、 寄存器相对寻址方式(register relative addressing)(或称直接变址寻址方式)

操作数的偏移地址为寄存器的内容加上一个位移量(基址寻址,变址寻址)。

eg:MOV  AX,[BX+DATA]

设DS=2000H,BX=0220H,DATA=05H

则:AX=[20225H]

6、 基址变址寻址方式(based indexed addressing

操作数的偏移地址为一个基址寄存器的内容加上一个变址寄存器的内容,操作数的段地址由选择的基址寄存器决定。

eg:MOV AX,[SI+BX]

备注:这种寻址方式同样适用于数组或表格处理,首地址可存放在基址寄存器中,而用变址寄存器来访问数组中的各个元素。

7、 相对基址变址寻址方式(relative based indexed addressing

操作数的偏移地址为一个基址寄存器的内容加上一个变址寄存器的内容,再加上一个位移量。操作数的段地址由选择的基址寄存器决定。

eg: MOV  AX,[BP+SI+DATA]

8、 隐含寻址

指令隐含了的一个或两个操作数的地址,即操作数在默认的地址中

例: MUL  BL

    指令的执行:AL*BL->AX

二、803868486寻址方式

相对于前面所讲的寻址方式而言80386和80486寻址方式有效地址的计算增加了比例因子,即

EA = 基址寄存器+(变址寄存器 * 比例)+ 位移量

备注:这种寻址方式优点在于对于元素大小为2、4、8字节的数组,可以在变址寄存器中给出数组元素下表,而由寻址方式控制直接用比例因子把下标转换为变址值。

 

参考资料:《IBM-PC汇编语言程序设计(第二版)》

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值