一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

CPU是怎么認識程序員寫的代碼的?

 御龍歸來 2019-10-14

其實CPU是不認識程序員寫的代碼的,這需要編譯器當中間的翻譯官,在說方舟編譯器的時候說過這些,這里更系統(tǒng)的說一下,會涉及到的計算機課程包括《計算機組成原理》、《電子電路》、《匯編語言》、《編譯原理》、《C/C /JAVA 程序設(shè)計》等。

某種意義上來說算盤就是一種早期的計算機,算盤計算需要的是什么?數(shù)據(jù)和操作,比如“1 1”這個運算“1”就是數(shù)據(jù),“ ”就是對數(shù)據(jù)進行的操作。經(jīng)過這么多年的發(fā)展,我們的電腦可以干很多很多的事情了,但是本質(zhì)上還是在做類似“1 1”的操作。

目前所接觸到的計算機都是以馮·諾依曼體系結(jié)構(gòu)為主,結(jié)構(gòu)如下:

簡單說就是CPU從外面取數(shù)據(jù),然后在內(nèi)部通過運算器做運算,最終將計算結(jié)果輸出,控制器則是對程序規(guī)定的控制信息進行分析,控制并協(xié)調(diào)輸入,輸出操作或內(nèi)存訪問。

CPU是一顆數(shù)字電路芯片(還有模擬電路芯片),他是怎么制造出來的呢?可以參考Intel制作的從沙子到芯片的短片,如下:

CPU上面主要是晶體管電路,晶體管只有兩個狀體:高電平和低電平,在計算機中用0(false)和1(true)表示,通過0和1能表示多少東西呢?前面我們說CPU的本質(zhì)就是計算,只有兩個狀態(tài)如何計算“1 1”,“2 2”呢?有一個數(shù)學分支——布爾代數(shù)。布爾代數(shù)只有兩個數(shù)據(jù)表示:true(1)和false(0),運算符也沒有加減乘除,只有:NOT(非)、AND(與)、OR(或)(讀起來好像跟鬧太套很像)。

以AND(為例),只有兩個都為true,結(jié)果才是true,有一個為false結(jié)果就為false,這種看似神奇的邏輯本來是證明哲學的,所以。。。

在布爾代數(shù)中,只需要通過,NOT(非)、AND(與)、OR(或)來實現(xiàn)運算,其實還有個常用的XOR(異或)。運算解決了,數(shù)字怎么解決,只有0和1怎么表示那么多的數(shù)字?這個大家都能想到——二進制就行了,可是程序中不僅有數(shù)字還有字母呢,怎么搞?提前編碼,就是ascii表,實際上我們輸入一個大寫字面“A”,在里面對應(yīng)的就是二進制0100 0001(十進制65);

有了布爾代數(shù)以及ascii表,計算機就可以表示所有的數(shù)字和字母(初期不支持漢字)以及符號了,下面就可以設(shè)計門電路了,CPU就是由各種門電路組成的:

到了這里可以很容易得出一個結(jié)論,CPU用0和1就可以搞定數(shù)據(jù)和運算,CPU是搞定了,對CPU來說各種0和1的組合就是它能讀懂的“語言”,這就是我們所說的機器語言。0和1這種語言也是人來規(guī)定的,人當然也能讀懂,但是當面對非常龐大的一堆的0和1時,任誰都會崩潰,這太反人類了。

于是匯編語言誕生了,匯編語言與機器指令是一一對應(yīng)的,比如我們要計算1 1,如果直接輸入機器碼會是很長的一串0和1的組合,如果是匯編語言(8086)呢?大概就是下面的樣子:

mov ax, 1    //寄存器ax送入值1,
mov bx, 1    //寄存器bx送入值1,
add ax, bx   // ax和 bx 寄存器值相加

是不是很容易看懂了?寄存器又是什么呢?是CPU內(nèi)部暫時存儲指令、地址、數(shù)據(jù)的元器件,intel的64位處理器中有16個寄存器。

又說起硬件了,我們繼續(xù)說軟件,匯編語言有很多指令和助記符幫助程序員,所以這些程序編寫起來會方便很多,那CPU是如何理解匯編器的呢?其實機器也不懂匯編語言,把匯編語言轉(zhuǎn)換成都是01的機器語言需要匯編器(Assembler),其實就是匯編語言編譯器,但是這個很底層,用二進制寫的,機器可以讀懂這個翻譯。

對程序員來說,匯編語言確實比機器碼方便了,但是依然會設(shè)計寄存器,地址等,想要做一個大型軟件還是很麻煩,這就有了C語言等,后來又有了JAVA、python等高級需要,比如要用C語言寫一個'1 1',就是下面的形式:

int x;
x = 1 1;

是不是更簡單了,C語言一樣效率不高,因為想要更好的描述世界,進行大型程序開發(fā)面向過程的語言是力不從心的,于是就有了面向?qū)ο?,有了反射等機制。不管是C語言還是JAVA、python等,都是為了方便程序員更好的抽象和描述世界,描述需求。機器依然不懂,編譯器因此誕生了,編譯器就是把程序員用的各種高級語言翻譯成處理器 才懂的機器語言。

上面我一直說的CPU都是基于Intel 的8086處理器,課本上也一直是這個,現(xiàn)在應(yīng)該也還是,但是事實上現(xiàn)在已經(jīng)有很多的處理器已經(jīng)不是X86處理器了,ARM和X86的區(qū)別是什么呢?ISA(An instruction set architecture , 指令集架構(gòu))不同,我們還說上面最簡單的A B的描述,在不同的指令集上,他們的實現(xiàn)是不一樣的,也就是我們平時說的架構(gòu)不同,所以同一個程序最后編譯到不同架構(gòu)的處理器上得到的機器碼也是不同的,無法移植。

那能不能跨平臺呢?在IT界,加個中間層沒有什么不可以的,比如JAVA就是增加了一個虛擬機,JAVA的虛擬機就是JAVA跨平臺的基礎(chǔ)。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    五月婷婷综合激情啪啪| 国产综合香蕉五月婷在线| 国产成人亚洲综合色就色| 熟女高潮一区二区三区| 欧美成人免费视频午夜色| 少妇视频一区二区三区| 99久只有精品免费视频播放| 99久久成人精品国产免费| 好吊色欧美一区二区三区顽频| 很黄很污在线免费观看| 亚洲熟女精品一区二区成人| 国产精品久久香蕉国产线| 九九热在线视频精品免费| 视频在线播放你懂的一区| 久久精品国产亚洲熟女| 精品人妻精品一区二区三区| 欧美日韩在线视频一区| 国产av一区二区三区四区五区| 中文字幕乱码一区二区三区四区 | 国自产拍偷拍福利精品图片| 色一情一乱一区二区三区码| 成人精品欧美一级乱黄| 中文字幕亚洲精品在线播放| 欧洲一区二区三区蜜桃| 熟女高潮一区二区三区| 熟女中文字幕一区二区三区| 蜜桃传媒在线正在播放| 日韩精品中文字幕亚洲| 精品国产亚洲一区二区三区| 亚洲精品成人福利在线| 中文字幕亚洲人妻在线视频| 美女极度色诱视频在线观看| 九九视频通过这里有精品| 中文字幕一区二区熟女| 日韩成人h视频在线观看| 精品国产av一区二区三区不卡蜜| 精品人妻av区波多野结依| 大香伊蕉欧美一区二区三区| 妻子的新妈妈中文字幕| 在线观看中文字幕91| 久久精品国产在热亚洲|