機器代碼
編輯在計算機編程中,由機器語言指令組成的機器代碼是一種低級編程語言,用于直接控制計算機的中央處理器(CPU)。每條指令使CPU對CPU寄存器或內存中的一個或多個數據單元執行非常特定的任務,例如加載、存儲、跳轉或算術邏輯單元(ALU)操作。
機器代碼是一種嚴格的數字語言,旨在盡可能快地運行,并且可以被視為編譯或組裝的計算機程序的最低級表示形式,或者被視為原始的和硬件相關的編程語言。盡管可以直接用機器代碼編寫程序,但是管理單個位以及手動計算數字地址和常量既繁瑣又容易出錯。因此,在現代環境中,很少有程序直接用機器代碼直接編寫,但是可以用于低級調試、程序修補(尤其是在沒有匯編源的情況下)和匯編語言反匯編。
如今,絕大多數實用程序都是用高級語言或匯編語言編寫的。然后,通過實用程序(例如編譯器、匯編器和鏈接器)將源代碼轉換為可執行的機器代碼,但重要的例外是解釋程序,這些程序未轉換為機器代碼。但是,解釋器本身可以看作是執行源代碼指令的執行器或處理器,通常由直接可執行的機器代碼(從匯編或高級語言源代碼生成)組成。
根據定義,機器代碼是程序員可見的最低級別的編程詳細信息,但是內部許多處理器使用微代碼或將機器代碼指令優化并將其轉換為微操作序列。通常不將其視為機器代碼。
機器代碼的指令集
編輯每個處理器或處理器系列都有其自己的指令集。指令是位模式,通過物理設計對應于機器不同命令的數字或字符。因此,指令集特定于使用(主要是)相同架構的一類處理器。后繼或派生處理器設計通常包括前任的所有指令,并可能添加其他指令。有時,后繼設計會中斷或更改某些指令代碼的含義(通常是因為新目的需要使用),從而在一定程度上影響代碼的兼容性;即使是幾乎完全兼容的處理器對于某些指令而言也可能表現出稍有不同的行為,但這很少有問題。系統在其他細節上也可能有所不同,例如內存排列,操作系統或xxx設備。因為程序通常依賴于這些因素,所以即使使用相同類型的處理器,不同的系統通常也不會運行相同的機器代碼。
處理器的指令集可以具有相同長度的所有指令,也可以具有可變長度的指令。模式的組織方式隨特定的體系結構以及指令的類型而變化很大。大多數指令具有一個或多個操作碼指定的基本指令類型(如算術、邏輯字段跳躍等)和實際操作(諸如加法或比較)等領域,其可以得到的類型的操作數(一個或多個),尋址模式,尋址偏移量或索引或實際值本身(指令中包含的此類常量操作數稱為“立即數”)。
并非所有機器或單個指令都具有顯式操作數。一個累加器機具有用于大多數算術指令的組合左操作數和結果在一個隱式蓄能器。其他體系結構(例如8086和x86系列)具有通用指令的累加器版本,長指令將累加器視為通用寄存器之一。一個堆棧機在隱式堆棧上具有大多數或所有操作數。專用指令通常也缺少顯式操作數(例如:x86體系結構中的CPUID將值寫入四個隱式目標寄存器)。顯式和隱式操作數之間的這種區別在代碼生成器中很重要,尤其是在寄存器分配和有效范圍跟蹤部分中。一個好的代碼優化器可以跟蹤隱式和顯式操作數,這可以允許更頻繁的常量傳播,寄存器的常量折疊(為寄存器分配常量表達式的結果的寄存器,該常量表達式可以通過用該常量替換而釋放),以及其他代碼增強功能。
程序
編輯計算機程序是能夠由執行指令的列表,中央處理單元(CPU)。完成程序的執行是為了使正在執行該程序的CPU解決特定的問題,從而獲得特定的結果。盡管簡單的處理器能夠一個接一個地執行指令,但是超標量處理器卻能夠一次執行各種不同的指令。
程序流程可能會受到特殊的“跳轉”指令的影響,這些指令將執行轉移到數字后跟指令之外的另一條指令上。根據條件,是否進行條件跳轉(執行在另一個地址處繼續)或不執行(執行在下一條指令處繼續)。
匯編語言
編輯機器語言的一種更具可讀性的匯編語言,稱為匯編語言,它使用助記符代碼來指代機器代碼指令,而不是直接使用指令的數字值,而使用符號名來指代存儲位置,有時還指代寄存器。例如,在Zilog Z80處理器上,00000101
導致CPU遞減B
?處理器寄存器的機器代碼將以匯編語言表示為DEC B
。
與字節碼的關系
編輯機器代碼通常與字節碼(也稱為p代碼)不同,字節碼可以由解釋器執行,也可以自身編譯為機器代碼以更快(直接)執行。一種例外情況是,處理器被設計為直接使用特定的字節碼作為其機器代碼,例如Java處理器。
當引用語言功能或庫的平臺相關部分時,有時會將機器代碼和匯編代碼稱為本機代碼。
內容由匿名用戶提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/116405/