寻址方式终极指南:7 种寻址模式与性能分析

为什么 MOV AX, [BX] 和 MOV AX, [BX+SI+10h] 的机器码不同?本文彻底搞懂 8086 的 7 种寻址方式:立即数、寄存器、直接、寄存器间接、基址、变址、基址变址,配合内存访问速度分析。

2

寻址的本质

CPU 执行指令时,需要找到操作数的位置。寻址方式就是告诉 CPU 去哪里找数据。

立即数寻址

数据直接在指令中:

1
MOV AX, 1234h
  • 最快,无需访问内存
  • 数据随指令一起从代码段取出

寄存器寻址

操作数在寄存器中:

1
MOV AX, BX
  • 极快,寄存器在 CPU 内部
  • 无内存访问延迟

直接寻址

操作数在内存的固定地址:

1
MOV AX, [2000h]
  • 访问 DS:2000h 处的数据
  • 地址在编译时确定

寄存器间接寻址

地址在寄存器中:

1
MOV AX, [BX]
  • 地址 = DS:BX
  • 适合遍历数组

基址寻址

1
MOV AX, [BP+10h]
  • 地址 = SS:BP + 10h(注意用 SS 段)
  • 常用于访问局部变量

变址寻址

1
MOV AX, [SI+50h]
  • 地址 = DS:SI + 50h
  • 适合数组元素访问

基址变址寻址

1
MOV AX, [BX+SI+100h]
  • 地址 = DS:BX + SI + 100h
  • 最灵活,适合二维数组或结构体成员访问

性能对比

寻址方式 内存访问次数 相对速度
立即数 0 ⚡ 最快
寄存器 0 ⚡ 最快
直接 1 较快
间接 1 中等
基址变址 1 较慢(计算地址)

总结

选择合适的寻址方式,是汇编性能优化的第一步。简单变量用直接寻址,数组用变址,结构体用基址变址。

下一篇:《堆栈操作深度解析:PUSH/POP 与函数调用的秘密》

广告
广告位预留中 (728x90)