微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用 C++ 编写的程序如何在多个 CPU 架构上运行?

如何解决用 C++ 编写的程序如何在多个 CPU 架构上运行?

我有一个 C++ 程序,我想编译成汇编,然后汇编器会将它编译成机器码。

现在,据我所知,为了将汇编代码转换为机器代码,汇编程序需要某种表格来将汇编指令映射到实际的机器指令。

汇编程序将使用哪个表?我的 C++ 程序是否有可能无法在所有 cpu 上运行,因为 cpu 使用不同的表,这意味着相同的机器代码会在不同的 cpu 上做不同的事情?

解决方法

汇编器为它被告知/编程为汇编的任何体系结构进行汇编。由于每种指令集架构 (ISA) 的汇编语言不同,因此您只能为同一架构的一种架构编写汇编程序。通常不可能意外或故意为错误的架构组装程序。

当您使用编译器时,编译器会使用正确的标志调用正确的汇编器来汇编它为您告诉它编译的体系结构生成的汇编代码。生成的程序只能在您编译它的 ISA 的处理器上运行。如果您希望该程序在不同 ISA 的处理器上运行,则必须为该其他 ISA 编译它。

如果您的程序编写得不好,那么在为其他架构而不是您为其开发的架构编译时,它可能无法编译或运行。这样的程序称为不可移植程序。但是,除非您做一些奇怪的事情或对您正在编程的架构的属性做出假设,否则这不太可能发生。

,

一般来说,调用汇编大致是一种人类可读(文本)形式的机器代码(二进制)。

正如 franji1 在评论中所说,通常编译器会从源代码中发出中间抽象机器代码。并且这种代码可以很容易地(旨在)转换为汇编/机器代码。

我有一个 C++ 程序,我想编译成汇编,然后 汇编器会将其编译为机器码。

这就是编译器的设计目的。编译器在某种程度上具有误导性。编译器可以是“编译器阶段”或“编译器工具链”。 编译器阶段是将源代码转换为中间抽象形式的阶段,然后需要由汇编器将其转换为目标汇编/机器代码。 编译通常表示从源代码到可执行机器代码的整个过程。

现在,据我所知,为了将汇编代码转化为机器 汇编程序需要某种表来映射程序集的代码 指令到实际机器指令。

大致是。这就是像 Instruction Set Reference Manual 这样的文档的用途:描述必须如何将文本形式转换为字节形式。

汇编器将使用哪个表?

查看文档...

我的 C++ 程序是否有可能无法在所有 CPU 上运行,因为 CPU 使用不同的表,这意味着相同的机器代码将 在不同的 CPU 上做不同的事情?

您必须为每个平台(机器/操作系统)生成一个字节形式的程序。编译器旨在为给定平台生成机器代码,该代码完全实现您的源代码指定的内容。这就是编译器存在的原因,让您免于用汇编编写程序(这很难做到)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。