gpt4 book ai didi

组装:有人可以解释一下带有 leaq 指令的这一行的作用吗?

转载 作者:行者123 更新时间:2023-12-02 19:14:33 29 4
gpt4 key购买 nike

我正在运行一些汇编代码,但我无法弄清楚一行代码的作用。代码是:

 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com