組合電路、時(shí)序電路在計(jì)算機(jī)課程中的地位

這個(gè)題目是我臨時(shí)想的余蟹,不知道是否準(zhǔn)確卷胯,一直想寫一個(gè)類似的東西,希望能夠引起童鞋們關(guān)注硬件并喜歡上硬件威酒。

我是文科出生窑睁,研究生階段才轉(zhuǎn)向計(jì)算機(jī),中間有很長(zhǎng)一段時(shí)間都只做軟件理論相關(guān)研究和一些具體的軟件項(xiàng)目葵孤,包括編譯器担钮、電力系統(tǒng)監(jiān)控器、軟件測(cè)試工具研發(fā)等尤仍;直到2009年箫津,才開(kāi)始陸陸續(xù)續(xù)接觸一些硬件項(xiàng)目,說(shuō)是硬件項(xiàng)目宰啦,其實(shí)主要是一些嵌入式的項(xiàng)目苏遥,如世界杯前做的3G轉(zhuǎn)Wifi和自己玩的一些小車和傳感器等。

在做嵌入式項(xiàng)目之前赡模,壓根就沒(méi)接觸過(guò)硬件方面的開(kāi)發(fā)知識(shí)田炭,難度可想而知,什么叫編碼器漓柑、什么叫譯碼器教硫、怎么做分頻叨吮、怎么做倍頻、怎么做A/D轉(zhuǎn)換瞬矩、D/A等等茶鉴,一系列的問(wèn)題迎面而來(lái)。為了完成項(xiàng)目景用,只能硬著頭皮上涵叮,從最基礎(chǔ)的數(shù)字邏輯開(kāi)始看起,從二進(jìn)制丛肢、卡諾圖入手围肥,逐漸深入到組合電路和時(shí)序電路,再結(jié)合一本叫做《計(jì)算機(jī)組成與設(shè)計(jì)-硬件/軟件接口》蜂怎,才逐漸深入明白我們做的編譯器后端的具體工作原理穆刻,在此基礎(chǔ)上對(duì)軟件的各種性能問(wèn)題有了更深刻的認(rèn)識(shí)。

組合電路和時(shí)序電路是計(jì)算機(jī)原理的基礎(chǔ)課杠步,組合電路描述的是單一的函數(shù)功能氢伟,函數(shù)輸出只與當(dāng)前的函數(shù)輸入相關(guān);時(shí)序電路則引入了時(shí)間維度幽歼,時(shí)序電路在通電的情況下朵锣,能夠保持狀態(tài),電路的輸出不僅與當(dāng)前的輸入有關(guān)甸私,而且與前一時(shí)刻的電路狀態(tài)相關(guān)诚些,如我們個(gè)人PC中的內(nèi)存和CPU中的寄存器,均為時(shí)序電路皇型。

說(shuō)了這么多诬烹,我們學(xué)習(xí)的組合電路和時(shí)序電路在計(jì)算機(jī)中又是怎么一回事呢?為了便于理解弃鸦,下面以一個(gè)大家都能接受的C語(yǔ)言程序開(kāi)始绞吁,從上層向下層開(kāi)始解釋。

void main(){ int a = 3, b = 5; int sum = a + b; }

這個(gè)例子大家都能明白唬格,main函數(shù)要做的事情就是實(shí)現(xiàn)兩個(gè)數(shù)的加法操作家破。這是我們?nèi)祟惖乃季S方式,但是計(jì)算機(jī)并不認(rèn)識(shí)购岗,如何讓計(jì)算機(jī)理解呢汰聋?于是,我們需要將上面這個(gè)程序翻譯成機(jī)器能理解的模樣喊积,這時(shí)候就需要借助編譯器(如常見(jiàn)的gcc烹困、msc等)將上面的程序翻譯成MIPS指令(不同的CPU有不同的指令集,包括X86指令集注服、MIPS指令集韭邓、Sparc指令集等,我們?cè)谶@里用MIPS指令集溶弟,咱們的龍芯也是采用MIPS指令集)女淑,如下所示:

#下面的每條匯編代碼對(duì)應(yīng)一個(gè)二進(jìn)制 addi $t0, 0, 3 # a = 0+3, a保存在$t0寄存器中, 對(duì)應(yīng)的二進(jìn)制代碼為:0010 00** **** **** **** **** **** ****(這里的星號(hào)*表示二進(jìn)制辜御,這里暫時(shí)不關(guān)心) addi $t1, 0, 5 # b = 0+5, b保存在$t1寄存器中 addi $t2, $t1, $t0 # sum = a + b鸭你, sum保存在$t2寄存器中

到這里,大家一定還在疑惑擒权,不是說(shuō)要翻譯成二進(jìn)制代碼嗎袱巨?怎么是MIPS匯編語(yǔ)言?對(duì)碳抄,就是匯編語(yǔ)言愉老,這個(gè)匯編語(yǔ)言中的每一條指令就對(duì)應(yīng)一條二進(jìn)制代碼,匯編的方式更容易讓人理解剖效。

現(xiàn)在我們得到了計(jì)算機(jī)可以理解的MIPS指令(可以想象成可執(zhí)行程序)了嫉入,接下來(lái)的問(wèn)題是如何執(zhí)行MIPS指令。

