廣東東莞疫情風(fēng)險(xiǎn)等級(jí)保定seo排名
課程鏈接:
計(jì)算機(jī)組成_北京大學(xué)_中國大學(xué)MOOC(慕課)
2 - 1 - 201-設(shè)計(jì)自己的計(jì)算機(jī)(14‘24’‘)_嗶哩嗶哩_bilibili
什么是指令系統(tǒng)體系結(jié)構(gòu)?這個(gè)問題其實(shí)非常簡單,但要想解釋清楚也沒有那么容易。我們還是從一個(gè)小故事開始吧。
有一天有兩個(gè)小伙伴碰了面,發(fā)現(xiàn)對(duì)方都很愁苦,溝通后發(fā)現(xiàn)雙方都碰到了一些運(yùn)算上的問題,于是兩人一拍即合,準(zhǔn)備一起解決這個(gè)問題。怎么解決呢?不如一起設(shè)計(jì)一個(gè)計(jì)算機(jī)吧。那怎么分工呢?一個(gè)小伙伴說:我是軟件程序猿,我來編寫如何運(yùn)算的軟件指令。另一個(gè)小伙伴說:那正好,我是硬件攻城獅,我來設(shè)計(jì)計(jì)算機(jī)的硬件,主要是CPU。
OK, 那我們就分頭干活吧!
真的就可以這么開始了嗎?怎么保證軟件程序猿寫的軟件就能在硬件攻城獅設(shè)計(jì)的硬件上運(yùn)行起來呢?所以他們還得商量商量,把共同的接口定義好,然后才能分頭去設(shè)計(jì)軟件和硬件。
那他們要商量的共同的接口,就是指令系統(tǒng)體系結(jié)構(gòu)。
他們面臨的計(jì)算任務(wù)并不復(fù)雜,所以只需要一個(gè)簡單的指令系統(tǒng)就可以了。看上去需要一個(gè)加法,所以先設(shè)計(jì)一個(gè)加法指令,另外存儲(chǔ)器和寄存器之間的數(shù)據(jù)傳送需要兩條指令:LOAD和STORE。另外由于CPU是按照PC寄存器++來順序執(zhí)行指令的,有時(shí)候我們可能需要跳轉(zhuǎn)到其他位置執(zhí)行,這樣的話就還需要一條跳轉(zhuǎn)指令JMP。
這樣我們就設(shè)計(jì)出了一個(gè)簡單的計(jì)算機(jī)指令系統(tǒng),能夠滿足當(dāng)前所需要進(jìn)行的運(yùn)算。
但是這個(gè)用英文單詞和字母描述的指令并不是計(jì)算機(jī)能識(shí)別的二進(jìn)制代碼,因此我們還要做進(jìn)一步的規(guī)定。
我們約定每條指令都是等長的,都是2個(gè)字節(jié)。其中第一個(gè)字節(jié)的高4位是操作碼,我們目前支持4種操作,所以只用到了其中的2位,實(shí)際上可以擴(kuò)展到16個(gè)操作。第一個(gè)字節(jié)的低4位是寄存器號(hào),我們約定目前只提供4個(gè)寄存器(R0~R3),實(shí)際上可以擴(kuò)展到16個(gè)寄存器。第二個(gè)字節(jié)是存儲(chǔ)單元地址,一共8位,所以可以索引256個(gè)存儲(chǔ)器。
在約定好指令格式以后,我們?cè)賮砜匆粋€(gè)可以執(zhí)行的任務(wù)的例子。
基于這樣的任務(wù),軟件程序猿就可以編寫出下面的機(jī)器語言程序。當(dāng)然直接編寫機(jī)器語言程序是非常困難的,隨著計(jì)算機(jī)技術(shù)的發(fā)展,我們現(xiàn)在可以通過編寫高級(jí)語言程序,再通過編譯器轉(zhuǎn)換成匯編語言程序,最后再轉(zhuǎn)換成機(jī)器語言程序。
現(xiàn)在我們已經(jīng)寫好了一個(gè)程序,根據(jù)馮·諾依曼計(jì)算機(jī)存儲(chǔ)程序的概念,我們把這個(gè)程序放到存儲(chǔ)器當(dāng)中。這里僅展示存儲(chǔ)器的一個(gè)片段,即存儲(chǔ)器的地址為5~18的存儲(chǔ)單元中的內(nèi)容。
與此同時(shí),硬件攻城獅也完成了CPU的設(shè)計(jì),并將CPU和存儲(chǔ)器進(jìn)行連接,構(gòu)建出了完整的計(jì)算機(jī)系統(tǒng)。(為了便于理解,存儲(chǔ)器中的內(nèi)容還是以匯編代碼的形式呈現(xiàn)。)
此時(shí),如果CPU中的PC寄存器已經(jīng)裝入了0000 1000的地址,那么接下來的指令執(zhí)行過程,我們已經(jīng)很熟悉了。
現(xiàn)在我們已經(jīng)對(duì)什么是指令系統(tǒng)體系結(jié)構(gòu)有了初步了解,也知道了如何開始著手設(shè)計(jì)一個(gè)屬于自己的計(jì)算機(jī)。下一節(jié)我們將分析一些真實(shí)的體系結(jié)構(gòu)。