【发布时间】:2013-07-05 13:54:00
【问题描述】:
如果我必须用这样的寻址方式翻译一个简单的 C 函数:
void f(int *a, int *b, long i){
a[i] = b[i];
}
在 System V AMD X86-64(AT&T 标准)程序集中,使用带有 index、base 寄存器和 scale 值的间接寻址。
那么,由于汇编中没有任何类型的指针算术运算,整数指针的刻度值应该是4?
这段代码正确吗?
f:
pushq %rpb # editor's note: typo for %rbp
movq %rsp, %rbp
movl (%rsi, %rdx, 4), %eax
movl %eax, (%rdi, %rdx, 4)
popq %rbp
ret
【问题讨论】:
-
你试过运行它吗?它不工作吗?顺便说一句,你不应该假设
int是任何特定的大小。如果您需要特定大小的整数,请使用stdint.h中定义的类型(例如int32_t)。
标签: assembly x86-64 att addressing-mode