小编Edu*_*dez的帖子

不能强制在GCC内联汇编中使用64位寄存器

我试图用GCC Inline Assembly做一些事情,在这种情况下,做一个Syscall,但我想强制使用64位寄存器(rax,rdi,rsi,...)而不是32位寄存器(eax,edi, ...),但我尝试了很多方法,没有.

void syscall(uint64_t arg1, uint64_t arg2) {
   // arg1 -> rax        arg2 -> rdi
   __asm__("syscall" : : "a" (arg1), "D" (arg2));
}
Run Code Online (Sandbox Code Playgroud)

当我编译我得到:

mov eax, 60
syscall
Run Code Online (Sandbox Code Playgroud)

我正处于一个函数中,所以"edi"正在从参数中得到,但就像你可以看到的那样是"eax",我想使用rax.

如何强制使用64位寄存器而不是32位寄存器?

c gcc x86-64 inline-assembly

5
推荐指数
1
解决办法
710
查看次数

标签 统计

c ×1

gcc ×1

inline-assembly ×1

x86-64 ×1