最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

第六章-計(jì)算機(jī)體系結(jié)構(gòu)

2023-01-12 21:49 作者:開發(fā)員阿夢(mèng)  | 我要投稿

《數(shù)字設(shè)計(jì)和計(jì)算機(jī)體系結(jié)構(gòu)》是一本自底向上來介紹計(jì)算機(jī)組成的優(yōu)秀參考書。配合教材食用更佳。

?

第五章介紹完成基本的數(shù)字電路模塊以及其Verilog編程實(shí)現(xiàn)之后,在第六章開始介紹計(jì)算機(jī)的體系結(jié)構(gòu)。

?

體系結(jié)構(gòu)

體系結(jié)構(gòu)就是程序員所見到的計(jì)算機(jī),由指令集(匯編語言)和操作數(shù)地址來定義。

指令集也就是一套匯編語言的標(biāo)準(zhǔn),匯編語言最終會(huì)被匯編為機(jī)器代碼;

根據(jù)指令的不同,操作數(shù)可能在寄存器中也可能在存儲(chǔ)器中。操作數(shù)的地址也就對(duì)應(yīng)著寄存器和存儲(chǔ)器。

?

指令集

指令集就是指揮計(jì)算機(jī)工作的一組指令。本章介紹了一種簡(jiǎn)單體系結(jié)構(gòu),MIPS。MIPS計(jì)算機(jī)屬于精簡(jiǎn)指令集計(jì)算機(jī),也就是我常聽到的RISC (Reduced Instruction Set Computer)。相對(duì)的,一般電腦常用的Intel x86體系結(jié)構(gòu)屬于復(fù)雜指令集計(jì)算機(jī),CISC (Complex Instruction Set Computer)。精簡(jiǎn)不精簡(jiǎn),直觀地理解就是,RISC中定義的指令是基本的裝載、存儲(chǔ)、加減乘除、邏輯運(yùn)算等,更復(fù)雜的操作如“字符串移動(dòng)”,在處理器中會(huì)使用多條基本的指令實(shí)現(xiàn);而x86中可能會(huì)專門定義一個(gè)指令叫做“字符串移動(dòng)”來實(shí)現(xiàn)此功能。顯然,RISC指令集確實(shí)精簡(jiǎn),但是每個(gè)操作對(duì)應(yīng)的指令數(shù)量,或者說程序代碼被翻譯為機(jī)器代碼后的長(zhǎng)度,會(huì)很大;CISC雖然定義了很多細(xì)化、復(fù)雜的指令,開發(fā)難度也大,但是其能夠使用較少的指令實(shí)現(xiàn)復(fù)雜的操作。而且在現(xiàn)實(shí)使用中由于Intel x86前后兼容性好,雖然有很多冗余的指令,但是x86所占的市場(chǎng)份額還是難以撼動(dòng)的。

?

匯編語言

指令本質(zhì)上還是一串0/1串,也就是機(jī)器代碼。為這種機(jī)器代碼定義一套語法規(guī)則,用人類可讀的方式表示出來,這就是匯編語言。

匯編語言由三部分組成:助記符、源操作數(shù)(可能多個(gè))、目的操作數(shù)。

指令有數(shù)個(gè)分類,每種分類都有其指令的格式;匯編語言為了便于人類理解,也有其定義的格式;匯編語言中源操作數(shù)的順序可能與指令中的格式不一樣。

?

?

操作數(shù)

在計(jì)算機(jī)體系結(jié)構(gòu)中,另一個(gè)重要的部分是操作數(shù)。操作數(shù)有多種存儲(chǔ)方式,可以被存儲(chǔ)在寄存器、存儲(chǔ)器以及指令中。存儲(chǔ)在指令中的操作數(shù)被稱為立即數(shù)。在匯編語言中,除了存儲(chǔ)在指令中的立即數(shù),對(duì)其他立即數(shù)的操作多指的是對(duì)操作數(shù)所在的寄存器和存儲(chǔ)器的地址進(jìn)行操作——也就是先從某個(gè)地址的寄存器和存儲(chǔ)器將操作數(shù)取出。MIPS體系結(jié)構(gòu)中定義的字長(zhǎng)為32位或者64位,這里只討論了32位的情況。存儲(chǔ)器的訪問速度很慢,所以存儲(chǔ)器中取出操作數(shù)速度也很慢。執(zhí)行指令的處理器訪問寄存器和立即數(shù)的速度很快。

