函数 main 的汇编代码转储:
0x0000000100000de6 <main+0>: push %rbp
0x0000000100000de7 <main+1>: mov %rsp,%rbp
0x0000000100000dea <main+4>: sub $0x30,%rsp
0x0000000100000dee <main+8>: mov %edi,-0x14(%rbp)
我了解到mov %rsp,%rbp
意味着将rsp的值移动到rbp
但我知道在英特尔架构中,这意味着将 rbp 的值移至 rsp
根据Intel手册(Intel Architecture Software Developer's Manual. Volume 2. 3-104 MOV instructions),mov a, b
应该表示将b移动到a
下一个sub
指令是相同的。
我知道 sub a,b
的意思是 a = a-b
。但这里 sub $0x30, %rsp
表示 rsp = rsp - 0x30
我这是怎么了?
最佳答案
你没有什么问题。您在这里提供的是 AT&T 语法中的汇编代码(google 一下),其中操作数顺序与您在英特尔手册中看到的相反。
关于assembly - 指令的参数顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12552517/