指令的参数顺序

时间:2012-09-23 12:55:58

标签: assembly gdb

函数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表示move the value of rsp to rbp
但我知道在英特尔架构中,这意味着move the value of rbp to rsp 根据英特尔手册(英特尔架构软件开发人员手册。第2卷第3-104页MOV指令),mov a, b应表示move b to a

下一个sub提示是一样的。 我知道sub a,b表示a = a-b。但此处sub $0x30, %rsp表示rsp = rsp - 0x30

我怎么了?

1 个答案:

答案 0 :(得分:2)

你没有错。你在这里展示的是AT&amp; T语法中的汇编代码(google it up),其中操作数顺序与你在英特尔手册中看到的相反。