寄存器

在MIPS體系結(jié)構(gòu)中定義了32個(gè)寄存器,稱為寄存器文件(register file)或者寄存器集(register set)。從寄存器讀取操作數(shù)的速度快的原因是,寄存器在物理上一般使用小SRAM陣列創(chuàng)建,其使用較小的譯碼器,較少的位線,連接到較少的存儲(chǔ)單元,所以與大的存儲(chǔ)器相比,其具有更短的關(guān)鍵路徑,時(shí)延小[P183]。

這32個(gè)寄存器也屬于通用寄存器。32個(gè)寄存器有多個(gè)分類[P184]。

存儲(chǔ)器

注意,在MIPS體系結(jié)構(gòu)中,指令是按照字節(jié)尋址的。也就是說,在MIPS中,單個(gè)地址的長(zhǎng)度是一個(gè)字節(jié)。但是指令的長(zhǎng)度為32位,也就是一個(gè)MIPS中的一個(gè)字長(zhǎng)。因此MIPS一條指令的長(zhǎng)度為4字節(jié),尤其是對(duì)于跳轉(zhuǎn)指令,這個(gè)特征十分重要。比如匯編語言中的跳轉(zhuǎn)指令J,其操作數(shù)為跳轉(zhuǎn)的地址數(shù),但是跳轉(zhuǎn)的地址是字長(zhǎng)對(duì)齊的,所以操作數(shù)最小值為0x100,也就是最低兩位一定為0。

?

指令的分類

要知道幾種基本的指令類型,其使用的操作數(shù),其用到了寄存器或是存儲(chǔ)器,其指令中的格式:哪幾位是源操作數(shù)、哪幾位是目的操作數(shù);立即數(shù)在哪兒、操作誰的值,最后存儲(chǔ)在哪兒。這些問題不難搞懂;這些內(nèi)容直接指導(dǎo)后續(xù)對(duì)微體系結(jié)構(gòu)的設(shè)計(jì)。同時(shí)注意,計(jì)算機(jī)中的數(shù)都以補(bǔ)碼存儲(chǔ)?;痉绞剑赫龜?shù)原碼與補(bǔ)碼相同;負(fù)補(bǔ)碼為正值按位取反后加1。負(fù)數(shù)補(bǔ)碼算原值也是將補(bǔ)碼按位取反后加1,算出正值,然后加上負(fù)號(hào)。

R型指令

R就是Register的縮寫。顧名思義就是使用寄存器的指令。該類型指令有三個(gè)寄存器操作數(shù):兩個(gè)源操作數(shù)????? rs,rt;一個(gè)目的操作數(shù) rd。

R類型指令對(duì)應(yīng)的匯編語言格式為:

助記符+rd+rs+rt,

操作順序是rs?rt→rd,?代表MIPS定義的任意二元運(yùn)算。

32位的指令格式是:

注意,R型指令的opcode都一樣,都是6位全0。具體是什么操作由指令中的funct字段決定。

指令舉例:

其中add指令執(zhí)行 s0=s1+s2;

sub指令執(zhí)行 t0=t3-t5。

?

I型指令

對(duì)應(yīng)匯編語言格式:

助記符+rt+rs+立即數(shù)。

I就是immediate的縮寫,顧名思義就是用到了指令中立即數(shù)的指令。有三個(gè)操作數(shù),兩個(gè)為寄存器,另外一個(gè)為指令中的立即數(shù)。32位指令格式如下。

沒錯(cuò),這里可以發(fā)現(xiàn),指令格式中的rs與rt順序和匯編格式中相反。

