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

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


文章目录

  • 前言


前言

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


  1. 立即寻址(Immediate Addressing)
    操作数直接包含在指令中,无需访问内存。

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

示例:

assembly
MOV R1, #42 ; R1 = 42(立即数42直接存入寄存器R1)
2. 寄存器寻址(Register Addressing)
操作数存放在CPU寄存器中,指令直接访问寄存器。

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

示例:

assembly
ADD R2, R1, R3 ; R2 = R1 + R3(R1和R3是寄存器)
3. 直接寻址(Direct Addressing / Absolute Addressing)
指令中直接给出操作数的内存地址。

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

示例:

assembly
MOV R1, [0x1000] ; R1 = 内存地址0x1000处的值
4. 寄存器间接寻址(Register Indirect Addressing)
操作数的地址存放在寄存器中,指令通过寄存器间接访问内存。

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

示例:

assembly
MOV R1, [R2] ; R1 = 内存地址(R2的值)处的数据
5. 基址寻址(Base Addressing)
操作数地址 = 基址寄存器 + 偏移量(常量或寄存器)。

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

示例:

assembly
MOV R1, [R2 + 4] ; R1 = 内存地址(R2 + 4)处的数据
6. 变址寻址(Indexed Addressing)
操作数地址 = 基址 + 变址寄存器 × 比例因子。

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

示例:

assembly
MOV R1, [R2 + R3*2] ; R1 = 内存地址(R2 + R3×2)处的数据
7. 相对寻址(Relative Addressing / PC-Relative)
操作数地址 = 当前PC(程序计数器) + 偏移量。

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

示例:

assembly
JMP +0x20 ; 跳转到当前指令地址 + 0x20
8. 堆栈寻址(Stack Addressing)
操作数通过堆栈指针(SP)隐式访问(如 PUSH/POP)。

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

示例:

assembly
PUSH R1 ; 将R1压入堆栈(SP -= 4,[SP] = R1)
POP R2 ; 从堆栈弹出到R2(R2 = [SP],SP += 4)
9. 隐含寻址(Implied Addressing)
操作数由指令本身隐含指定(无显式地址字段)。

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

示例:

assembly
CLC ; 清除进位标志(隐含操作CF=0)
10. 间接寻址(Indirect Addressing)
操作数的地址存储在另一个内存位置(多级指针)。

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

示例:

assembly
MOV R1, [[0x1000]] ; R1 = 内存地址(内存地址0x1000处的值)处的数据
不同架构的寻址方式差异
x86:支持复杂寻址(如 [eax + ebx*4 + 0x10])。

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

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

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


相关文章:

  • 电商秒杀系统技术栈与难点解析 - Java架构师面试实战
  • Unity网络编程入门:掌握Netcode for GameObjects实现多人游戏基础(Day 39)
  • Word/WPS 删除最后一页空白页,且保持前面布局样式不变
  • Cribl 上传lookup 表,传入数据进event
  • 【Java面试笔记:进阶】21.Java并发类库提供的线程池有哪几种? 分别有什么特点?
  • 【软考-架构】13.5、中间件
  • 某海关某署 【瑞数6】逆向分析
  • 《代码之美:静态分析工具与 CI 集成详解》
  • 豆包,Kim,deepseek对比
  • LLM(大语言模型)技术的最新进展可总结
  • 多模态大语言模型arxiv论文略读(四十三)
  • 未来医院已来:AI如何实现无死角安全监控
  • PowerBI动态路径获取数据技巧
  • 腾讯CSIG一面
  • 35-疫苗预约管理系统(微服务)
  • qt事件过滤与传递机制
  • 华为云Astro canvas大屏与iotDA是怎样通过数据接入、数据中心的功能传输和通讯的?
  • 经典反转结构——案例分析
  • Java 实现目录递归拷贝
  • django之账号管理功能
  • 清华成立人工智能医院,将构建“AI+医疗+教育+科研”闭环
  • 明查|把太平洋垃圾污染问题甩锅中国,特朗普用的是P过的图
  • “养老规划师”实则售卖保险,媒体:多部门须合力整治乱象
  • 中央空管办组织加强无人机“黑飞”“扰航”查处力度
  • 84%白化!全球珊瑚正经历最严重最大范围白化现象
  • 纳斯达克中国金龙指数涨2.93%,金价油价大幅下挫