要執(zhí)行程序璧尸,首先必須將可執(zhí)行程序文件(從外設(shè))加載到內(nèi)存咒林。可執(zhí)行文件加載到內(nèi)存時(shí)爷光,操作系統(tǒng)會(huì)為每個(gè)可執(zhí)行程序在內(nèi)存中分配四個(gè)區(qū):

  • 1 代碼區(qū)垫竞。也就是前面的到的匯編代碼所對(duì)應(yīng)的二進(jìn)制碼
  • 2 全局?jǐn)?shù)據(jù)區(qū)。全局變量蛀序,靜態(tài)變量放在這個(gè)區(qū)
  • 3 堆區(qū)欢瞪。表示在程序執(zhí)行過(guò)程中,動(dòng)態(tài)申請(qǐng)的空間在這個(gè)區(qū)哼拔,如C語(yǔ)言中的malloc, free操作均是針對(duì)此區(qū)中的對(duì)象執(zhí)行申請(qǐng)或釋放操作
  • 4 棧區(qū)引有。函數(shù)運(yùn)行時(shí),局部變量的保存區(qū)域倦逐。

我們重點(diǎn)關(guān)注代碼區(qū)和棧區(qū)譬正,初始時(shí),其分布如下圖所示:

代碼區(qū)-1.png

其中PC(Program Counter)是程序計(jì)數(shù)器(是CPU中的一個(gè)寄存器檬姥,具有數(shù)據(jù)存儲(chǔ)功能)曾我,即用來(lái)指示下一個(gè)即將執(zhí)行的指令的地址,本例中健民,進(jìn)入main函數(shù)后抒巢,即將執(zhí)行的第一條指令是a = 3,其地址為:0X FF FF FF 00, 因此PC指向其對(duì)應(yīng)的匯編代碼的地址秉犹。

CPU根據(jù)PC的的值蛉谜,從指定地址0X FF FF FF 00處獲取指令稚晚,然后解析指令,并執(zhí)行指令(即執(zhí)行a=3)型诚。

當(dāng)a = 0執(zhí)行完畢后客燕,PC執(zhí)行操作:PC = PC + 4,PC指向0X FF FF FF 04狰贯,即b = 5的指令的地址也搓。此時(shí),棧區(qū)的狀態(tài)為:


棧區(qū)-1.png

接著涵紊,CPU根據(jù)PC的的值傍妒,從指定地址0X FF FF FF 04處獲取指令,然后解析指令摸柄,并執(zhí)行指令(即執(zhí)行b=5)颤练。當(dāng)b=5執(zhí)行完畢后,PC執(zhí)行操作:PC = PC + 4塘幅,PC指向0X FF FF FF 08昔案,即sum=a+b的指令的地址。此時(shí)电媳,棧區(qū)的狀態(tài)為:

棧區(qū)-2.png

然后踏揣,CPU根據(jù)PC的的值,從指定地址0X FF FF FF 08處獲取指令匾乓,然后解析指令捞稿,并執(zhí)行指令(即執(zhí)行sum=a+b)。當(dāng)sum=a+b執(zhí)行完畢后拼缝,PC執(zhí)行操作:PC = PC + 4娱局,PC指向0X FF FF FF 12(因?yàn)椋噶钜呀?jīng)執(zhí)行完畢咧七,這里應(yīng)該提示要從main函數(shù)返回)衰齐。此時(shí),棧區(qū)的狀態(tài)為:


棧區(qū)-3.png

至此為止继阻,main函數(shù)內(nèi)部的流程基本上陳述完了(關(guān)于函數(shù)間調(diào)用耻涛,相對(duì)復(fù)雜,計(jì)算機(jī)組成中會(huì)詳細(xì)講解)瘟檩,但如何實(shí)現(xiàn)這些步驟呢抹缕,其中的關(guān)鍵問(wèn)題包括如下:


問(wèn)題:

  • 知道內(nèi)存地址,如何定位到那個(gè)地址墨辛?卓研??答案:地址譯碼器
  • 獲取到a=3對(duì)應(yīng)的指令后,如何知道是做a=0+3的操作奏赘?寥闪??答案:解析指令磨淌,指令譯碼器
  • PC寄存器如何保存值橙垢?如何做加4操作?答案:計(jì)數(shù)器(寄存器講解)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末伦糯,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子嗽元,更是在濱河造成了極大的恐慌敛纲,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件剂癌,死亡現(xiàn)場(chǎng)離奇詭異淤翔,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)佩谷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門旁壮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人谐檀,你說(shuō)我怎么就攤上這事抡谐。” “怎么了桐猬?”我有些...
    開(kāi)封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵麦撵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我溃肪,道長(zhǎng)免胃,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任惫撰,我火速辦了婚禮羔沙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘厨钻。我一直安慰自己扼雏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布莉撇。 她就那樣靜靜地躺著呢蛤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪棍郎。 梳的紋絲不亂的頭發(fā)上其障,一...
    開(kāi)封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音涂佃,去河邊找鬼励翼。 笑死蜈敢,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的汽抚。 我是一名探鬼主播抓狭,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼造烁!你這毒婦竟也來(lái)了否过?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤惭蟋,失蹤者是張志新(化名)和其女友劉穎苗桂,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體告组,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡煤伟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了木缝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片便锨。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖我碟,靈堂內(nèi)的尸體忽然破棺而出放案,到底是詐尸還是另有隱情,我是刑警寧澤矫俺,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布卿叽,位于F島的核電站,受9級(jí)特大地震影響恳守,放射性物質(zhì)發(fā)生泄漏考婴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一催烘、第九天 我趴在偏房一處隱蔽的房頂上張望沥阱。 院中可真熱鬧,春花似錦伊群、人聲如沸考杉。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)崇棠。三九已至,卻和暖如春丸卷,著一層夾襖步出監(jiān)牢的瞬間枕稀,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留萎坷,地道東北人凹联。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像哆档,于是被迫代替她去往敵國(guó)和親蔽挠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容