其中立即數(shù)的長(zhǎng)度為16位,但是立即數(shù)一般會(huì)用于和寄存器或者存儲(chǔ)器中存儲(chǔ)的32位數(shù)進(jìn)行運(yùn)算,因此MIPS中的指令對(duì)立即數(shù)進(jìn)行符號(hào)擴(kuò)展,也就是整數(shù)高位補(bǔ)0,負(fù)補(bǔ)1。除此外,部分邏輯操作采用0擴(kuò)展。

指令舉例如下:

其中addi干的事兒是:

s0=s1+5;

t0=s3-12

lw,即load word,是將存儲(chǔ)器中的一個(gè)字的數(shù)加載到寄存器中。寄存器$0存儲(chǔ)的值永遠(yuǎn)是0。$0作為存儲(chǔ)器地址的基址。$0(rs)中的值加上立即數(shù)32,得到要被讀取的存儲(chǔ)器中數(shù)據(jù)的地址。然后將存儲(chǔ)器中地址32存儲(chǔ)的數(shù)據(jù)讀出來,存儲(chǔ)到寄存器t2中。

sw,即store word,是lw反操作。寄存器s1中的值存儲(chǔ)到存儲(chǔ)器地址t1+4中。

?

J型指令

J即 jump的縮寫。用于跳轉(zhuǎn)。匯編格式為:

助記符+addr

指令格式為:


有意思的是,MIPS中的地址不是32位么?這里怎么只有26位呢?[P207]

以jal指令為例。jal指令將直接跳轉(zhuǎn)到給出的地址。

?由于J型的跳轉(zhuǎn)的步長(zhǎng)是字(4字節(jié)),也是條指令的長(zhǎng)度。但是MIPS是字節(jié)尋址的。因此jal的跳轉(zhuǎn)地址一定是4的倍數(shù),也就是最小為0x100。因此,32位的跳轉(zhuǎn)地址中,最低兩位一定是0。還差4位數(shù)才能放得下地址,咋辦?

MIPS中定義,J型指令跳轉(zhuǎn)地址的高四位,由當(dāng)前程序計(jì)數(shù)器(PC)中的地址值+4得到。也就是說,在解析J型指令時(shí),{PC+4, 26位的跳轉(zhuǎn)地址, 00}最終組成32位的跳轉(zhuǎn)地址。

?

以上是書中第六章前三節(jié)的內(nèi)容。緊接著6.4節(jié)介紹了高級(jí)語言中常見的操作的匯編實(shí)現(xiàn)。比如邏輯運(yùn)算、移位、生成常數(shù)、分支語句、循環(huán)語句、函數(shù)調(diào)用等,如何用MIPS定義的匯編語言實(shí)現(xiàn)。

6.5節(jié)(206)介紹了5種尋址方式。

6.6節(jié)(208)介紹了高級(jí)語言轉(zhuǎn)換成機(jī)器語言并最終執(zhí)行的過程。要經(jīng)過編譯(生成匯編語言)、匯編(生成包含機(jī)器語言的目標(biāo)文件)、鏈接(分開目標(biāo)文件中的數(shù)據(jù)段和代碼段)、裝入(操作系統(tǒng)讀取可執(zhí)行文件的代碼段,裝入內(nèi)存的代碼段……)。

目前先總結(jié)到這里,第六章的主要內(nèi)容總結(jié)完畢。主要是為看第七章做準(zhǔn)備,鞏固了重要內(nèi)容。如果有遺漏再補(bǔ)充。

?


第六章-計(jì)算機(jī)體系結(jié)構(gòu)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
亳州市| 朝阳县| 张掖市| 开平市| 南靖县| 太康县| 武邑县| 锡林浩特市| 许昌县| 肇庆市| 秦皇岛市| 兴仁县| 东宁县| 安义县| 唐河县| 西平县| 石狮市| 两当县| 咸阳市| 萨嘎县| 叙永县| 砚山县| 晋宁县| 册亨县| 河曲县| 渭南市| 梁平县| 滕州市| 响水县| 昌江| 景东| 衡南县| 宜丰县| 长治市| 荔波县| 胶南市| 阿图什市| 增城市| 庄河市| 海南省| 莱州市|