AdH*_*nem 2 x86 assembly cpu-architecture cpu-registers addressing
在x86汇编程序中,假设你有
为什么需要索引和基指针寻址模式?据我所知,每个都可以用循环代替.
间接模式似乎也没有太大用处,因为您可以简单地使用直接模式来引用内存地址.首先访问寄存器的目的是什么,然后包含指向存储器地址的指针?
简而言之,哪些寻址方式确实是必要的?
虽然理论上"寻址模式"可用于指代操作数类型,但由于它不涉及地址,因此有点令人困惑.英特尔手册使用"寻址模式"来指代内存寻址,我将使用此定义.
在汇编中,操作数可以是:
在x86架构中,"寻址模式"仅适用于最后一种类型的操作数:存储器操作数(地址),并且指的是可用于计算地址的方法.寻址模式可以在单个可配置寻址模式中汇总:
address = REG_base + REG_index*n + offset
Run Code Online (Sandbox Code Playgroud)
REG_base,REG_index,n和offset都是可配置的,都可以省略(但你需要至少一个,很明显).
address = offset被称为立即,直接或绝对寻址.
address = REG_base称为寄存器间接寻址.
address = REG_base + REG_index被称为基础加索引寻址.
同样,您可以添加offset(offset)和scale(n).
严格地说,您只需要一种模式来执行所有操作:注册间接寻址(address = REG).这样,如果需要访问内存,可以在寄存器中计算所需的任何地址,并使用它来进行访问.它也可以通过使用内存替换直接寄存器操作数,并通过使用算术构造值来立即操作数.但是,对于实际的指令集,您仍然可以立即操作数来有效地加载地址,如果您不想要仅指针寄存器,则需要注册操作数.
除了间接寄存器之外的所有其他寻址模式都是为了方便起见,它们确实非常方便:
int数组,而无需额外的寄存器或计算.这些寻址模式不需要CPU的大量计算:只需要添加和移位.考虑到x86可以在每个周期进行乘法,这些操作很简单,但仍然非常方便.
| 归档时间: |
|
| 查看次数: |
1213 次 |
| 最近记录: |