当前位置: 首页 > news >正文

上位机知识篇---寻址方式


文章目录

  • 前言
  • 1. 立即寻址(Immediate Addressing)
    • 特点
    • 示例
  • 2. 寄存器寻址(Register Addressing)
    • 特点
    • 示例
  • 3. 直接寻址(Direct Addressing / Absolute Addressing)
    • 特点
    • 示例
  • 4. 寄存器间接寻址(Register Indirect Addressing)
    • 特点
    • 示例
  • 5. 基址寻址(Base Addressing)
    • 特点
    • 示例
  • 6. 变址寻址(Indexed Addressing)
    • 特点
    • 示例
  • 7. 相对寻址(Relative Addressing / PC-Relative)
    • 特点
    • 示例
  • 8. 堆栈寻址(Stack Addressing)
    • 特点
    • 示例
  • 9. 隐含寻址(Implied Addressing)
    • 特点
    • 示例
  • 10. 间接寻址(Indirect Addressing)
    • 特点
    • 示例
  • 不同架构的寻址方式差异
    • x86
    • ARM
    • RISC-V
  • 总结


前言

本文简单介绍了各种寻址方式。在计算机体系结构和指令集设计中,寻址方法(Addressing Mode)是指 CPU 指令如何访问操作数(数据)的方式。不同的寻址方法会影响指令的灵活性、执行效率和编程便利性。以下是常见的寻址方式及其特点:


1. 立即寻址(Immediate Addressing)

操作数直接包含在指令中,无需访问内存。

特点

特点:速度快,但数据大小受限(如 8/16/32 位立即数)。

示例

MOV R1, #42    ; R1 = 42(立即数42直接存入寄存器R1)

2. 寄存器寻址(Register Addressing)

操作数存放在CPU寄存器中,指令直接访问寄存器

特点

特点:速度最快(无需访存),但寄存器数量有限。

示例

ADD R2, R1, R3 ; R2 = R1 + R3(R1和R3是寄存器)

3. 直接寻址(Direct Addressing / Absolute Addressing)

指令中直接给出操作数的内存地址

特点

特点:访问固定内存位置,但地址编码可能较长。

示例

MOV R1, [0x1000] ; R1 = 内存地址0x1000处的值

4. 寄存器间接寻址(Register Indirect Addressing)

操作数的地址存放在寄存器中,指令通过寄存器间接访问内存。

特点

特点:灵活(可动态计算地址),但需额外访存。

示例

MOV R1, [R2] ; R1 = 内存地址(R2的值)处的数据

5. 基址寻址(Base Addressing)

操作数地址 = 基址寄存器 + 偏移量(常量或寄存器)

特点

特点:适用于数组、结构体访问(如 array[i])。

示例

MOV R1, [R2 + 4] ; R1 = 内存地址(R2 + 4)处的数据

6. 变址寻址(Indexed Addressing)

操作数地址 = 基址 + 变址寄存器 × 比例因子

特点

特点:适合遍历数组(如 array[i] 其中 i 可变)。

示例

MOV R1, [R2 + R3*2] ; R1 = 内存地址(R2 + R3×2)处的数据

7. 相对寻址(Relative Addressing / PC-Relative)

操作数地址 = 当前PC(程序计数器) + 偏移量。

特点

特点:用于跳转指令(如 JMP、CALL),实现位置无关代码(PIC)。

示例

JMP +0x20 ; 跳转到当前指令地址 + 0x20

8. 堆栈寻址(Stack Addressing)

操作数通过堆栈指针(SP)隐式访问(如 PUSH/POP)。

特点

特点:用于函数调用、局部变量存储。

示例

PUSH R1   ; 将R1压入堆栈(SP -= 4,[SP] = R1)
POP R2    ; 从堆栈弹出到R2(R2 = [SP],SP += 4)

9. 隐含寻址(Implied Addressing)

操作数由指令本身隐含指定(无显式地址字段)。

特点

特点:指令简短,但灵活性低。

示例

CLC       ; 清除进位标志(隐含操作CF=0)

10. 间接寻址(Indirect Addressing)

操作数的地址存储在另一个内存位置(多级指针)。

特点

特点:支持动态内存访问(如指针解引用),但效率较低。

示例

MOV R1, [[0x1000]] ; R1 = 内存地址(内存地址0x1000处的值)处的数据

不同架构的寻址方式差异

x86

x86:支持复杂寻址(如 [eax + ebx*4 + 0x10])。

ARM

ARM:主要使用基址+偏移或寄存器间接寻址

RISC-V

RISC-V:简化寻址模式(仅支持基址+立即数偏移)。

总结

寻址方式 特点 典型应用场景
立即寻址 操作数在指令中 常量赋值(MOV R1, 5)
寄存器寻址 操作数在寄存器 算术运算(ADD R1, R2)
直接寻址 操作数在固定内存地址 全局变量访问
寄存器间接寻址 操作数地址在寄存器 指针解引用(MOV R1, [R2])
基址/变址寻址 基址 + 偏移量 数组/结构体访问
相对寻址 PC + 偏移量 跳转指令(JMP +0x10)
堆栈寻址 通过SP隐式访问 函数调用(PUSH/POP)
理解寻址方式对编写高效汇编代码和优化程序性能至关重要。



http://www.mrgr.cn/news/100367.html

相关文章:

  • 2025蓝桥省赛c++B组第二场题解
  • Spring Bean生命周期原理、常见的后处理器实现
  • C#中常见的设计模式
  • 【Linux应用】交叉编译环境配置,以及最简单粗暴的环境移植(直接从目标板上复制)
  • Unity接入火山引擎/豆包大模型文生图,实现AI绘画
  • WSL 安装过程整理
  • K8S Service 原理、案例
  • OpenCV --- 图像预处理(七)
  • Adruino:传感器及步进电机
  • 移动通信行业术语
  • 软件项目实施全流程及交付物清单
  • Android HAL HIDL
  • Happens-Before原则
  • python怎么查看函数原型及变量是什么类型
  • 高中数学联赛模拟试题精选第16套几何题
  • 学习笔记:Qlib 量化投资平台框架 — GETTING STARTED
  • Jquery -函数调用使用创建立即执行函数
  • magic-api连接达梦数据库
  • 27-算法打卡-字符串-找出字符串中第一个匹配项的下标-leetcode(28)-第二十七天
  • 当高级辅助驾驶遇上“安全驾校”:NVIDIA如何用技术给无人驾驶赋能?