机器语言究竟是什么?
What actually is the machine language?
我读过很多次编译器将高级代码翻译成机器语言,每当我 google "machine language" 它告诉我它是汇编语言。另一方面,当我用记事本打开一个用 C++ 编写的 hello world 应用程序时,它向我展示了一些与汇编无关的东西。这些东西背后的秘密到底是什么,二进制和位是从哪里来的?请解决我的困惑。
机器语言是构成可执行代码的原始十六进制或二进制字节流。
汇编语言是一种人类可读的机器语言的面向助记符的中间表示。从机器语言入手,是对机器语言说什么的解释。
在最低层次上,机器语言没有人类可读的语法。程序是一个数字序列,其排列方式在 CPU 解释时会调用程序算法所请求的指令序列。
汇编语言是机器语言的人类可读表示。 CPU 无法直接解释汇编语言,因此需要在两种表示之间进行翻译步骤。您可以 运行 可执行文件上的反汇编程序,以查看其表示为汇编语言助记符的指令。
这有点类似于字符串,对人来说是字符串,但对计算机来说只是数字序列。例如,当您编写 "ABC"
时,计算机会看到一个数字序列 65、66、67。它需要一个编辑器程序才能在数字表示(数字)和人类可读表示(字母)之间切换。
同样,指令序列
AND #0F
OR #30
在 simple 8-bit CPU 的机器代码中看起来像 41、15、09、48。汇编语言的翻译器会把上面的文字变成四个数字;反汇编程序会将四个数字转回人类可读的文本。
你写C++;编译器前端生成 IR(中间表示)代码(例如,在 LLVM/Clang 的情况下,这是一种 SSA 语言形式),优化器调整 IR,编译器后端将优化的 IR 转换为符号assembly(对于你的目标 CPU),汇编程序将 asm 转换为机器代码(CPU 可以执行的指令和数据的实际数值)。
机器语言是最低级的编程语言(使用可编程微代码的计算机除外)。
机器语言是计算机唯一能理解的语言。
计算机无法理解我们用 c++ 编写的正常代码。它只能理解二进制形式的代码,即目标代码形式。
我读过很多次编译器将高级代码翻译成机器语言,每当我 google "machine language" 它告诉我它是汇编语言。另一方面,当我用记事本打开一个用 C++ 编写的 hello world 应用程序时,它向我展示了一些与汇编无关的东西。这些东西背后的秘密到底是什么,二进制和位是从哪里来的?请解决我的困惑。
机器语言是构成可执行代码的原始十六进制或二进制字节流。
汇编语言是一种人类可读的机器语言的面向助记符的中间表示。从机器语言入手,是对机器语言说什么的解释。
在最低层次上,机器语言没有人类可读的语法。程序是一个数字序列,其排列方式在 CPU 解释时会调用程序算法所请求的指令序列。
汇编语言是机器语言的人类可读表示。 CPU 无法直接解释汇编语言,因此需要在两种表示之间进行翻译步骤。您可以 运行 可执行文件上的反汇编程序,以查看其表示为汇编语言助记符的指令。
这有点类似于字符串,对人来说是字符串,但对计算机来说只是数字序列。例如,当您编写 "ABC"
时,计算机会看到一个数字序列 65、66、67。它需要一个编辑器程序才能在数字表示(数字)和人类可读表示(字母)之间切换。
同样,指令序列
AND #0F
OR #30
在 simple 8-bit CPU 的机器代码中看起来像 41、15、09、48。汇编语言的翻译器会把上面的文字变成四个数字;反汇编程序会将四个数字转回人类可读的文本。
你写C++;编译器前端生成 IR(中间表示)代码(例如,在 LLVM/Clang 的情况下,这是一种 SSA 语言形式),优化器调整 IR,编译器后端将优化的 IR 转换为符号assembly(对于你的目标 CPU),汇编程序将 asm 转换为机器代码(CPU 可以执行的指令和数据的实际数值)。
机器语言是最低级的编程语言(使用可编程微代码的计算机除外)。 机器语言是计算机唯一能理解的语言。
计算机无法理解我们用 c++ 编写的正常代码。它只能理解二进制形式的代码,即目标代码形式。