與java相關(guān)的
看示例找感覺(jué)
以上是一些結(jié)論,本文的重點(diǎn)是討論上文中所提的寄存器,那寄存器是什么呢?其實(shí)這些計(jì)算機(jī)的原理知識(shí)之前上學(xué)的時(shí)候都學(xué)過(guò),很遺憾當(dāng)時(shí)聽(tīng)的也很頭大,現(xiàn)在都還給老師了。
進(jìn)入正題,先來(lái)看下維基百科的解釋?zhuān)?/p>
嗯,反正我看完是沒(méi)什么感覺(jué)
再來(lái)看網(wǎng)上的一個(gè)例子:
“現(xiàn)代計(jì)算機(jī),雖然性能很高,但是和上世紀(jì)7、8十年代的計(jì)算機(jī)比,其實(shí)結(jié)構(gòu)都差不多?,F(xiàn)在講存儲(chǔ),一般講有內(nèi)存和外存,內(nèi)存一般有寄存器(register),緩存(cache)和內(nèi)存(memory),有些小型應(yīng)用例如MCU沒(méi)有cache,甚至沒(méi)有memory——直接從flash/ROM到register。寄存器是CPU基礎(chǔ)單元,CPU直接處理的內(nèi)存就它了,好比醫(yī)院,醫(yī)生對(duì)面的椅子就是寄存器,要看病的病人(data)就坐這個(gè)椅子(register);已經(jīng)掛號(hào)的(data)進(jìn)入診室(cache)排隊(duì),其他的就在醫(yī)院里(memory)。醫(yī)生可以操作的就是面對(duì)面的病人,其他人要看?。ㄈ缂辈。┮残柘茸线@個(gè)位置,這是最快的。診室里的座位相對(duì)于cache,一般cache都是sram存儲(chǔ)器,速度很快,但一般cpu不會(huì)直接訪問(wèn),而是要把數(shù)據(jù)挪到register后才可直接操作,而一般的內(nèi)存為DRAM,速度比SRAM慢多了,而且通過(guò)總線訪問(wèn),速度就更慢了?!?/p>
再看下圖:計(jì)算機(jī)的存儲(chǔ)層次(memory hierarchy)之中,寄存器(register)最快,內(nèi)存其次,最慢的是硬盤(pán)。
最后再看一個(gè)計(jì)算機(jī)的存儲(chǔ)體系:
圖中Registers就是寄存器,怎么樣,有點(diǎn)感覺(jué)了嗎?
從頭來(lái)說(shuō)
假設(shè)我們做一個(gè)回向電路,把輸出連回到輸入,我們用OR門(mén)舉例:
首先都輸入0,那么輸出將會(huì)是0
如果將A變成1,那么輸出將會(huì)是1
一轉(zhuǎn)眼的功夫輸出回到B,那么B為1,OR門(mén)看到的結(jié)果是輸入A、B都為1,
1 OR 1 仍然為1,所以輸出不變
如果將A變成0,0 OR 1 輸出仍然是 1
現(xiàn)在我們有個(gè)電路能記錄1,然而卻有個(gè)小問(wèn)題,就是無(wú)論怎么試,都無(wú)法從1變回0(如下兩圖)
現(xiàn)在看一個(gè)相同電路,不過(guò)這次用AND 門(mén)
A、B均為1, 1 AND 1 為 1
如果之后A設(shè)置為0,由于是AND門(mén),所以輸出為0,B為0
這個(gè)電路能記錄0,和之前那個(gè)相反,無(wú)論A設(shè)置什么值,電路始終輸出0
現(xiàn)在我們有了能記錄0和1的電路
為了做出有用的存儲(chǔ),我們將兩個(gè)電路合起來(lái),變成:AND-OR LATCH
它有兩個(gè)輸入:
如果“設(shè)置”和“復(fù)位”都是0,電路會(huì)輸出最后放入的內(nèi)容,也就是說(shuō)它存住了1bit的信息!這就是存儲(chǔ)。
之所以叫“LATCH(閂鎖)”,是因?yàn)樗版i定”一個(gè)特定值并保持狀態(tài)。將數(shù)據(jù)放入叫“寫(xiě)入”,將數(shù)據(jù)輸出叫“讀取”。好了,現(xiàn)在我們終于有辦法存一個(gè)bit了。
麻煩的是用兩條線來(lái)輸入,也就是SET和RESET,有點(diǎn)兒麻煩,為了更易用,我們希望只有一條輸入線,將它設(shè)為0或1來(lái)存儲(chǔ)值。還需要一根線來(lái)“啟用”?!皢⒂谩睍r(shí)允許寫(xiě)入,沒(méi)“啟用”時(shí)鎖定。這條線叫“允許寫(xiě)入線”。加一些額外邏輯門(mén),可以做出以下電路 :
這個(gè)電路稱(chēng)為“門(mén)鎖”,因?yàn)殚T(mén)可以打開(kāi)或關(guān)上。這個(gè)電路稍微有些復(fù)雜了。
我們不想關(guān)心單獨(dú)的邏輯門(mén),我們封裝一下,把“門(mén)鎖”放到盒子里(一個(gè)能存單個(gè)bit的盒子)。來(lái)看下這個(gè)新組件:
我們來(lái)測(cè)試一下這個(gè)新組件,一切都從0開(kāi)始,如果將輸入從0變成1,或從1變成0,什么也不會(huì)發(fā)生,輸出仍然是0 。因?yàn)閃RITE ENABLE 是關(guān)閉的(0),來(lái)防止內(nèi)容變化
所以當(dāng)WRITE ENABLE輸入1,打開(kāi)門(mén)后可以輸入1,并將1存起來(lái),這樣輸出也是1了。
我們可以關(guān)掉門(mén)(WRITE ENABLE =0),輸出會(huì)保持1,此時(shí)輸入隨便是什么,輸出都不會(huì)變(保持1)。
如果再次打開(kāi)門(mén)(WRITE ENABLE =1),如果輸入為0,輸出也將是0:
最后關(guān)上門(mén),輸出會(huì)保持0
當(dāng)然存1bit沒(méi)什么大用,但我們沒(méi)限制只能用一個(gè)組件,如果我們并排放8個(gè),可以存8位,比如一個(gè)8bit數(shù)字。一組這樣的組件叫寄存器。寄存器能存多少個(gè)Bit,叫“位寬”。早期電腦用8位寄存器,然后是16位,32位,如今很多計(jì)算機(jī)都有64位寬的寄存器了。
CPU中寄存器又分為指令寄存器(IR)、程序計(jì)數(shù)器(PC)、地址寄存器(AR)、數(shù)據(jù)寄存器(DR)、累加寄存器(AC)、程序狀態(tài)字寄存器(PSW),這里就不深入討論了。
參考 :
http://www.ruanyifeng.com/blog/2013/10/register.html
https://www.youtube.com/watch?v=fpnE6UAfbtU
https://www.youtube.com/watch?v=cNN_tTXABUA
https://www.youtube.com/watch?time_continue=132&v=TBADs7knuWM&feature=emb_logo
https://www.toutiao.com/a6797337478492586499/
https://www.toutiao.com/a6797337478492586499/
聯(lián)系客服