- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在运行一些汇编代码,但我无法弄清楚一行代码的作用。代码是:
leaq 0(,%rax,4), %rdx
我知道lea
基本上是一种mov
指令,但它只移动地址。因此,我们将某些内容的地址移动到%rdx
(使%rdx
“指向”堆栈上的某些内容)。我知道 %rax
指向堆栈上的内容(例如 -28(%rbp)
),但我对如何将其乘以 4 以获得我的结果感到困惑回答。 %rdx
会指向 4*(-28) = -112(%rbp)
吗?
谢谢!
编辑:对于上下文,此指令之前有以下代码:
pushq %rbp
movq %rsp, %rbp
movl %esi, -28(%rbp)
movl -28(%rbp), %eax
cltq
leaq 0(,%rax,4), %rdx
最佳答案
等效的 C 代码类似于:
extern int32 arr[];
int my_func(int32 n, ...) {
int32 a=n;
...
arr[a];
...
}
n 作为单个 32 位寄存器 esi 传递,存储到本地堆栈帧。然后该参数用于评估 64 位表达式 4*a。如果链接器应该将其重定位到地址“arr”,则可以解释“0”。
那么我的猜测是汇编代码不是由gcc -S foo.c
,但是通过gcc -c foo.c; objdump -d foo.o
// Similar code from a 32-bit machine
0: 55 push %ebp
1: 89 e5 mov %esp,%ebp
3: 8b 45 08 mov 0x8(%ebp),%eax
6: 8b 04 85 00 00 00 00 mov 0x0(,%eax,4),%eax
d: 5d pop %ebp
e: c3 ret
f: 90 nop
关于组装:有人可以解释一下带有 leaq 指令的这一行的作用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13354808/
因此,我尝试使用给定的汇编代码计算以下代码中的 M 和 N 的值。 int array1[M][N]; int array2[N][M]; void copyelement(int i, int j)
因此,我尝试使用给定的汇编代码计算以下代码中的 M 和 N 的值。 int array1[M][N]; int array2[N][M]; void copyelement(int i, int j)
我正在运行一些汇编代码,但我无法弄清楚一行代码的作用。代码是: leaq 0(,%rax,4), %rdx 我知道lea基本上是一种mov指令,但它只移动地址。因此,我们将某些内容的地址移动到%
我是一名优秀的程序员,十分优秀!