如果我必须使用某种类型的寻址来翻译一个简单的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
movq %rsp, %rbp
movl (%rsi, %rdx, 4), %eax
movl %eax, (%rdi, %rdx, 4)
popq %rbp
ret
答案 0 :(得分:1)
可能的代码可能是:
mov eax,dword ptr [rsi + rdx * 4]
mov dword ptr [rdi + rdx * 4],eax
ret
我认为此代码应该运行时没有错误。如果出现问题,请告诉我。感谢。
祝你好运!xiangpisaiMM