【发布时间】:2017-10-25 00:16:22
【问题描述】:
我用以下代码创建了一个简单的 c++ 源文件。
int main() {
int a = 1;
int b = 2;
if(a < b) {
return 1;
}
else if(a > b) {
return 2;
}
else {
return 3;
}
}
我使用 objdump 命令来获取上述源代码的汇编代码。 还有那一行
int b = 2;被转换为 mov DWORD PTR [rbp-0x4],0x2。
其对应的机器码(十六进制格式)为c7 45 fc 02 00 00 00。
我想知道如何将汇编代码转换为二进制代码。我浏览了 x86-64 的英特尔参考手册,但我无法理解,因为我是低级编程的新手。
【问题讨论】:
-
“转换”是什么意思?使用程序?手动操作?
-
手动转换。
-
int b = 2;不是汇编语言。不同之处在于,C 是编译语言,因此int b = 2;行可以以多种不同的方式实现(甚至被优化器完全删除),这取决于编译器将决定什么,如何生成机器代码来产生定义的结果C 语言标准。汇编语言在某种程度上是不同的,Assembler 不是这种编译器,当你用 Assemblyadd rax,rbx编写时,它将被编译为那样,不改变指令,或者被某种优化器删除,所以更像“1:1 转换”。