每种高级语言程序在连接为可执行程序之前,都必须被编译为汇编语言程序。 这句话对么?

2019-03-08 14:42:46 +08:00
 b15

楼主买了一本《汇编语言程序设计》

英文名《 professional assembly language 》

不懂英文,就买了个汉化版。

开篇第一句,就产生了一点疑问。

不是编译成机器语言么,和汇编有啥关系?

(楼主还有一本《 C HOW TO PROGRAM 》(C 程序设计教程),只看到第 3 章。

想看汇编,是看到有人用汇编做的操作系统只有 1mb 大小,好神奇。c 语言弄的 bsd linux 都好巨大。)

1446 次点击
所在节点    问与答
8 条回复
zhangchioulin
2019-03-08 15:02:58 +08:00
才疏学浅,标题的答案不能回答,但是关于“不是编译成机器语言么,和汇编有啥关系?”可以解答一下。

按照 Objc 来说大体编译步骤如下:
$clang -ccc-print-phases main.m

0: input, "main.m", objective-c
1: preprocessor, {0}, objective-c-cpp-output
2: compiler, {1}, ir
3: backend, {2}, assembler
4: assembler, {3}, object
5: linker, {4}, image
6: bind-arch, "x86_64", {5}, image

可以看到第 4 部就是汇编。
具体的楼下补充;]
misaka19000
2019-03-08 15:10:12 +08:00
我的理解是作者在这里写的不严谨

至于操作系统内核本身都是非常小的,如果是简陋的内核也可以远小于 1M
coderluan
2019-03-08 15:12:19 +08:00
是的,但是找个汇编和你上课学的汇编是不同的,不同平台不同硬件的汇编严格来说都是不一样的。
tabris17
2019-03-08 15:12:53 +08:00
不对。

举个栗子:VBscript
wevsty
2019-03-08 15:15:24 +08:00
这话本身显然是有瑕疵的,但也不是完全没道理。
因为汇编语言其实就是机器码(机器语言)的人类可读形式。
boris1993
2019-03-08 15:16:12 +08:00
个人理解

有虚拟机的,比如 JVM 系的,是源码编译成字节码,然后在编译时或运行时再通过虚拟机执行机器码

没有虚拟机的,比如 C,就是源码编译成目标的机器码

汇编语言不是“机器码的助记符”么
iceheart
2019-03-08 16:44:36 +08:00
教材过时了
senghoo
2019-03-08 16:52:52 +08:00
这本书写的挺好。就是要注意的是这本用的是 AT&T 格式的。
和国内大部分时候说的汇编不一样。

但是就内容来说是很好的一本书。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/542505

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX