前言
本次計(jì)算機(jī)組成原理學(xué)習(xí)主要分為兩塊
- 1、計(jì)算機(jī)組成原理學(xué)習(xí)(一)
主要對計(jì)算計(jì)結(jié)構(gòu)和微處理器(CPU)功能原理進(jìn)行學(xué)習(xí) - 2、計(jì)算機(jī)組成原理學(xué)習(xí)(二)
主要對CPU,操作系統(tǒng),匯編椎木、編程語言之間的運(yùn)行原理進(jìn)行學(xué)習(xí)
我們的世界是多元多義的,而計(jì)算機(jī)的世界永遠(yuǎn)是枯燥的博烂,除了0就是1香椎,為了能夠勾畫出我們能夠理解的東西,我們定義了單位字節(jié)禽篱,但是這些又不能被大多數(shù)人認(rèn)知畜伐,因?yàn)槲覀儾荒軐懸黄恼拢缓鬂M篇都是0和1吧躺率,所以后來CPU的架構(gòu)師們設(shè)計(jì)了很多機(jī)器指令玛界,這些指令剛開始是一些十六進(jìn)制的機(jī)器碼,而這些指令的集合就是CPU指令集悼吱,隨著科技的發(fā)展慎框,這樣的設(shè)計(jì)已經(jīng)不能滿足需求,為了讓更多的人能夠參與進(jìn)來后添,頂層設(shè)計(jì)師們設(shè)計(jì)了一種最接近CPU指令集的低級語言笨枯,我們稱它為匯編語言,匯編的誕生遇西,讓計(jì)算機(jī)有了質(zhì)的發(fā)展馅精。
??匯編語言已經(jīng)能夠讓很多人編寫自己的軟件,但是這樣還不夠粱檀,因?yàn)椴煌腃PU生產(chǎn)廠家指令集不一致,出現(xiàn)了一個(gè)問題就是一次編寫不能重復(fù)使用茄蚯,不同的CPU需要一定的修改程序的額外工作哮塞,后來就提出了高級語言尸执,CPU廠家根據(jù)ISA(工業(yè)標(biāo)準(zhǔn)規(guī)范架構(gòu))統(tǒng)一協(xié)定實(shí)現(xiàn)并支持匯編語言集合(其中有少些匯編語言功能會有所不同)绊诲,這種匯編集合就是匯編指令集。
一世舰、CPU指令集(機(jī)器語言)和匯編語言
CPU指令集
由十六進(jìn)制數(shù)字組成的一組指令。每條指令需要查大量的表格來確定每個(gè)數(shù)字表示什么意思。每個(gè)廠家的指令集都有不同查剖。匯編語言
將一組一組的十六進(jìn)制數(shù)字用助記符(Mnemonic)表示效览,這些助記符就是匯編語言哆键,寫好的匯編程序可以通過匯編器(Assembler)去查表把助記符替換成數(shù)字闪盔,也就把匯編語言翻譯成了機(jī)器語言。
注意:
1头岔、匯編語言和機(jī)器語言的指令是一一對應(yīng)的峡竣,匯編語言有三條指令适掰,機(jī)器語言也有三條指令稚伍,匯編器就是做一個(gè)簡單的替換工作
2、
二、32/64位CPU、操作系統(tǒng)、應(yīng)用程序
- 32/64位CPU
指的是CPU的處理數(shù)據(jù)的能力(每個(gè)CPU時(shí)鐘周期內(nèi),CPU能夠處理的數(shù)據(jù)量(二進(jìn)制數(shù)的位數(shù)長度))。
注意:
該能力影響CPU的運(yùn)算速度和內(nèi)存尋址能力贵白。位數(shù)更大的機(jī)器的運(yùn)算速度和內(nèi)存尋址能力更快和更大禁荒,比如靴寂,64位機(jī)有比32位機(jī)更快的運(yùn)算速度剖踊,64位機(jī)支持比32機(jī)更大的內(nèi)存固惯。
32/64位操作系統(tǒng)
指的是操作系統(tǒng)能夠操作的最大內(nèi)存地址空間梆造。32位只能支持并且操作最大4GB的內(nèi)存,而64位支持128G內(nèi)存葬毫。32/64位應(yīng)用程序
指的是該軟件能夠操作的最大內(nèi)存地址空間镇辉。32位應(yīng)用程序只能操作最大4GB的內(nèi)存,而64位支持128G內(nèi)存贴捡。三者位數(shù)上關(guān)系
從理論上來講忽肛,三者的位數(shù)要保持一致的。實(shí)際上情況烂斋,
1屹逛、64位CPU能夠運(yùn)行32位操作系統(tǒng),32位系統(tǒng)不能運(yùn)行64位CPU上汛骂。
CPU的位數(shù)與操作系統(tǒng)的位數(shù)間的關(guān)系 不同位數(shù)的CPU的指令集的指令長度是不同的罕模。所以,理論上32位CPU上只能跑32位操作系統(tǒng)帘瞭、64位CPU上只能跑64位操作系統(tǒng)手销。 但是為了實(shí)現(xiàn)”升級到64位硬件的同時(shí)保證之前購買的32位軟件仍然能夠運(yùn)行”,所以主要廠商對CPU進(jìn)行處理图张,使64位CPU能夠運(yùn)行32位操作系統(tǒng)锋拖。
2诈悍、64位操作系統(tǒng)能夠運(yùn)行32位軟件,32軟件不能運(yùn)行在64位系統(tǒng)上兽埃。
三侥钳、程序運(yùn)行原理
首先我們通過上面的學(xué)習(xí),高級語言需要通過翻譯成機(jī)器語言才能執(zhí)行柄错,而翻譯的方式分為兩種舷夺,一種是編譯型,另一種是解釋型售貌,因此我們基本上將高級語言分為兩大類给猾,一種是編譯型語言,例如C颂跨,C++敢伸,Java,另一種是解釋型語言恒削,例如Python池颈、Ruby、MATLAB 钓丰、JavaScript躯砰。
- 編譯型
源程序全部編譯成二進(jìn)制代碼的可運(yùn)行程序,以后運(yùn)行該程序無需再經(jīng)過編譯過程携丁。 - 解釋型
源程序解釋一句琢歇,然后執(zhí)行一句,直至結(jié)束梦鉴,以后每次運(yùn)行都需要解釋引擎矿微,解釋一句,執(zhí)行一句尚揣。
注意:
關(guān)于Java語言到底是編譯型還是解釋型涌矢,這里不做討論。
讓我們拿一個(gè)簡單的C程序如何在操作系統(tǒng)中運(yùn)行作為例子快骗,再細(xì)入的學(xué)習(xí)下整個(gè)運(yùn)行全過程娜庇。首先C語言程序需要經(jīng)過編譯后才能運(yùn)行。編譯過程如下:預(yù)處理方篮、編譯名秀、匯編和鏈接。
- 預(yù)處理
預(yù)處理是編譯過程的第一遍做替換工作藕溅,將頭文件匕得,條件編譯指令和宏中的引用用真實(shí)的實(shí)現(xiàn)代碼替換,同時(shí)完成其他工作。 - 編譯
編譯是第二遍汁掠,它將C語言程序轉(zhuǎn)換為匯編語言程序略吨。 - 匯編
匯編將匯編程序轉(zhuǎn)換成機(jī)器語言程序,也就是機(jī)器指令序列考阱。 - 鏈接
是編譯的最后階段翠忠。這需要一個(gè)或多個(gè)目標(biāo)文件或庫作為輸入,并結(jié)合他們產(chǎn)生一種單一的(通常是可執(zhí)行文件)文件乞榨。在這樣做時(shí)秽之,它解析引用外部符號,分配給最后地址的程序/函數(shù)和變量吃既,并修改代碼和數(shù)據(jù)考榨,以反映新的地址(一個(gè)稱為重定位的處理)
注意:
1、鏈接的作用
??編譯的最后一個(gè)階段是鏈接鹦倚,鏈接的作用是將程序代碼與操作系統(tǒng)中自帶的動(dòng)態(tài)鏈接庫和系統(tǒng)API進(jìn)行關(guān)聯(lián)段化。只有關(guān)聯(lián)后程序才能運(yùn)行券躁。
如果你們想更細(xì)入的了解程序運(yùn)行過程诵原,那就要去深讀《編譯原理》活喊。因本人知識有限云头,如果有錯(cuò)誤捐友,請指出,隨時(shí)溝通交流溃槐,感謝匣砖。