機(jī)器語言如何編寫 機(jī)器語言是以什么表示的機(jī)器指令?
機(jī)器語言是以什么表示的機(jī)器指令?機(jī)器語言是一種由二進(jìn)制代碼指令直接表示的計(jì)算機(jī)語言。指令是由0和1組成的一系列代碼。它們有一定數(shù)量的位并被分成若干段。每一段的代碼代表不同的含義。例如,計(jì)算機(jī)的字長為1
機(jī)器語言是以什么表示的機(jī)器指令?
機(jī)器語言是一種由二進(jìn)制代碼指令直接表示的計(jì)算機(jī)語言。指令是由0和1組成的一系列代碼。它們有一定數(shù)量的位并被分成若干段。每一段的代碼代表不同的含義。例如,計(jì)算機(jī)的字長為16位,即16個(gè)二進(jìn)制數(shù)構(gòu)成一條指令或其他信息。這16個(gè)零和一可以形成各種排列和組合,通過線路把這些排列和組合變成電信號,這樣計(jì)算機(jī)就可以進(jìn)行各種操作。例如,某臺計(jì)算機(jī)的指令是1011000000000,這意味著讓計(jì)算機(jī)執(zhí)行加法運(yùn)算,而指令1010100000000意味著執(zhí)行減法運(yùn)算。前八個(gè)代表操作碼,后八個(gè)代表地址碼。從以上兩條指令可以看出,它們只在從左0位計(jì)算出的操作碼的第6位和第7位不同。此模型可以包含256條不同的指令(=2的8次方)。計(jì)算機(jī)可以直接識別機(jī)器語言或二進(jìn)制代碼語言,而無需任何翻譯。每臺機(jī)器的指令格式和代碼都是嚴(yán)格的,因此被稱為面向機(jī)器的語言,也稱為機(jī)器語言。它是第一代計(jì)算機(jī)語言。對于不同類型的計(jì)算機(jī),機(jī)器語言通常是不同的。
C語言、匯編語言、機(jī)器指令、CPU之間是怎么聯(lián)系起來的?
CPU的全稱是中央處理器,它是計(jì)算機(jī)操作的核心。根據(jù)所采用的不同技術(shù),CPU分為x86、x64、arm、DSP、單片機(jī)等不同的體系結(jié)構(gòu)。每種CPU上都有一組特定的指令集,通常稱為機(jī)器指令。直接用機(jī)器指令編寫的程序是機(jī)器語言程序。
從理論上講,任何程序都可以直接用機(jī)器語言編寫(在早期,程序比較簡單),程序可以直接運(yùn)行。然而,對于程序員來說,使用機(jī)器語言編程的要求很高,代碼不易移植,不便于人們直接閱讀。所以人們發(fā)明了一組符號,用符號來表示這些機(jī)器指令,這就是匯編語言。用匯編語言編寫的程序不能直接由計(jì)算機(jī)運(yùn)行。它需要一個(gè)名為匯編程序的程序被轉(zhuǎn)換成機(jī)器語言才能在特定的機(jī)器上運(yùn)行。
C語言比匯編語言更高級,用C語言編寫的程序不能直接在計(jì)算機(jī)上運(yùn)行。它要求編譯器將C語言代碼轉(zhuǎn)換成機(jī)器語言。此過程分為幾個(gè)子步驟,如下圖所示。
為了使主要問題更加完善,這里添加了兩個(gè)概念,鏈接器和反匯編。
這些目標(biāo)文件也是機(jī)器指令,但它們?nèi)鄙僖恍┍匾男畔?,無法直接運(yùn)行。鏈接器需要將這些文件與一些庫文件和可執(zhí)行文件頭信息鏈接在一起,形成一個(gè)可執(zhí)行文件(windows為PE格式,Linux為ELF格式)。
通常,在查看二進(jìn)制文件(對象文件或可行性文件)時(shí),機(jī)器指令不會直接顯示,而是以匯編語言顯示。這是因?yàn)樵谶@個(gè)過程中有一個(gè)反匯編程序,它將機(jī)器指令轉(zhuǎn)換成匯編語言,其功能與匯編過程正好相反。
機(jī)械指令有什么用?
機(jī)器指令是CPU可以直接識別和執(zhí)行的指令,其形式是二進(jìn)制代碼。機(jī)器指令通常由操作碼和操作數(shù)組成。操作碼表示指令要完成的操作,即指令的功能。工序號表示工序涉及的對象和工序結(jié)果的位置。
機(jī)器指令和微指令的關(guān)系是怎樣的呢?
1. 一條機(jī)器指令對應(yīng)于一個(gè)由多條微指令組成的微程序。因此,機(jī)器指令的功能是通過一系列微指令來實(shí)現(xiàn)的。簡言之,由機(jī)器指令執(zhí)行的操作被分成若干微指令,這些微指令由微指令解釋和執(zhí)行。
2. 從指令與微指令、程序與微程序、地址與微地址的一一對應(yīng)關(guān)系來看,前者與內(nèi)存有關(guān),后者與控制內(nèi)存(微程序控制器的一部分)有關(guān)。微程序控制器主要由控制存儲器、微指令寄存器和地址轉(zhuǎn)移邏輯組成。其中,微指令寄存器分為微地址寄存器和微指令寄存器兩部分。