簡體   English   中英

用 C++ 編寫的程序如何在多個 CPU 架構上運行?

[英]How can a program written in C++ be run on multiple CPU architectures?

我有一個 C++ 程序,我想編譯成匯編程序,然后匯編程序將它編譯成機器碼。

現在,據我所知,為了將匯編代碼轉換為機器代碼,匯編程序需要某種表格,將 map 匯編指令轉換為實際機器指令。

匯編器將使用哪個表? 我的 C++ 程序是否有可能無法在所有 CPU 上運行,因為 CPU 使用不同的表,這意味着相同的機器代碼將在不同的 CPU 上執行不同的操作?

匯編器為它被告知/編程為匯編的任何架構進行匯編。 由於每種指令集體系結構 (ISA) 的匯編語言不同,因此您只能為同一體系結構匯編為一種體系結構編寫的匯編程序。 通常不可能意外或故意為錯誤的體系結構組裝程序。

當您使用編譯器時,編譯器會調用具有正確標志的正確匯編器來匯編它為您告訴它編譯的體系結構生成的匯編代碼。 生成的程序只能在您為其編譯的 ISA 處理器上運行。 如果您希望程序在不同 ISA 的處理器上運行,您必須為其他 ISA 編譯它。

如果您的程序寫得不好,那么當為其他架構編譯時,它可能無法編譯或工作,而不是您為其開發的架構。 這樣的程序稱為不可移植程序。 然而,除非你做了奇怪的事情或對你正在編程的架構的屬性做出假設,否則這不太可能發生。

一般來說,所謂的匯編大致是機器代碼(二進制)的人類可讀(文本)形式。

正如 franji1 在評論中所說,通常編譯器會從源代碼發出中間抽象機器代碼。 並且這種代碼可以很容易(它打算)被翻譯成匯編/機器代碼。

我有一個 C++ 程序,我想編譯成匯編程序,然后匯編程序將它編譯成機器碼。

這就是編譯器的設計目的。 編譯器在某種程度上具有誤導性。 編譯器可以是“編譯器階段”或“編譯器工具鏈”。 編譯器階段是將您的源代碼轉換為中間抽象形式的階段,然后需要由匯編器將其轉換為目標程序集/機器代碼。 編譯通常表示從源代碼到可執行機器代碼的整個過程。

現在,據我所知,為了將匯編代碼轉換為機器代碼,匯編程序需要某種表格,將 map 匯編指令轉換為實際機器指令。

大致是的。 這就是像指令集參考手冊這樣的文檔的用途:描述必須如何將文本形式轉換為字節形式。

匯編器將使用哪個表?

見文件...

我的 C++ 程序是否有可能無法在所有 CPU 上運行,因為 CPU 使用不同的表,這意味着相同的機器代碼將在不同的 CPU 上執行不同的操作?

您必須為每個平台(機器/操作系統)生成程序的字節形式。 編譯器旨在為給定平台生成機器代碼,該平台准確地實現您的源代碼指定的內容。 這就是編譯器存在的原因,讓您免於在匯編中編寫程序(這很難做到)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM