因此我理解c ++代码由汇编代码组成,当我编译程序时,它被读作其程序集等效,然后由编译器运行.我也明白,汇编语法和功能会从一个模型变为一个模型.如果是这样的话,编译器如何设法编译程序而不会遇到错误?我的意思是,编译器不可能保存创建的每个汇编语言变体,是吗?
我认为你将汇编代码与机器代码混淆了.这是不一样的.机器代码是CPU执行的 - 指令和数据的字节流.汇编是机器代码的人类可读表示.
确实,所有C++代码最终都被编译成机器代码.是的,指令集在CPU和CPU版本之间变化.编译器具有"目标体系结构"的概念 - 编译时,您可以选择指定一个.如果不这样做,则假定当前机器的体系结构.是的,编译器供应商必须努力支持他们打算支持的每种CPU.幸运的是,没有那么多.此外,在C编译过程中,代码生成甚至不是最复杂的步骤,因此大多数编译器自己的代码不是CPU特定的.
有些编译器通过汇编工作 - 而不是生成机器代码,它们生成汇编并将其提供给汇编程序以进行编译的最后阶段.通过这种设计,您的编译器通常假定系统中存在某种特定版本的汇编程序 - 通常是GNU汇编程序(as).