80x86寻址方式

本文详细介绍了80x86处理器的指令寻址和数据寻址方式,包括顺序寻址、跳跃寻址、立即寻址、寄存器寻址、直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址以及相对基址变址等。这些寻址方式影响了指令执行效率和数据访问速度。
摘要由CSDN通过智能技术生成

指令寻址

首先要知道程序指令是存放在内存中的

  • 顺序寻址
    取完一条指令后,顺序去取下一条指令,由程序计数器PC+1形成下一条指令的地址
    1是指一条指令字的长度,不同机器不同
  • 跳跃寻址
    下一条指令的地址由转移指令的地址码字段给出
    例如jmp指令,call指令。。。

数据寻址

  • 立即寻址
    操作数的值保存在指令本身中,而不是使用内存中的操作数
    MOV AX,1234H

  • 寄存器寻址
    操作数在寄存器中,指令指定寄存器号。
    对于16位操作数,寄存器可以是AX,BX,CX,DX,SI,DI,SP和BP;
    对于8位操作数,寄存器可以是AL,AH, BL, BH, CL, CH, DL,DH;
    对千386及其后继机型还可以有32位操作数,寄存器可以是EAX,EBX,ECX, EDX, ESI, EDI, ESP和EBP。
    这种寻址方式由于操作数就在寄存器中,不需要访问存储器来取得操作数,因而可以得到较高的运算速度。
    (BX)=1234H
    MOV AX,BX

以下各种寻址方式的操作数都在除代码段以外的存储区中

EA = 基址 + (变址 * 比例因子)+ 位移量

在这里插入图片描述

  • 直接寻址
    指令直接给出操作数的有效地址
    MOV AX,[1234H] 默认在DS段
    MOV AX,DS:[1234H]
    MOV ES:[1234H],AX 可加段跨越前缀
    MOV AX,VALUE <=> MOV AX,[VALUE] 可用符号地址代替数值地址
  • 寄存器间接寻址
    操作数在存储器中,操作数的有效地址用基址寄存器或变址寄存器来指定
    16位寻址时
    可用的寄存器有BX,BP,SI,DI
    32位寻址时
    可用EAX,EBX. ECX, EDX, ESP, EBP, ESI和EDI等8个通用寄存器。
    规定:凡使用BP,ESP和EBP 时 ,其默认段为SS 段。 其他寄存器的默认段为DS 寄存器
    MOV AX, [BX]
    (DS)=2000H, (BX)=1000H
    物理地址=20000H+1000H= 21000H

    在这里插入图片描述
  • 寄存器相对寻址(直接变址寻址)
    操作数的有效地址为基址寄存器或变址寄存器的内容和指令中指定的位移量之和
    MOV AX, COUNT[SI] <=> MOVAX, [COUNT+SI]
    其中COUNT为16位位移量的符号地址
    (DS)=3000H (SI)=2000H COUNT=3000H
    PA = 30000H + 2000H + 3000H = 35000H
  • 基址变址寻址
    操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和
    MOV AX,[BX][DI] <=> MOV AX, [BX+DI]
    (DS)=2100H, (BX)=0158H, (DI)=10A5H
    =>EA=0158 + 10A5=11FDH
    物理地址=21000+11FD=221FDH
    执行结果(AX)=1234H

  • 相对基址变址寻址方式
    操作数的有效地址是一个基址寄存器与一个变址寄存器的内容和指令中指定的位移
    量之和
    MOV AX, MASK[BX][SI] <=> MOV AX, MASK[BX+SI] <=> MOV AX, [MASK+BX+SI]
    (DS)= 3000H, (BX)= 2000H, (SI) = 1000H, MASK= 0250H
    => PA=16d*(DS)+(BX)+ (SI)+MASK
    PA = 30000+2000+l000+0250 = 33250H
    执行结果(AX)= 1234H

比例变址暂无需求,故不介绍,以下为汇总图
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值