[英]effective address in assembly
我正在查看 x86-64 ISA,并且leaq
指令用于将地址加载到指定的寄存器,我正在查看以下示例:
long m12(long x){
return x *12;
}
这相当于
leaq (%rdi, %rdi, 2), %rax
salq $2, %rax
我隐约明白这里的意思是leaq
不引用计算出的“地址”给定的内存位置,而是直接重新定位计算出的“地址”。 但是, %rdi
只保存一个整数。 从某种意义上说,这是一个地址吗?
LEA
实际上与地址没有任何关系。 虽然它设计用于地址和偏移量,但数字实际上不必是地址和偏移量。 因此,它通常用于有效地对非地址但也对地址执行此类求和。
leaq (%rdi, %rdi, 2), %rax // rax = rdi + rdi*2 = 3*rdi
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.