1

我读过很多次,编译器将高级代码翻译成机器语言,每当我用谷歌搜索“机器语言”时,它都会告诉我它是汇编语言。另一方面,当我用记事本打开一个用 C++ 编写的 hello world 应用程序时,它向我展示了一些除了汇编之外的东西。这些东西背后的秘密究竟是什么,以及二进制和比特是从哪里来的?请解决我的困惑。

4

4 回答 4

6

在最低级别,机器语言没有人类可读的语法。程序是一个排列方式的数字序列,当被 CPU 解释时,它会调用程序算法所请求的指令序列。

汇编语言是机器语言的人类可读表示。CPU 不能直接解释汇编语言,因此需要在两种表示之间进行翻译。您可以在可执行文件上运行反汇编程序,以查看表示为汇编语言助记符的指令。

这有点类似于字符串,对人类来说是字符串,但对计算机来说,它们只是数字序列。例如,当您编写 时"ABC",计算机会看到一系列数字 65、66、67。它需要一个编辑器程序在数字表示(数字)和人类可读表示(字母)之间切换。

类似地,一系列指令

AND #0F
OR  #30

在简单的 8 位 CPU的机器代码中看起来像 41, 15, 09, 48 。汇编语言的翻译器会将上面的文本变成四个数字;反汇编程序会将四个数​​字转换回人类可读的文本。

于 2017-04-15T11:15:46.360 回答
2

机器语言是构成可执行代码的原始十六进制或二进制字节流。

汇编语言是人类可读的机器语言的面向助记符的中间表示。从机器语言开始,它是对机器语言所说的内容的解释。

于 2017-04-15T11:08:03.653 回答
1

机器语言是最低级的编程语言(使用可编程微码的计算机除外)。机器语言是计算机能够理解的唯一语言。

计算机无法理解我们用 C++ 编写的普通代码。它只能理解二进制形式的代码,即目标代码形式。

您可以在这里了解更多信息 http://www.brighthubengineering.com/consumer-appliances-electronics/115635-machine-language-vs-high-level-languages/

于 2017-04-15T11:33:48.167 回答
1

你写 C++;编译器前端生成 IR(中间表示)代码(例如,在 LLVM/Clang 的情况下,这是一种SSA语言形式),优化器调整 IR,编译器后端将优化的 IR 转换为符号汇编(用于您的目标 CPU ),汇编器将 asm 转换为机器码(CPU 可以执行的指令和数据的实际数值)。

于 2017-04-15T11:19:48.140 回答