眾所周知怠益,計算只能識別二進(jìn)制仪搔,任何程序或軟件,最終都要經(jīng)過編譯或解釋轉(zhuǎn)換成二進(jìn)制才能被計算機(jī)識別蜻牢。源代碼烤咧,源代碼就是由程序員使用各種編程語言編寫的還未經(jīng)編譯或者解釋的程序文本偏陪,編譯或解釋能把源代碼翻譯成等效的二進(jìn)制代碼,也就是CPU能夠識別的機(jī)器語言煮嫌。
編譯和解釋
編譯和解釋都是對源代碼的解釋處理方式笛谦,而由于他們的操作方法不同,所以會有不同的運(yùn)行的效果:
編譯是把源代碼的每一條語句都編譯成機(jī)器語言昌阿,并最終生成二進(jìn)制文件饥脑,這樣運(yùn)行時計算機(jī)可以直接以機(jī)器語言來運(yùn)行此程序,在運(yùn)行時會有很好的性能懦冰;
解釋器是只有在執(zhí)行到對應(yīng)的語句時才會將源代碼一行一行的解釋成機(jī)器語言好啰,給計算機(jī)來執(zhí)行,所以使用解釋器來執(zhí)行的語言也被稱為動態(tài)語言儿奶;
hex文件
在單片機(jī)中框往,源代碼經(jīng)過編譯之后生成hex文件,該文件以行為單位每行以冒號開頭內(nèi)容全部為16進(jìn)制代碼闯捎。那為啥是十六進(jìn)制而不是二進(jìn)制椰弊,為什么不直接生成二進(jìn)制代碼?
16進(jìn)制代碼它的每一個字節(jié)都有其特定的含義瓤鼻,比如數(shù)據(jù)長度秉版、起始地址、數(shù)據(jù)類型等信息茬祷。所以在編譯的時候就能檢驗代碼是否有錯誤清焕,能夠在一定程度上降低錯誤率,為代碼的傳輸存儲帶來便利祭犯,而二進(jìn)制代碼卻沒有這個功能秸妥;
并且hex代碼通過程序燒寫就能轉(zhuǎn)換成CPU就能識別的二進(jìn)制代碼。
但是無論是編譯或者解釋沃粗,最終的結(jié)果都是二進(jìn)制代碼粥惧,在CPU看來,二進(jìn)制代碼就是一組特定的高低電平的組合最盅;這些高低電平最終去給內(nèi)存條中相應(yīng)的一個個電容充電突雪。
那么CPU如何執(zhí)行二進(jìn)制的代碼呢?
CPU是有工程師精心設(shè)計的涡贱,我們可以把CPU看作是海量的開關(guān)組合咏删,這個開關(guān)由三極管組成,三極管/場效應(yīng)管類似繼電器(一種通過線圈產(chǎn)生磁場问词、然后用磁場控制物理開關(guān)的通斷與否的設(shè)備)督函;在它一個管腳上輸入/切斷電壓信號,另一個管腳就會出現(xiàn)高/低電平;
ps:繼電器是一種利用電磁鐵控制的開關(guān)侨核;當(dāng)向電磁鐵通電時就產(chǎn)生磁場草穆,而這個磁場就會吸合或者分離開關(guān),從而實現(xiàn)“以微弱電流控制另一條電路的通斷”這個功能搓译。
三極管拿來當(dāng)開關(guān)使用時悲柱,和這種繼電器效果幾乎一樣。
人類的第一臺萬用型計算機(jī)馬克一號就擁有3000多支繼電器些己,這也是它的核心零部件豌鸡,所以它也被稱作為繼電器,繼電器在這臺計算機(jī)中的作用就是開關(guān)段标。
現(xiàn)代的計算機(jī)中使用了三極管來代替繼電器的原理也是一樣的涯冠,CPU中有規(guī)模龐大的開關(guān)組,當(dāng)給開關(guān)組輸入一組特定的高低電瓶組合時逼庞,就會導(dǎo)致其內(nèi)部出現(xiàn)復(fù)雜的開關(guān)動作蛇更,最終產(chǎn)生另一種高低電瓶的組合作為輸出,輸出的電平經(jīng)過放大電路赛糟、模數(shù)轉(zhuǎn)換電路等變換之后派任,就可以驅(qū)動相應(yīng)的硬件動作。