解碼階段
現(xiàn)在我們拿到了指令, 「前四位是操作碼」 對應(yīng)的是指令表中的LOAD A指令。對應(yīng)的描述是**「將RAM的值放入寄存器A」**
「后四位1110是RAM的內(nèi)存地址」 ,轉(zhuǎn)成十進(jìn)制就是14.
控制單元
指令通過”控制單元“進(jìn)行 「解碼」 。解碼的作用就是判斷這個(gè)操作碼對應(yīng)的操作是什么(通過少量的邏輯門即可判斷)
針對不同的操作碼有對應(yīng)的指令判斷電路從而執(zhí)行不同的操作。例如下面這個(gè)就是檢查操作碼是不是LOADA(0010)指令。
執(zhí)行階段
指令寄存器拿到數(shù)據(jù)DATA后通過控制單元進(jìn)行解碼,現(xiàn)在我們知道了這個(gè)是LOADA指令,就可以進(jìn)行執(zhí)行階段了
- 「打開RAM允許讀取線」 :我們將檢查LOADA指令的電路連接到RAM的READ ENBALE中( 「如果LOADA輸輸出為1那么READN ENANLE也是1因此就會(huì)打開RAM的允許讀取線」 ),「并把地址14傳入過去?!?/strong>
- 「讀取RAM 對應(yīng)地址的值」 :RAM拿到地址14上的值,0000 0001也就是十進(jìn)制的三
- 「RAM DATA線連接所有的寄存器」 :LOAD_A指令代表這個(gè)值存儲(chǔ)在A寄存器中并不影響其他寄存器。因此需要將RAM讀出來的值給到寄存器,所以**「RAM的DATA數(shù)據(jù)線需要將所有的寄存器都連接起來(DATA線既可以用來做輸入又可以用來做輸出使用)。」**
- 「打開指定寄存器的允許輸入線」 :用檢查“是否為LOADA指令的電路” 「打開寄存器A的允許寫入線」 (因?yàn)槭荓OADA指令,所以需要將A寄存器的允許寫入打開),這樣就將RAM中地址為14的值輸出保存到了寄存器A中。
- 「取下一條指令指令地址寄存器+1」 :執(zhí)行階段結(jié)束。開始下一個(gè)取指令階段(讀取0001的RAM地址到指令寄存器中,然后在解碼執(zhí)行........之后一直重復(fù)這個(gè)過程)
抽象--控制單元
上面解釋的只是一個(gè)LOADA指令,「不同的指令由不同的邏輯電路解碼,這些邏輯電路會(huì)配置CPU內(nèi)的組件來執(zhí)行對應(yīng)操作。這些邏輯電路太復(fù)雜我們可以把整個(gè)邏輯電路封裝為上面所說的控制單元?!?/strong>
小結(jié)
也就是下圖中的線路。可以看到控制單元 「鏈接了所有的寄存器」 (用于存放和讀取數(shù)字),和RAM鏈接的是 「允許讀取和允許輸入線」 (READ ENABLE WRITE ENABLE),還有一條線是**「ADDRESS INPUT」** ,這條線是用來告知使用的是16個(gè)地址空間中的哪個(gè)地址(比如之前的14)
上面解釋了指令表中的LOADA指令,LOADB指令和LOADA原理一致,包括STOREB也是只不過是相反過來 「打開寄存器的允許讀取和RAM的允許寫入傳入地址最后將寄存器的值通過DATA線給到RAM對應(yīng)地址」 。但是ADD指令有些不同,我們看下這個(gè)操作碼是如何做處理的。
參考資料
[1]https://juejin.cn/post/7134166674160222221/:https://juejin.cn/post/7134166674160222221/
-
寄存器
+關(guān)注
關(guān)注
31文章
5294瀏覽量
119814 -
cpu
+關(guān)注
關(guān)注
68文章
10804瀏覽量
210829 -
RAM
+關(guān)注
關(guān)注
8文章
1354瀏覽量
114443 -
ALU
+關(guān)注
關(guān)注
0文章
33瀏覽量
13070
發(fā)布評論請先 登錄
相關(guān)推薦
評論