我给了一些C代码和它的汇编对应物,我将用它来计算声明的两个常量的值#define.我的问题是这条线是什么
leal 0(,%eax,8),%edx
Run Code Online (Sandbox Code Playgroud)
做?
lea(及其大小后缀的变体)是加载有效地址指令.基本上,它执行地址计算:它采用类似于所采用的地址描述mov,但它不是访问该地址处的存储器,而是将计算的地址值加载到寄存器中.例如,这可用于获取C中的指针值.
因为地址描述非常灵活(任意起始基数,偏离基数和灵活元素大小),并且因为lea是快速指令,lea所以通常需要执行简单算术.在这种情况下,使用lea与物理地址无关,而只是用来做数学.通常,当涉及的寄存器是数值(而不是指针值)时,可以识别这一点.在这种情况下,lea执行操作%edx = %eax * 8.由于将地址乘以8很少会产生有意义的地址,因此您可以得出结论,lea此处的指令只是执行数学运算.