機(jī)器語(yǔ)言的介紹

機(jī)器語(yǔ)言的知識(shí)
一般大家只關(guān)注規(guī)則定義,保證我們的程序能夠正常的運(yùn)行。
機(jī)器語(yǔ)言也成為指令集語(yǔ)言。
指令集——計(jì)算機(jī)的體系結(jié)構(gòu)
計(jì)算機(jī)的體系結(jié)構(gòu)底層到應(yīng)用層一共分為三層(三個(gè)部分),
最上面: 軟件架構(gòu)(操作系統(tǒng)/應(yīng)用程序等)
中間: 指令集架構(gòu)
最下面: 硬件體系架構(gòu)(CPU,內(nèi)存,I/O等)
軟件架構(gòu)包括操作系統(tǒng)、應(yīng)用程序以及操作系統(tǒng)的一些固、編譯器。
硬件架構(gòu)具體指的是CPU、內(nèi)存、I/O控制、集成電路(包括元器件和邏輯門)
軟件和硬件之間的結(jié)合就是通過(guò)指令集進(jìn)行銜接,保證我們縮寫的應(yīng)用程序或者操作系統(tǒng)的一些指令。通過(guò)指令集傳達(dá)給硬件。
指令集架構(gòu)分為復(fù)雜指令集、精簡(jiǎn)指令集、顯示并行的指令集和超長(zhǎng)指令集
1)復(fù)雜指令集一般都是用在X86上。X86(32位)就是一些windows(包括win7,win8,win9,win10以及其他的,還有一些Linux和Unix都會(huì)用到X86的一些架構(gòu))。
2)精簡(jiǎn)指令集: 主要用在UNIX,Linux,包括ARM指令集、MIPS指令集以及RISCV指令集等。一般是Unix系列或者Linux系列。操作系統(tǒng)主要跑在這個(gè)指令集上。
3)顯示并行的指令集
這個(gè)指令集一般用在64位的指令上。就是純64的操作系統(tǒng)。比如window的win10就是64位的。但不是純64位的。它是兼容了32位和64位的。是一個(gè)兼容性的64位操作系統(tǒng)。
單純用64位的話,window所有的軟件肯能都不能執(zhí)行了。
(現(xiàn)在因?yàn)椴僮飨到y(tǒng)或者CPU的位數(shù)已經(jīng)做到64位了。)
4)超長(zhǎng)指令集
就是把一堆指令融合到一個(gè)指令字上,去做執(zhí)行。
那么現(xiàn)在比較流行的指令集就是復(fù)雜指令集和精簡(jiǎn)指令集。
一條指令就是機(jī)器的一個(gè)執(zhí)行語(yǔ)句,是一種有意義的二進(jìn)制代碼。一般有操作碼、地址碼等域來(lái)組成。
操作碼表達(dá)指令執(zhí)行的方法和操作步驟。
地址碼指示的是操作信息的地址位置信息。
具體指令的格式和指令的尋址方式
指令講的都是各種不同的尋址方式。比如說(shuō)直接尋址、講解尋址還有寄存器尋址等等。
復(fù)雜指令集X86,IA的64位
指令集的設(shè)計(jì)或者一次性處理數(shù)據(jù)的位數(shù)一般來(lái)說(shuō)主要和CPU的處理數(shù)據(jù)的位數(shù)相關(guān)。包括寄存器的字長(zhǎng)。
多少的處理器實(shí)際上是參與運(yùn)算的寄存器的數(shù)據(jù)長(zhǎng)度。之所以要關(guān)心多少位,是因?yàn)樵诔绦蜷_發(fā)和編寫程序的時(shí)候要關(guān)心我們數(shù)據(jù)類型的存儲(chǔ)位數(shù)。尤其是嵌入式單片機(jī)的開發(fā)。需要關(guān)系數(shù)據(jù)類型。寄存器以及數(shù)據(jù)存取,達(dá)到優(yōu)化程序的目的。
要關(guān)心不同語(yǔ)言編輯其的定義,比如在同一臺(tái)機(jī)器上TC和VC6它們對(duì)整數(shù)類型定義并不一樣。TC定義整數(shù)類型是兩個(gè)字節(jié)的。VC6整數(shù)類型是4個(gè)字體的。從8位,16位,32位,64位,計(jì)算性能提升和和存儲(chǔ)的擴(kuò)大,我們對(duì)運(yùn)算和存儲(chǔ)的關(guān)注弱化了。但是,我們要想編寫出高效的緊湊的高質(zhì)量的程序代碼,還是要對(duì)數(shù)據(jù)類型、寄存器、內(nèi)存分配要做關(guān)注。減少程序出錯(cuò)的頻次和概率。其次呢,我們也要多有符號(hào)位、無(wú)符號(hào)位各種進(jìn)制的轉(zhuǎn)換。
(如2進(jìn)制,16進(jìn)制10進(jìn)制,它們之間的轉(zhuǎn)換)。以及對(duì)數(shù)據(jù)的左移、右移、異或以及反碼。還有一些我們對(duì)數(shù)據(jù)類型的(包括原碼、反碼和補(bǔ)碼知識(shí)的認(rèn)識(shí)。只有這樣我才能夠設(shè)計(jì)和編寫出高質(zhì)量的代碼程序。
I/O是什么
I/O輸入/輸出(Input/Output),分為IO設(shè)備和IO接口兩個(gè)部分。 在POSIX兼容的系統(tǒng)上,例如 Linux 系統(tǒng) ?[1] ? ?,I/O操作可以有多種方式,比如DIO(Direct I/O),AIO(Asynchronous I/O,異步I/O),Memory-Mapped I/O(內(nèi)存映射I/O)等,不同的I/O方式有不同的實(shí)現(xiàn)方式和性能,在不同的應(yīng)用中可以按情況選擇不同的I/O方式。