但是如果这样的话,为什么不所有编译器都直接将高级编程语言转换成机器码而不是汇编语言呢?这样不是更好吗?我的意思是,从我所读到的来看,汇编语言使用户更容易阅读低级代码,但对计算机运行程序并不方便。 - Karim K.
1无论如何你都需要“汇编器”工具,因为某些代码(在操作系统内核中)不能用高级语言编写。汇编代码更易于生成和调试,因此编写汇编代码可以使编译器开发更简单。一些CPU类型使用不同的机器码,但是相同的汇编指令(历史上的例子:6800/6809;现代的例子:混合字节序的CPU,ARM abi/thumb)。在这些情况下,您只需要一个编译器即可为两个CPU服务。 - Martin Rosenau
clang/LLVM也可以直接生成机器码,但他们所说的是使用内置的汇编器。它仍然可以编译使用GNU C内联汇编语法的代码。但是,编译器生成的指令可能永远不会经过文本表示;我不确定。clang和MSVC绝对可以为用户输出可读的汇编代码(甚至带有注释);你不必只是反汇编目标文件。 - Peter Cordes