求職網(wǎng)站開發(fā)十大職業(yè)資格培訓(xùn)機(jī)構(gòu)
來都來了點(diǎn)個(gè)贊收藏關(guān)注一下再走唄🌹🌹🌹🌹
第1章:緒論
1.馮·諾依曼機(jī)特點(diǎn),與現(xiàn)代計(jì)算機(jī)的區(qū)別
馮諾依曼計(jì)算機(jī)的基本思想是:程序和數(shù)據(jù)以二進(jìn)制形式表示,存儲(chǔ)程序控制。在計(jì)算機(jī)中,事先將程序(包含指令和數(shù)據(jù))存入主存儲(chǔ)器中,計(jì)算機(jī)在運(yùn)行程序時(shí)就能自動(dòng)地、連續(xù)地從存儲(chǔ)器中依次取出指令且執(zhí)行;而數(shù)據(jù)和指令都是以二進(jìn)制形式存儲(chǔ)在存儲(chǔ)器中的。
馮諾依曼計(jì)算機(jī)由五部分組成:
(1)輸入設(shè)備
? ? ? ? 輸入設(shè)備的主要功能是將程序和數(shù)據(jù)以機(jī)器所能識(shí)別和接收的信息形式輸入到計(jì)算機(jī),例如:鍵盤、鼠標(biāo)、攝像機(jī)
(2)輸出設(shè)備
? ? ? ? 輸出設(shè)備的任務(wù)主要是將計(jì)算機(jī)處理的結(jié)果以人們可以接收的形式和其他系統(tǒng)所要求的信息形式輸出,例如:顯示器,打印機(jī)。
(3)存儲(chǔ)器
? ? ? ?存儲(chǔ)器由主存儲(chǔ)器和輔助存儲(chǔ)器組成。cpu可以直接訪問的是主儲(chǔ)存器,主儲(chǔ)存器的工作方式是按照存儲(chǔ)單元的地址進(jìn)行存取的,這叫按照地址存取。
? ? ? ? 主存儲(chǔ)器:地址寄存器(MAR),數(shù)據(jù)寄存器(MDR),存儲(chǔ)體
? ? ? ? MAR:用于尋址,地址進(jìn)行編譯后找到對(duì)應(yīng)的存儲(chǔ)單元,MAR和地址碼長度的長度是一致的,MAR有n位,則有2^n個(gè)存儲(chǔ)單元。
? ? ? ? MDR:用于暫存要從存儲(chǔ)器讀寫的信息,長度為存儲(chǔ)字長
(4)運(yùn)算器
? ? ? ? 運(yùn)算器是計(jì)算機(jī)的執(zhí)行部件,用于進(jìn)行算術(shù)運(yùn)算和邏輯運(yùn)算
(5)控制器
? ? ? ? 控制器由,程序計(jì)數(shù)器PC、指令寄存器IR、控制單元CU組成
? ? ? ? PC:用來存放當(dāng)前與執(zhí)行指令地址,具體自動(dòng)加1就可以得到下一條要執(zhí)行指令地址
? ? ? ? IR:用來存放當(dāng)前指令,內(nèi)容來自MDR
? ? 控制器的實(shí)質(zhì)就是解釋程序,它每次從存儲(chǔ)器中讀取一條指令,存入指令寄存器中,通過指令譯碼器進(jìn)行譯碼(分析),以確定應(yīng)該進(jìn)行什么操作,再由控制邏輯根據(jù)分析的結(jié)果(譯碼信號(hào))產(chǎn)生一系列的控制信號(hào)(又稱為微命令),發(fā)向各個(gè)部件以控制它們執(zhí)行指令所規(guī)定的操作。連續(xù)不斷、有條不紊地繼續(xù)上述動(dòng)作,即所謂執(zhí)行程序。
因此,控制器的主要任務(wù)有兩項(xiàng):一是按照程序要求,控制程序中指令的執(zhí)行順序;二是根據(jù)指令寄存器中的指令碼控制每一條指令的執(zhí)行。鑒于控制器的上述功能,它主要由微命令發(fā)生器和一些專用的寄存器組成。
馮·諾依曼機(jī)的主要特點(diǎn)包括:
數(shù)字計(jì)算機(jī)的數(shù)制采用二進(jìn)制。
計(jì)算機(jī)應(yīng)按照程序順序執(zhí)行。
指令和數(shù)據(jù)以同等地位存于存儲(chǔ)器內(nèi),并可按地址尋訪。
指令和數(shù)據(jù)均用二進(jìn)制代碼表示,指令由操作碼和地址碼組成。操作碼表示操作性質(zhì),地址碼表示操作數(shù)在存儲(chǔ)器中的位置。
指令在存儲(chǔ)器內(nèi)按順序存放,通常指令是順序執(zhí)行的,但在特定條件下,可根據(jù)運(yùn)算結(jié)果或設(shè)定條件改變執(zhí)行順序。
計(jì)算機(jī)硬件系統(tǒng)由運(yùn)算器、存儲(chǔ)器、控制器、輸入設(shè)備和輸出設(shè)備五大部件組成,其中運(yùn)算器是中心,控制器通過控制線與各個(gè)部件通信。
????????現(xiàn)代計(jì)算機(jī)與馮·諾依曼機(jī)的區(qū)別在于,現(xiàn)代計(jì)算機(jī)已經(jīng)發(fā)展為以存儲(chǔ)器為中心,使I/O操作盡可能地繞過CPU直接在設(shè)備和存儲(chǔ)器之間完成,以提高系統(tǒng)的整體運(yùn)行效率。這與馮·諾依曼機(jī)早期以運(yùn)算器為中心的設(shè)計(jì)有所不同。
????????另外,還有一些具體的存儲(chǔ)和架構(gòu)設(shè)計(jì)上的差異。例如,哈佛結(jié)構(gòu)是為了高速數(shù)據(jù)處理而采用的,因?yàn)榭梢酝瑫r(shí)讀取指令和數(shù)據(jù)(分開存儲(chǔ)的),大大提高了數(shù)據(jù)吞吐率,但結(jié)構(gòu)相對(duì)復(fù)雜。而通用微機(jī)指令和數(shù)據(jù)是混合存儲(chǔ)的,結(jié)構(gòu)簡單且成本低。
2.計(jì)算機(jī)的層次結(jié)構(gòu)
計(jì)算機(jī)的組成:硬件和軟件
???計(jì)算機(jī)系統(tǒng)的五大層次結(jié)構(gòu):微指令機(jī)器、機(jī)器語言機(jī)器、操作系統(tǒng)機(jī)器、匯編語言機(jī)器、高級(jí)語言機(jī)器
三種級(jí)別的語言和對(duì)應(yīng)程序:高級(jí)語言、匯編語言、機(jī)器語言(編譯程序和解釋程序)
我們編寫的高級(jí)語言需要被編譯程序或解釋程序翻譯成匯編語言或機(jī)器語言
??編譯程序:一次性將高級(jí)語言翻譯成機(jī)器語言程序,如整體翻譯(編譯語言:C、C++)
??解釋程序:一句一句將高級(jí)語言翻譯成機(jī)器語言程序,如同聲傳譯(解釋語言:JavaScript、Python、Shell)
3.計(jì)算機(jī)的特點(diǎn)
1.能在程序控制下自動(dòng)連續(xù)地工作
2.運(yùn)算速度快
3.運(yùn)算精度高
4.具有很強(qiáng)的幸喜存儲(chǔ)能力
5.通用性強(qiáng),應(yīng)用領(lǐng)域廣
(1)機(jī)器字長
計(jì)算機(jī)進(jìn)行一次定點(diǎn)整數(shù)運(yùn)算所能處理的二進(jìn)制數(shù)據(jù)的位數(shù),機(jī)器字長一般與計(jì)算機(jī)內(nèi)部的寄存器的大小是相等的。機(jī)器字長越長,可表示的數(shù)的范圍就越大,計(jì)算機(jī)的精度就越高;
(2)數(shù)據(jù)通路帶寬
指外部數(shù)據(jù)總線一次所能并行傳送信息的位數(shù);
(3)主存容量
主存容量是指主存所能存儲(chǔ)信息的最大容量,可以字、字節(jié)等衡量,可用“字?jǐn)?shù) x 字長”表示存儲(chǔ)容量的大小;
第一章習(xí)題
1、完整的計(jì)算機(jī)系統(tǒng)應(yīng)該包括
A. 運(yùn)算器、存儲(chǔ)器、控制器
B. 外部設(shè)備和主機(jī)
C.主機(jī)和應(yīng)用程序
D. 配套的硬件設(shè)備和軟件系統(tǒng)
答案:D
計(jì)算機(jī)系統(tǒng)是由硬件和軟件構(gòu)成的?
2. 馮?諾依曼機(jī)的基本工作方式是
A. 控制流驅(qū)動(dòng)方式
B. 多指令多數(shù)據(jù)流方式
C. 微程序控制方式
D. 數(shù)據(jù)流驅(qū)動(dòng)方式
答案:A
?馮?諾依曼機(jī)最主要的特征是采用”存儲(chǔ)系統(tǒng)“原理,是控制流驅(qū)動(dòng)的方式
3.下列是馮?諾依曼機(jī)工作方式的基本特點(diǎn)。
A. 多指令流單數(shù)據(jù)流
B. 按地址訪問并順序執(zhí)行指令
C. 堆棧操作
D. 存儲(chǔ)器按內(nèi)容選擇地址
?答案:B
馮?諾依曼機(jī)是按照內(nèi)存中存儲(chǔ)的程序順序的執(zhí)行指令,存儲(chǔ)程序的闡述答案B
4. 以下說法錯(cuò)誤的是()。
A. 硬盤是外部設(shè)備
B. 軟件的功能與硬件的功能在邏輯上是等價(jià)的心
C. 硬件實(shí)現(xiàn)的功能一般比軟件實(shí)現(xiàn)具有更高的執(zhí)行速度
D. 軟件的功能不能用硬件取代
?答案:D
硬件和軟件在邏輯上都有等價(jià)性,很多在軟件上可以實(shí)現(xiàn)的功能在硬件上也可以實(shí)現(xiàn),但是硬件實(shí)現(xiàn)的成本比較低,通常就優(yōu)先采用硬件實(shí)現(xiàn)
5. 存放當(dāng)前執(zhí)行指令的寄存器是()。
A. MAR
B. PC
C. MDR
D. IR
?答案:D
IR是指令寄存器、PC是存放的下一條指令的地址、MAR用來存放預(yù)訪問的存儲(chǔ)單元地址,MDR存放從存儲(chǔ)單元取出來的數(shù)據(jù)
6. 在 CPU 中,跟蹤下一條要執(zhí)行的指令的地址的寄存器是()。
A. PC
B. MAR
C. MDR
D.IR
?答案:A
解釋如上題所示
7. CPU 不包括()
A. 地址寄存器
C. 地址譯碼器
B. 指令寄存器(IR)
D. 通用寄存器
?答案:C
地址譯碼器是主存的部分
8.MAR 和MDR 的位數(shù)分別為()
A. 地址碼長度、存儲(chǔ)字長
C. 地址碼長度、地址碼長度
B. 存儲(chǔ)字長、存儲(chǔ)字長
D. 存儲(chǔ)字長、地址碼長度
答案:A
MAR是地址寄存器、MDR是數(shù)據(jù)寄存器,所以答案就顯而易見了
9. 在運(yùn)算器中,不包含()。
A. 狀態(tài)寄存器 B. 數(shù)據(jù)總線
C. ALU? ? ? ? ? ??D. 地址寄存器
答案:D
地址寄存器是在CPU當(dāng)中的
10. 下列關(guān)于 CPU 存取速度的比較中,正確的是()
A. Cache>內(nèi)存>寄存器
B. Cache>寄存器>內(nèi)存
C. 寄存器>Cache>內(nèi)存
D. 寄存器>內(nèi)存>Cache
答案:C
寄存器在Cpu內(nèi)部是cpu訪問最快的,cache是用在寄存器和內(nèi)存之間的,內(nèi)存的訪問速度是最慢的。
11. 若一個(gè)8位的計(jì)算機(jī)系統(tǒng)以16 位來表示地址,則該計(jì)算機(jī)系統(tǒng)有()個(gè)地址空間。
A. 256
B. 65535
C. 65536
D. 131072
答案:C
16 位來表示地址,也就是2^16個(gè)地址空間
2^16=65536
12.() 是程序運(yùn)行時(shí)的存儲(chǔ)位置,包括所需的數(shù)據(jù)。
A. 數(shù)據(jù)通路
B. 主存
C. 硬盤
D. 操作系統(tǒng)
答案:B
13. 下列()屬于應(yīng)用軟件。
A. 操作系統(tǒng)
B. 編譯程序
C. 連接程序
D. 文本處理
答案:D
14.關(guān)于編譯程序和解釋程序,下列說法中錯(cuò)誤的是 ()
A. 編譯程序和解釋程序的作用都是將高級(jí)語言程序轉(zhuǎn)換成機(jī)器語言程序
B. 編譯程序編譯時(shí)間較長,運(yùn)行速度較快
C.解釋程序方法較簡單,運(yùn)行速度也較快
D. 解釋程序?qū)⒃闯绦蚍g成機(jī)器語言,并且翻譯一條以后,立即執(zhí)行這條語句
答案:C
解釋程序要一邊翻譯一邊執(zhí)行速度較慢
15.可以在計(jì)算機(jī)中直接執(zhí)行的語言和用助記符編寫的語言分別是()
1. 機(jī)器語言 II. 匯編語言 II.高級(jí)語言 IV.操作系統(tǒng)原語 V.正則語言
A. II. III
B. II. IV
C.I、Ⅱ
D. I. V
答案:C
直接執(zhí)行的是機(jī)器語言,匯編語言用助記符編寫以便記憶
16.只有當(dāng)程序執(zhí)行時(shí)才將源程序翻譯成機(jī)器語言,并且一次只能翻譯一行語句,邊翻譯邊執(zhí)行的是()程序,把匯編語言源程序轉(zhuǎn)變?yōu)闄C(jī)器語言程序的過程是()。
I. 編譯 II.目標(biāo) Ⅲ.匯編 IV. 解釋
A. Ⅰ、Ⅱ
в. IV、Ⅱ
C.IV、I
D. IV. Ⅲ
答案:D
17. 下列敘述中,正確的是()
I. 實(shí)際應(yīng)用程序的測(cè)試結(jié)果能夠全面代表計(jì)算機(jī)的性能II. 系列機(jī)的基本特性是指令系統(tǒng)向后兼容IⅢ.軟件和硬件在邏輯功能上是等價(jià)的
A. II
B. III
C. II和Ⅲ
D. Ⅰ、II和Ⅲ
答案:C
比如浮點(diǎn)數(shù)可以通過浮點(diǎn)計(jì)數(shù)器進(jìn)行計(jì)算也可以通過編寫程序計(jì)算。
18. 在CPU的組成中,不包括()
A.運(yùn)算器
B. 存儲(chǔ)器
C.控制器
D. 寄存器
答案:B
中心處理器(CPU)由運(yùn)算器和控制器組成,運(yùn)算器和控制器中都內(nèi)置了寄存器
19.下列()不屬于系統(tǒng)軟件。
A. 數(shù)據(jù)庫系統(tǒng)
C. 編譯程序
B. 操作系統(tǒng)
D. 以上3種都屬于系統(tǒng)程序
答案:A
20. 關(guān)于相聯(lián)存儲(chǔ)器,下列說法中正確的是
A. 只可以按地址尋址
B. 只可以按內(nèi)容尋址
C. 既可按地址尋址又可按內(nèi)容尋址
D. 以上說法均不完善
答案:C
21.計(jì)算機(jī)系統(tǒng)的層次結(jié)構(gòu)可以分為6層,其層次之間的依存關(guān)系是()。
A. 上下層之間相互無關(guān)
B. 上層實(shí)現(xiàn)對(duì)下層的功能擴(kuò)展,而下層是實(shí)現(xiàn)上層的基礎(chǔ)
C. 上層實(shí)現(xiàn)對(duì)下層的擴(kuò)展作用,而下層對(duì)上層有限制作用
D. 上層和下層的關(guān)系是相互依存、不可分割的
答案:B
22.【2009統(tǒng)考真題】馮?諾依曼計(jì)算機(jī)中指令和數(shù)據(jù)均以二進(jìn)制形式存放在存儲(chǔ)器中,CPU區(qū)分它們的依據(jù)是用()。
A. 指令操作碼的譯碼結(jié)果
B. 指令和數(shù)據(jù)的尋址方式
C. 指令周期的不同階段
D. 指令和數(shù)據(jù)所在的存儲(chǔ)單元
答案:C
在取指令周期中是取出來的是指令,在執(zhí)行階段取出來的是數(shù)據(jù)
23. 【2016統(tǒng)考真題】 將高級(jí)語言源程序轉(zhuǎn)換為機(jī)器級(jí)目標(biāo)代碼文件的程序是()
A. 匯編程序
B.鏈接程序
C.編譯程序
D. 解釋程序
答案:C
具體的自己了解編譯程序翻譯程序解釋程序的定義
24.【2015統(tǒng)考真題】計(jì)算機(jī)硬件能夠直接執(zhí)行的是
I. 機(jī)器語言程序 II.匯編語言程序 II.硬件描述語言程序
A. 僅I
B. 僅I、II
C. 僅I、Ⅲ
D.I、Ⅱ、Ⅲ
答案:A
硬件可以直接執(zhí)行的只有機(jī)器語言(二進(jìn)制編碼)
25.【2019統(tǒng)考真題】下列關(guān)于馮,諾依曼計(jì)算機(jī)基本思想的敘述中,錯(cuò)誤的是()
A. 程序的功能都通過中央處理器執(zhí)行指令實(shí)現(xiàn)
B. 指令和數(shù)據(jù)都用二進(jìn)制數(shù)表示,形式上無差別
C.指令按地址訪問,數(shù)據(jù)都在指令中直接給出
D.程序執(zhí)行前,指令和數(shù)據(jù)需預(yù)先存放在存儲(chǔ)器中
答案:C
數(shù)據(jù)和指令是在不同的指令周期中的,數(shù)據(jù)一般都是要事先存放在寄存器中的
26.【2022 統(tǒng)考真題】 將高級(jí)語言源程序轉(zhuǎn)換為可執(zhí)行目標(biāo)文件的主要過程是()。
A. 預(yù)處理一編譯一匯編一鏈接
B. 預(yù)處理一匯編一編譯一鏈接
C. 預(yù)處理一編譯一鏈接一匯編
D. 預(yù)處理一匯編一鏈接一編譯
答案:A
將源文件轉(zhuǎn)化為可執(zhí)行文件的步驟分為四步:預(yù)處理一編譯一匯編一鏈接。
簡答題:
1、翻譯程序、匯編程序、編譯程序、解釋程序有什么差別?各自的特征是什么?
- 翻譯程序:翻譯程序是一種更廣泛的術(shù)語,它涵蓋了將一種編程語言轉(zhuǎn)換為另一種編程語言的過程。這包括編譯程序和解釋程序。
- 匯編程序:匯編程序是將匯編語言代碼轉(zhuǎn)換為機(jī)器語言代碼的過程。匯編語言非常接近計(jì)算機(jī)硬件,因此匯編程序是翻譯程序的一種,通常用于優(yōu)化高級(jí)語言的程序代碼。
- 編譯程序:編譯程序是一種將高級(jí)編程語言源代碼轉(zhuǎn)換為機(jī)器語言(也稱為目標(biāo)代碼)的過程。一旦編譯完成,就可以直接運(yùn)行生成的可執(zhí)行文件。編譯過程通常包括詞法分析、語法分析、語義分析、中間代碼生成、優(yōu)化和目標(biāo)代碼生成等階段。
- 解釋程序:解釋程序是一種特殊類型的翻譯程序,它讀取源代碼并逐行解釋執(zhí)行。解釋程序沒有像編譯程序那樣的全局轉(zhuǎn)換階段,而是在讀取每一條語句時(shí)立即轉(zhuǎn)換并執(zhí)行。這使得解釋程序更容易編寫和理解,但通常比編譯程序的運(yùn)行速度慢。
2、計(jì)算機(jī)是由哪幾部分組成的?以那部分作為中心?
計(jì)算機(jī)由運(yùn)算器、控制器、存儲(chǔ)器、輸入設(shè)備和輸出設(shè)備五大部分組成。從馮諾依曼計(jì)算機(jī)結(jié)構(gòu)來看,計(jì)算機(jī)的核心是存儲(chǔ)器;而從現(xiàn)代計(jì)算機(jī)來看,計(jì)算機(jī)的核心是中央處理器(CPU)。
3、不同級(jí)別的語言編寫的程序有什么區(qū)別?那種語言編寫的程序可以直接被硬件直接執(zhí)行?
機(jī)器語言和匯編語言與機(jī)器指令對(duì)應(yīng),而高級(jí)語言不與指令直接對(duì)應(yīng),具有較好的可移植性,其中機(jī)器語言可以被硬件直接執(zhí)行。
第2章:計(jì)算機(jī)中的信息表示
2.1.原碼、反碼、補(bǔ)碼、移碼定義、數(shù)據(jù)表示范圍
2.1.1、原碼
????????原碼是一種二進(jìn)制編碼方式,它直接將數(shù)值的二進(jìn)制形式轉(zhuǎn)換為機(jī)器碼。原碼就是“未經(jīng)更改”的碼,當(dāng)一個(gè)二進(jìn)制數(shù)大于0時(shí),符號(hào)位為0;二進(jìn)制數(shù)小于0時(shí),符號(hào)位為1;二進(jìn)制數(shù)等于0時(shí),符號(hào)位可以為0或1。
????????在計(jì)算機(jī)中,所有的數(shù)包括正數(shù)和負(fù)數(shù)都用0和1來表示,數(shù)字的正負(fù)號(hào)也用0和1表示。如果一個(gè)機(jī)器數(shù)字長是n位的話,約定最左邊一位用作符號(hào)位,其余n-1位用于表示數(shù)值。
????????[+1]原 = 0000 0001??[-1]原 = 1000 0001
????????[+11]原 = 0000 1011 [-11]原 = 1000 1011
2.1.2、反碼
????????反碼:是原碼的一種變形,對(duì)于正數(shù),反碼與其原碼相同;對(duì)于負(fù)數(shù),反碼是對(duì)原碼按位取反(即符號(hào)位不變,其他位取反)。反碼可以用于實(shí)現(xiàn)減法運(yùn)算,但還是不便于直接用于加減混合運(yùn)算。
反碼的表示方法是:
- 正數(shù)的反碼是其本身
- 負(fù)數(shù)的反碼是在其原碼的基礎(chǔ)上, 符號(hào)位不變,其余各個(gè)位取反.
? ? ? ? ?[+1] = [00000001]原 = [00000001]反
???????? [-1] = [10000001]原 = [11111110]反
2.1.3、補(bǔ)碼
??????補(bǔ)碼:?是計(jì)算機(jī)內(nèi)部用于表示數(shù)值的真正形式。對(duì)于負(fù)數(shù),補(bǔ)碼是反碼加1;對(duì)于正數(shù),補(bǔ)碼與其原碼相同。補(bǔ)碼在計(jì)算機(jī)中有兩個(gè)主要優(yōu)點(diǎn):首先,它使得加法和減法操作變得簡單統(tǒng)一;其次,它使得符號(hào)位可以參與運(yùn)算,從而簡化了計(jì)算機(jī)中的進(jìn)位和溢出處理。
補(bǔ)碼的表示方法是:
- 正數(shù)的補(bǔ)碼就是其本身
- 負(fù)數(shù)的補(bǔ)碼是在其原碼的基礎(chǔ)上, 符號(hào)位不變, 其余各位取反, 最后+1. (即在反碼的基礎(chǔ)上+1)
- ([x]補(bǔ))全部相反+1=[-x]補(bǔ)
例如:X=-101011 , [X]原= 10101011 ,
????????????????[X]反=11010100,[X]補(bǔ)=11010101,[X]移=01010101
2.1.4、移碼
????????移碼是一種表示浮點(diǎn)數(shù)階碼的方法,其符號(hào)位用“1”表示正數(shù),用“0”表示負(fù)數(shù),數(shù)值部分與補(bǔ)碼相同。通常,移碼由1位符號(hào)位和n位數(shù)值位組成。在移碼中,正數(shù)的移碼與其原碼相同,負(fù)數(shù)的移碼是其原碼按位取反后加1。
????????移碼的一個(gè)特點(diǎn)是它可以使得浮點(diǎn)數(shù)的加法和減法運(yùn)算變得簡單統(tǒng)一。另外,移碼表示法也有利于浮點(diǎn)數(shù)的溢出判斷和表示。當(dāng)出現(xiàn)000…00時(shí)(表示-2^n),屬于浮點(diǎn)數(shù)下溢。
[+1] = [00000001]原 = [00000001]反 = [00000001]補(bǔ)= [10000001]移
[-1] = [10000001]原 = [11111110]反 = [11111111]補(bǔ)= [01111111]移
2.1.5、數(shù)據(jù)表示范圍
- 無符號(hào)二進(jìn)制數(shù):00000000到11111111,即十進(jìn)制中的0到255。
- 原碼:符號(hào)位+真數(shù)值,正數(shù)的符號(hào)位為0,負(fù)數(shù)的符號(hào)位為1。例如,+7的原碼為00000100,-7的原碼為10000100。因此,八位的原碼可以表示-127到+127的范圍。
- 反碼:正數(shù)的反碼與其原碼相同,負(fù)數(shù)的反碼是其原碼除符號(hào)位外各位取反。例如,+7的反碼為00000100,-7的反碼為11111011。因此,八位的反碼可以表示-127到+127的范圍。
- 補(bǔ)碼:正數(shù)的補(bǔ)碼與其原碼相同,負(fù)數(shù)的補(bǔ)碼是其反碼加一。例如,+7的補(bǔ)碼為00000100,-7的補(bǔ)碼為11111100。因此,八位的補(bǔ)碼可以表示-128到+127的范圍。
? ? ? ????(特別的)[10000000]補(bǔ)=-128(這個(gè)是一個(gè)很特殊的計(jì)算,因?yàn)槲覀冎镭?fù)數(shù)的補(bǔ)碼是由反碼加一得來的所以要得到0000000只可以是1111111加一得來的所以說也就是在127的基礎(chǔ)上再加上一個(gè)1,加上符號(hào)位就是-128)
? ? ? ? [10000000]補(bǔ)=[11111111]反+1=-128
? ? ? ? 5.移碼:用來表示浮點(diǎn)數(shù),符號(hào)位單獨(dú)占一位,緊隨其后的是指數(shù)和尾數(shù)(有效數(shù)字)。例如,+7的移碼為01000100,-7的移碼為11000100。因此,八位的移碼可以表示+32到-32的范圍。
2.2.指令的表示
? ? ? ? 指令的基本信息:
? ? ? ? 1.操作碼:該指令需要完成的操作
? ? ? ? 2.操作數(shù)的地址:待操作數(shù)的存放地址(包括寄存器地址、主存地址、內(nèi)存地址等)
? ? ? ? 3.操作結(jié)果存放地址:操作結(jié)果的存放地址
? ? ? ? 4.下一條操作碼地址(由PC給出)
? ? ? ? 地址碼結(jié)構(gòu):
? ? ? ? 三地址指令:op是操作碼、A1、A2、A3分別表示操作數(shù)A1、A2的地址和結(jié)果存放的地址A3,也就是對(duì)A1、A2地址中的值進(jìn)行操作把結(jié)果存到A3的地址中。
op | A1 | A2 | A3 |
? ? ? ? 二地址指令:op是操作碼、A1、A2也就是把A2地址的值和A1地址的值進(jìn)行操作然后把操作出來的值存放到A1中。
????????????????????????(A1)OP(A2) -> (A1)
op | A1 | A2 |
? ? ? ? 一地址指令
op | A1 |
? ? ? ? ? ? ? ? 一地址指令分為兩種形態(tài),要根據(jù)操作數(shù)確定是哪一種?
? ? ? ? ? ? ? ? ①只有目的操作數(shù)的單操作數(shù)指令
? ? ? ? ? ? ? ? 也就是操作完這個(gè)操作數(shù)還把值存到當(dāng)前的地址上。也就是加1,減1操作
? ? ? ? ? ? ? ? ? ? ? ?OP(A1) -> A1? ? ?
? ? ? ? ? ? ? ? ②隱含約定目的地址的雙操作數(shù)指令
? ? ? ? ? ? ? ? 操作數(shù)源地址A1和另一個(gè)操作數(shù)的隱含在CPU中累加器AC上,把運(yùn)算之后的結(jié)果還是會(huì)存放在累加器AC中
? ? ? ? ? ? ? ? (AC)OP(A1) -> AC? ??
????????零地址指令
op |
? ? ? ? ? ? ? ? ? ?零地址指令也有兩種可能:
? ? ? ? ? ? ? ? ? ?①不需要操作數(shù)的指令,如:空操作數(shù)指令、停機(jī)指令。
? ? ? ? ? ? ? ? ? ?②所需的操作數(shù)是隱含指定的。
? ? ? ? ? ? ? ??這種指令的操作數(shù)隱含在寄存器中,指令可直接訪問寄存器,也就是存在了堆棧匯中,由堆棧指針SP隱含指出,操作完的結(jié)果還是存在堆棧中。?
2.3.尋址方式
????????計(jì)算機(jī)組成尋址方式是指確定本條指令的操作數(shù)地址以及下一條將要執(zhí)行的指令地址的方法,與硬件結(jié)構(gòu)緊密相關(guān),而且直接影響指令格式和指令功能??梢苑譃橹噶顚ぶ泛蛿?shù)據(jù)尋址兩大類。
????????其中,指令尋址分為順序?qū)ぶ泛吞S尋址兩種。順序?qū)ぶ房赏ㄟ^程序計(jì)數(shù)器PC加1,自動(dòng)形成下一條指令的地址;跳躍尋址則通過轉(zhuǎn)移類指令實(shí)現(xiàn)。數(shù)據(jù)尋址種類較多,在指令字中必須設(shè)一字段來指明屬于哪一種尋址方式。
(立即尋址、直接尋址、寄存器尋址、間接尋址、寄存器間接尋址、基址或變址尋址、基址變址尋址、相對(duì)尋址、堆棧尋址) 有效地址
1.立即尋址:操作數(shù)就在指令中,緊跟在操作碼后面。執(zhí)行指令時(shí),指令給出的是操作數(shù)的有效地址,而不是操作數(shù)本身。因此,CPU執(zhí)行該指令時(shí),可直接從指令中取得操作數(shù)。這種方式的優(yōu)點(diǎn)是簡單、直觀、易于實(shí)現(xiàn)。缺點(diǎn)是指令的長度將隨操作數(shù)的長度而變化,從而影響了指令的長度和執(zhí)行速度。
????????在匯編語言中,指令“MOV AX, 1234H”就是立即尋址的一個(gè)實(shí)例。這里,“MOV”是操作碼,“AX”是目標(biāo)操作數(shù),“1234H”是立即數(shù)。該指令將立即數(shù)“1234H”直接賦給寄存器“AX”。
2.直接尋址:操作數(shù)的有效地址EA(即有效地址EA)由指令給出。執(zhí)行指令時(shí),CPU將指令中的形式地址A作為有效地址EA來訪問內(nèi)存單元。
???????實(shí)例(x86匯編):
MOV AX, [0023H]
????????解釋:這條指令將內(nèi)存地址0023H中的內(nèi)容移動(dòng)到AX寄存器中。
3.間接尋址:操作數(shù)的有效地址EA由內(nèi)存單元給出。執(zhí)行指令時(shí),CPU首先從內(nèi)存單元中取出有效地址EA,然后再用該地址EA訪問內(nèi)存單元。
????????實(shí)例(x86匯編):
MOV AX, [BX]
????????解釋:這條指令將BX寄存器指向的內(nèi)存單元中的內(nèi)容移動(dòng)到AX寄存器中。
4.寄存器間接尋址:操作數(shù)的有效地址EA由寄存器給出。執(zhí)行指令時(shí),CPU先從寄存器中取出有效地址EA,然后再用該地址EA訪問內(nèi)存單元。
????????實(shí)例(x86匯編):
MOV AX, [BX+SI]
????????解釋:這條指令將BX和SI寄存器的值相加,并將結(jié)果指向的內(nèi)存單元中的內(nèi)容移動(dòng)到AX寄存器中。
5.相對(duì)尋址:操作數(shù)的有效地址EA是程序計(jì)數(shù)器PC的內(nèi)容與某個(gè)變址寄存器的內(nèi)容之和。執(zhí)行指令時(shí),CPU先將程序計(jì)數(shù)器PC的內(nèi)容加上某個(gè)變址寄存器的內(nèi)容,從而得到操作數(shù)的有效地址EA,然后再用該地址EA訪問內(nèi)存單元。
實(shí)例(x86匯編):
MOV AX, [OFFSET PROGRAM]
解釋:這條指令將OFFSET PROGRAM的地址加載到AX寄存器中,其中OFFSET PROGRAM是相對(duì)于當(dāng)前指令位置的一個(gè)標(biāo)簽或地址。
6.基址尋址:操作數(shù)的有效地址EA是基址寄存器和位移量之和。執(zhí)行指令時(shí),CPU先將基址寄存器的內(nèi)容加上位移量,從而得到操作數(shù)的有效地址EA,然后再用該地址EA訪問內(nèi)存單元。
實(shí)例:MOV AX, [BX+DISP]
解釋:這條指令將BX寄存器中的值與DISP相加,并將結(jié)果指向的內(nèi)存單元中的內(nèi)容移動(dòng)到AX寄存器中。其中DISP可以是立即數(shù)、寄存器或表達(dá)式,用于指定相對(duì)于BX寄存器內(nèi)容的位移量。
7.變址尋址:操作數(shù)是變址寄存器的內(nèi)容加上某個(gè)位移量。執(zhí)行指令時(shí),CPU先將變址寄存器的內(nèi)容加上某個(gè)位移量,從而得到操作數(shù)的有效地址EA,然后再用該地址EA訪問內(nèi)存單元。
實(shí)例:MOV AX, [BX+SI+DISP]
解釋:這條指令將BX、SI寄存器的值與DISP相加,并將結(jié)果指向的內(nèi)存單元中的內(nèi)容移動(dòng)到AX寄存器中。其中DISP可以是立即數(shù)、寄存器或表達(dá)式,用于指定相對(duì)于BX和SI寄存器內(nèi)容的位移量。
8.基址加變址尋址:這種方式的指令格式類似于前面的變址方式,所不同的是此處的變址寄存器的內(nèi)容不是直接加到指令給出的位移量上,而是加到另一個(gè)變址寄存器的值上。
實(shí)例(x86匯編):
MOV AX, [BX+DI+SI]
解釋:這條指令將BX、DI和SI寄存器的值相加,并將結(jié)果指向的內(nèi)存單元中的內(nèi)容移動(dòng)到AX寄存器中。
9.相對(duì)基址變址尋址:這種方式的指令格式類似于前面的相對(duì)尋址方式,所不同的是此處的變址寄存器的內(nèi)容不是直接加到程序計(jì)數(shù)器PC上,而是加到另一個(gè)變址寄存器的值上。
實(shí)例:MOV AX, [BX+DI+DISP]
解釋:這條指令將BX、DI寄存器的值與DISP相加,并將結(jié)果指向的內(nèi)存單元中的內(nèi)容移動(dòng)到AX寄存器中。其中DISP可以是立即數(shù)、寄存器或表達(dá)式,用于指定相對(duì)于BX和DI寄存器內(nèi)容的位移量。
10.堆棧尋址:堆棧是一種數(shù)據(jù)結(jié)構(gòu),其操作具有后進(jìn)先出(Last In First Out, LIFO)的特性。堆棧尋址方式就是按照堆棧的這種特性來訪問數(shù)據(jù)的一種方式。在堆棧中,最后一個(gè)進(jìn)入堆棧的元素位于堆棧的頂部,因此訪問堆棧中的元素時(shí),總是從堆棧頂部開始訪問。
實(shí)例(x86匯編):
PUSH AX
?或?POP AX
解釋:PUSH指令將AX寄存器的內(nèi)容壓入堆棧,而POP指令從堆棧頂部彈出內(nèi)容并將其放入AX寄存器中。
第二章習(xí)題
1、選擇題
1.(單選題,5.0分)下列對(duì)源碼、補(bǔ)碼和反碼敘述正確的是:
A.當(dāng)真值為正時(shí),原碼和補(bǔ)碼的表示形式不同,但其符號(hào)位都用“0”表示。
B.三種機(jī)器數(shù)的最高位均為符號(hào)位。符號(hào)位和數(shù)值部分之間可用”"(對(duì)于小數(shù))和”,”(對(duì)于整數(shù))隔開。
C.全部正確。
D.當(dāng)真值為負(fù)時(shí),原碼、補(bǔ)碼和反碼的表示形式均相同,即符號(hào)位用“1"表示,數(shù)值部分和真值部分相同
答案:B
A選項(xiàng)錯(cuò)的很明顯當(dāng)真值為正的時(shí)候原碼和補(bǔ)碼是一樣的,D選項(xiàng)當(dāng)真值為負(fù)數(shù),原碼和補(bǔ)碼是相反加一。
2.(單選題,5.0分)已知X=0.a1a2a3a4a5a6(ai為0或1)則當(dāng)X>1/2時(shí)ai應(yīng)取何值?
A.a1=1,a2-a6任意
B.a1=1,a2-a6至少有一個(gè)為1
C.a1-a6至少有一個(gè)為1
D.a1-a6任意
答案:B
小數(shù)點(diǎn)后的二進(jìn)制是1/2(n),所以只要第一位=1,后面的只要有一個(gè)一就可以大于1/2了
3.(單選題,5.0分)設(shè)x為真值,x*為絕對(duì)值,說明[-x*]補(bǔ)=[-x]補(bǔ)在什么時(shí)候成立
A.當(dāng)x為負(fù)數(shù)時(shí)成立
B.任何時(shí)候都成立
C.任何時(shí)候都不成立
D.當(dāng)x為正數(shù)時(shí)成立
答案:D
4.(單選題,5.0分)以下各類表示法中,無論表示正數(shù)還是負(fù)數(shù),()的數(shù)值位永遠(yuǎn)都是其真值的絕對(duì)值。
A.原碼
B.反碼
C.補(bǔ)碼
D.移碼
答案:A
原碼的數(shù)值位永遠(yuǎn)是真值,第一位是符號(hào)位
5.(單選題,5.0分) 以下各類表示法中,引入( )的概念是為了消除減法操作。
A.移碼
B.原碼
C.反碼
D.補(bǔ)碼
答案:D
引入了補(bǔ)碼可以實(shí)現(xiàn)加法進(jìn)行減法計(jì)算。
6.(單選題,5.0分)在計(jì)算機(jī)中,以下選項(xiàng)屬于小數(shù)點(diǎn)的表示方法的是
A.無正確答案
B.定長表示
C.定點(diǎn)表示
D.變長表示
答案:C
7.(單選題,5.0分)當(dāng)真值用補(bǔ)碼表示時(shí),由于符號(hào)位和數(shù)值部分一起編碼,與習(xí)慣上的表示法不同,因此人們很難從補(bǔ)碼的形式上直接判斷其真值的大小,而采用移碼編碼時(shí)從代碼本身就可以看出真值的實(shí)際大小。以下給出了四種整數(shù)編碼的定義,其中是整數(shù)移碼定義的為()
答案:D
8.(單選題,5.0分)下列數(shù)中最小的數(shù)為
A.(01010101)二
B.(21)十
C.(40)八
D.(1A)十六
答案:B
A:轉(zhuǎn)化十進(jìn)制1+4+16+64
B: 21
C:4*8=32
D:1*16+11=27
9.(多選題,5.0分) 設(shè)x為整數(shù),x的真值為25,以下選項(xiàng)與x相等的有
A.補(bǔ)碼二進(jìn)制串為0.11001的數(shù)
B原碼二進(jìn)制串為1,11001的數(shù)
C反碼二進(jìn)制串為0,11001的數(shù)
D.原碼二進(jìn)制串為0,11001的數(shù)
答案:AD
10.(多選題,5.0分) 下列關(guān)于定點(diǎn)數(shù)和浮點(diǎn)數(shù)的敘述正確的是:
A.定點(diǎn)數(shù)在運(yùn)算規(guī)則、運(yùn)算速度及硬件成本方面優(yōu)于浮點(diǎn)數(shù)。
B.當(dāng)浮點(diǎn)機(jī)和定點(diǎn)機(jī)中數(shù)的位數(shù)相同時(shí),浮點(diǎn)數(shù)的表示范圍比定點(diǎn)數(shù)的范圍大的多。
C.在溢出的判斷方法上,浮點(diǎn)數(shù)是對(duì)規(guī)格化數(shù)的階碼進(jìn)行判斷,而定點(diǎn)數(shù)是對(duì)數(shù)值本身進(jìn)行判斷。
D.浮點(diǎn)數(shù)運(yùn)算要分階碼部分和尾數(shù)部分,而且運(yùn)算結(jié)果都要求規(guī)格化,故浮點(diǎn)運(yùn)算步驟比定點(diǎn)運(yùn)算步驟多,運(yùn)算速度比定點(diǎn)運(yùn)算的低,運(yùn)算線路比定點(diǎn)運(yùn)算的復(fù)雜。
答案:ACD
11.(多選題,5.0分)以下關(guān)于機(jī)器數(shù)和真值的說法正確的是
A.把帶“+”或“”符號(hào)的數(shù)稱為真值。
B.把符號(hào)"數(shù)字化"的數(shù)稱為機(jī)器數(shù)
C.把帶“+”或“”符號(hào)的數(shù)稱為機(jī)器數(shù)
D.無正確答案
答案:AB
第3章:微體系結(jié)構(gòu)層——CPU組織
3.1 CPU的組成和功能
1.CPU的組成
? ? ? ? cpu主要由運(yùn)算器和控制器兩部分組成,如下圖所示:
????????運(yùn)算器由算術(shù)/邏輯運(yùn)算部件ALU、累加器ACC、寄存器B、暫存器TMP1、TMP2和程序狀態(tài)標(biāo)志寄存器PSW組成。其中,ALU是核心部件,可實(shí)現(xiàn)算術(shù)運(yùn)算和邏輯運(yùn)算,并處理位變量。累加器ACC用于向ALU提供操作數(shù)和存放運(yùn)算結(jié)果。寄存器B是專門為乘法和除法運(yùn)算設(shè)置的寄存器。程序狀態(tài)標(biāo)志寄存器PSW用于保存ALU運(yùn)算結(jié)果的特征和處理狀態(tài)。
????????控制器由指令寄存器IR、指令譯碼器ID、定時(shí)及控制邏輯電路以及程序計(jì)數(shù)器PC等組成。程序計(jì)數(shù)器PC是一個(gè)16位的計(jì)數(shù)器,用于存放下一個(gè)要取指令的16位程序存儲(chǔ)器存儲(chǔ)單元的地址。指令寄存器IR保存當(dāng)前正在執(zhí)行的指令,指令內(nèi)容包含操作碼和地址碼兩部分。指令譯碼器ID對(duì)指令進(jìn)行譯碼,并形成相應(yīng)指令的微操作信號(hào)。定時(shí)與控制時(shí)微處理器的核心部件,其任務(wù)是控制取指令、執(zhí)行指令、存取操作數(shù)或運(yùn)算結(jié)果等操作,向其他部件發(fā)出各種微操作信號(hào),協(xié)調(diào)各部件工作,完成指令的執(zhí)行。
? ? ? ? cpu的組成:控制器、算術(shù)邏輯部件、寄存器、cpu內(nèi)部總線
2.CPU的功能
? ? ? ? ①指令控制:CPU按照指令計(jì)數(shù)器中的指令地址從內(nèi)存儲(chǔ)器中取出指令,并對(duì)指令進(jìn)行譯碼,將指令中的操作碼轉(zhuǎn)換成相應(yīng)的控制信號(hào),再根據(jù)控制信號(hào)逐條完成操作碼指定的任務(wù)。
????????②操作控制:CPU根據(jù)指令的操作碼和操作數(shù)計(jì)算出相應(yīng)的控制信號(hào),并將這些信號(hào)送往相應(yīng)的部件,控制這些部件完成指令的操作。
????????③時(shí)間控制:CPU通過定時(shí)器或時(shí)間計(jì)數(shù)器來控制指令的執(zhí)行順序和執(zhí)行時(shí)間,確保指令按照規(guī)定的順序和時(shí)間執(zhí)行。
????????④數(shù)據(jù)加工:CPU對(duì)數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算、邏輯運(yùn)算等操作,并將結(jié)果存儲(chǔ)回內(nèi)存或寄存器中。這些操作可以幫助CPU處理各種數(shù)據(jù),包括輸入/輸出數(shù)據(jù)、計(jì)算結(jié)果等。
????????⑤中斷處理:CPU在執(zhí)行指令的過程中,如果出現(xiàn)異?;蛐枰幚砥渌录?#xff08;如輸入/輸出操作完成),則會(huì)產(chǎn)生中斷信號(hào),CPU會(huì)暫停當(dāng)前任務(wù)的執(zhí)行,保存現(xiàn)場(chǎng)信息,轉(zhuǎn)去處理該中斷事件,處理完畢后再恢復(fù)現(xiàn)場(chǎng)并繼續(xù)執(zhí)行。
3.2 算術(shù)邏輯部件ALU和運(yùn)算方法
1.補(bǔ)碼減法電路
? ? ? ? 首先我們需要知道的是,在計(jì)算機(jī)硬件中是不可以直接的實(shí)現(xiàn)減法運(yùn)算的,所以在計(jì)算機(jī)中的減法都是通過補(bǔ)碼的加法進(jìn)行實(shí)現(xiàn)的。
? ? ? ? 首先我們要先復(fù)習(xí)一下加減法手算是怎么進(jìn)行的。
? ? ? ? X=12,Y=8,我們需要進(jìn)行X-Y的計(jì)算,假設(shè)是八位二進(jìn)制數(shù)。
? ? ? ? 【X】=00001100
? ? ? ? 【Y】=00001000
? ? ? ? X-Y=【X】補(bǔ)+【Y取反+1】=【00001100】+【11110111+1】=【00000100】補(bǔ)= 4
????????
? ? ? ? 補(bǔ)碼的加減法電路首先通過sub信號(hào)控制加減法,如果是減法,就把傳入的值按位取反并且來自低位的信號(hào)加一,加法就可以直接把值傳入進(jìn)行運(yùn)算。
? ? ? ? 標(biāo)志位:
- OF(溢出標(biāo)志):當(dāng)進(jìn)行加法或減法運(yùn)算時(shí),如果結(jié)果的符號(hào)與操作數(shù)的符號(hào)不同,那么就發(fā)生了溢出。OF標(biāo)志用于表示是否發(fā)生了溢出。例如,對(duì)于8位二進(jìn)制補(bǔ)碼表示,如果最高位(符號(hào)位)為0,那么最大的正數(shù)是+127;如果最高位為1,那么最大的負(fù)數(shù)是-127。如果進(jìn)行加法或減法運(yùn)算的結(jié)果超出了這些范圍,那么就發(fā)生了溢出。
- SF(符號(hào)標(biāo)志):SF標(biāo)志用于表示結(jié)果的符號(hào)。如果SF=0,那么結(jié)果為正數(shù);如果SF=1,那么結(jié)果為負(fù)數(shù)。
- ZF(零標(biāo)志):ZF標(biāo)志用于表示結(jié)果是否為0。如果ZF=1,那么結(jié)果為0;如果ZF=0,那么結(jié)果不為0。
- CF(進(jìn)位標(biāo)志):CF標(biāo)志用于表示是否有進(jìn)位或借位發(fā)生。在進(jìn)行加法或減法運(yùn)算時(shí),如果最高位(符號(hào)位)有進(jìn)位或借位,那么CF標(biāo)志就被設(shè)置。
2.影響加法器運(yùn)算速度的關(guān)鍵因素——進(jìn)位傳遞延遲
????????影響加法器運(yùn)算速度的關(guān)鍵因素之一是進(jìn)位傳遞延遲。在加法運(yùn)算中,低位向高位的進(jìn)位需要一定的時(shí)間來傳播,這個(gè)時(shí)間就是進(jìn)位傳遞延遲。如果進(jìn)位傳遞延遲過長,就會(huì)影響加法器的運(yùn)算速度。因此,優(yōu)化進(jìn)位傳遞延遲是提高加法器性能的重要手段之一。
????????為了減小進(jìn)位傳遞延遲,可以采用多種技術(shù)。其中一種常用的技術(shù)是預(yù)計(jì)算進(jìn)位,即在每個(gè)加法操作之前,預(yù)先計(jì)算出所有可能的進(jìn)位,并將它們存儲(chǔ)在一個(gè)表格中。在進(jìn)行加法操作時(shí),直接從表格中取出相應(yīng)的進(jìn)位值,從而避免了在運(yùn)算過程中進(jìn)行進(jìn)位計(jì)算和傳遞,大大提高了加法器的運(yùn)算速度。
? ? ?
????????根據(jù)Ci=AiBi+(Ai⊕Bi)Ci-1(邏輯表達(dá)式),我們可以設(shè)Gi=AiBi,Pi=Ai⊕Bi,則可以得到Ci=Gi+PiCi-1,一直拆分就可以不用知道前一位的進(jìn)位就可以知道Ci的值了就可以并行加法運(yùn)算,但是這樣子就會(huì)導(dǎo)致電子元件的增加
????????要是一直拆分就會(huì)越來越復(fù)雜
3.IEEE 754浮點(diǎn)格式
????????在IEEE 754標(biāo)準(zhǔn)中,浮點(diǎn)數(shù)被表示為符號(hào)位、指數(shù)部分和尾數(shù)部分三部分組成。根據(jù)不同的位數(shù),有單精度、雙精度、擴(kuò)展單精度和擴(kuò)展雙精度四種格式。
????????對(duì)于單精度格式(32位),符號(hào)位占1位,指數(shù)部分占8位,尾數(shù)部分占23位。對(duì)于雙精度格式(64位),符號(hào)位占1位,指數(shù)部分占11位,尾數(shù)部分占52位。在擴(kuò)展的單精度和雙精度格式中,指數(shù)部分和尾數(shù)部分的位數(shù)可以更多,分別滿足不同的精度要求。
????????
4.浮點(diǎn)數(shù)加減運(yùn)算——對(duì)階、尾數(shù)求和、規(guī)格化、判斷溢出(掌握【例3-12】)(綜合題)
首先我們需要知道的浮點(diǎn)數(shù)的計(jì)算過程:
- 對(duì)階:讓兩個(gè)操作數(shù)階數(shù)相同,以便進(jìn)行加減。實(shí)現(xiàn)的方式是對(duì)較小數(shù)的尾數(shù)進(jìn)行右移操作。對(duì)階的原則是向高階看齊。計(jì)算公式為:當(dāng)結(jié)果大于0說明被加數(shù)(被減數(shù))階數(shù)高,則對(duì)加數(shù)(減數(shù))進(jìn)行移位對(duì)階。小于0則反之改變被加數(shù)(被減數(shù))。
- 尾數(shù)相加/相減:將兩個(gè)操作數(shù)的尾數(shù)相加或相減。值得注意的是,在IEEE754標(biāo)準(zhǔn)中,對(duì)于規(guī)格化數(shù)來說在小數(shù)點(diǎn)前有一位隱藏位1,在加減過程中需要把它還原到尾數(shù)中。
- 規(guī)格化:如果結(jié)果不為規(guī)格化數(shù),則需要通過左規(guī)或右規(guī)將其變?yōu)橐?guī)格化數(shù)(尾數(shù)最高有效位的真值為1,或尾數(shù)符與最高有效位不等)。左規(guī)是將尾數(shù)左移,同時(shí)指數(shù)部分減1;右規(guī)則是將尾數(shù)右移,同時(shí)指數(shù)部分加1。
- 舍入處理:根據(jù)舍入規(guī)則對(duì)結(jié)果進(jìn)行舍入處理。IEEE 754標(biāo)準(zhǔn)定義了四種舍入規(guī)則:向最接近的值舍入、向下舍入、向上舍入和向最接近的值舍入但不超過該值。
- 溢出判斷與處理:判斷結(jié)果是否溢出。如果溢出,則需要將結(jié)果表示為無窮大或NaN等特殊值。
- 結(jié)果的符號(hào):根據(jù)操作數(shù)的符號(hào)確定結(jié)果的符號(hào)。正數(shù)的符號(hào)為0,負(fù)數(shù)的符號(hào)為1。
【例3-12】
有兩個(gè)二進(jìn)制浮點(diǎn)數(shù)X=0.110101B*
?, Y=-0.101011B*
?,計(jì)算X+Y.(浮點(diǎn)的格式為階碼4位、尾數(shù)8位,采用雙符號(hào)位補(bǔ)碼表示)
? ? ? ? 則把他們轉(zhuǎn)化位機(jī)器數(shù)如下所示:
????????????????
? ? ? ? 計(jì)算過程如下所示:
????????① 對(duì)階。求階差A(yù)E=[Ex]+[-EY]=1110+0001=1111B,即▲E=-1,表明X 的階碼蚊小。按對(duì)階規(guī)則,將Mx右移1 位,其階碼加1,得
????????????????[X]浮=11,11;00.011011B(用0舍1入法)
② 尾數(shù)求和。[Mx]+[My]=00.011011B+11.010101B=11.11000B。
③ 規(guī)格化及判溢出。結(jié)果尾數(shù)是非規(guī)格化的數(shù)(因?yàn)槲覀兯愠鑫矓?shù)的數(shù)值位的真值是010000B,最高有效位不是1),需左規(guī)。因此將結(jié)果尾數(shù)左移1位,階碼減1,得
????????????????????????[X+Y]浮?=11,10; 11.10000B由于階碼的表示范圍為-4≤E≤3,而E(x+y)=10B=2,在范圍內(nèi),因此結(jié)果不會(huì)溢出;或因階碼符號(hào)位為 11,表明無溢出。
④ 舍入。由于是左規(guī),結(jié)果不需要舍入。
????????最后運(yùn)算結(jié)果的真值 X+Y=(-0.100000B)×2(-010B)
3.3 指令流水線
????????在指令流水線中,每條指令的處理過程被分為多個(gè)階段,例如取指、譯碼、執(zhí)行和寫回結(jié)果等。每個(gè)階段對(duì)應(yīng)一個(gè)電路單元,這些電路單元可以同時(shí)處理不同的指令。
????????指令流水線技術(shù)的應(yīng)用可以提高CPU的運(yùn)算速度,因?yàn)樗试S多條指令同時(shí)進(jìn)行操作,提高了各部件的利用率和指令的平均執(zhí)行速度。此外,流水線技術(shù)還要求所有指令在每個(gè)部件上執(zhí)行的時(shí)間是一樣的,這樣就可以實(shí)現(xiàn)多個(gè)任務(wù)的重疊執(zhí)行,進(jìn)一步提高工作效率。
1.影響指令流水線的因素
- 結(jié)構(gòu)相關(guān)(資源沖突):由于多條指令在同一時(shí)刻爭(zhēng)用同一資源而形成的沖突。解決辦法包括后一相關(guān)指令暫停一周期和資源重復(fù)配置。
- 數(shù)據(jù)相關(guān)(數(shù)據(jù)沖突):在一個(gè)程序中,存在必須等前一條指令執(zhí)行完才能執(zhí)行后一條指令的情況,則這兩條指令即為數(shù)據(jù)相關(guān)。
? ? ? ? 解決辦法①包括把遇到數(shù)據(jù)相關(guān)的指令及其后續(xù)指令都暫停一至幾個(gè)時(shí)鐘周期,直到數(shù)據(jù)相關(guān)問題消失后再繼續(xù)執(zhí)行。②數(shù)據(jù)旁路技術(shù):也就是在操作完數(shù)據(jù)以后就把數(shù)據(jù)存入到寄存器中,這樣就不需要等到寫回階段之后才可以拿到數(shù)據(jù)進(jìn)行操作。
- 控制相關(guān)(控制沖突):當(dāng)流水線遇到轉(zhuǎn)移指令和其他改變PC值的指令而造成斷流時(shí),會(huì)引起控制相關(guān)。
- 機(jī)器周期的設(shè)置:機(jī)器周期的設(shè)置也會(huì)影響指令流水線的性能。
?????????在指令流水線中把流水線操作分為取指、譯碼、執(zhí)行和寫回結(jié)果幾個(gè)階段,每個(gè)階段都會(huì)執(zhí)行一個(gè)時(shí)鐘周期的時(shí)間,指令流水線操作的時(shí)鐘周期確定應(yīng)以各功能段的最長執(zhí)行時(shí)間為準(zhǔn),否則用時(shí)較長的流水段的功能將不能正確完成,會(huì)導(dǎo)致數(shù)據(jù)缺失的情況發(fā)生。
2.流水線多發(fā)技術(shù)
????????流水線多發(fā)技術(shù)是指在一個(gè)時(shí)鐘周期內(nèi),產(chǎn)生更多條指令的結(jié)果。常見的多發(fā)技術(shù)有超標(biāo)量技術(shù)、超流水線技術(shù)和超長指令字技術(shù)。
????????超標(biāo)量技術(shù)通過配置多個(gè)功能部件,在一個(gè)時(shí)鐘周期內(nèi)并發(fā)多條獨(dú)立指令,并通過編譯優(yōu)化技術(shù)將可并行執(zhí)行的指令配對(duì)起來。
????????超流水線技術(shù)將一個(gè)流水段進(jìn)行細(xì)分,在一個(gè)時(shí)鐘周期內(nèi)將其分為三段,使一個(gè)功能部件在一個(gè)時(shí)鐘周期內(nèi)使用多次,從而提高流水線的速度。
????????超長指令字技術(shù)通過編譯程序挖掘出指令間的潛在并行性,將多條能并行操作的指令組合成一條具有多個(gè)操作碼字段的超長指令字,以提高指令執(zhí)行效率。
3.4 組合邏輯控制器原理
1.組合邏輯控制器的基本原理
????????根據(jù)指令譯碼器產(chǎn)生的指令信息、時(shí)序系統(tǒng)產(chǎn)生的機(jī)器周期信號(hào)和節(jié)拍信號(hào)、來自執(zhí)行單元的反饋信息即標(biāo)志,按時(shí)間的順序發(fā)送一系列微操作控制信號(hào)(前兩者是組合邏輯控制器中微操作控制信號(hào)形成的主要因素)。(簡答題)
????????組合邏輯控制器的基本原理是依據(jù)執(zhí)行過程中的操作碼、當(dāng)前指令所處的執(zhí)行步驟等輸入信號(hào),用組合邏輯門電路直接、快速地形成并送出指令當(dāng)前執(zhí)行步驟要求的控制信號(hào)。與微程序控制器不同,組合邏輯控制器中的控制信號(hào)是由組合邏輯的門電路實(shí)現(xiàn)的,而不是存儲(chǔ)在控制存儲(chǔ)器中。
????????在組合邏輯控制器中,微程序控制器中的控制存儲(chǔ)器變成了時(shí)序控制信號(hào)形成部件,微程序控制器中的下地址形成部件變成了節(jié)拍發(fā)生器,而增加了指令譯碼器用于標(biāo)識(shí)每一條不同的指令。組合邏輯控制器通過這些邏輯部件,在執(zhí)行指令時(shí)生成一系列時(shí)序控制信號(hào),控制指令的執(zhí)行。
????????在指令執(zhí)行過程中,組合邏輯控制器中的時(shí)序系統(tǒng)會(huì)提供周期、節(jié)拍和脈沖等時(shí)序信號(hào),這些信號(hào)與各項(xiàng)操作相關(guān),用于規(guī)定各項(xiàng)操作所需的時(shí)間段和時(shí)機(jī)。時(shí)序信號(hào)是計(jì)算機(jī)操作的時(shí)間標(biāo)志,是計(jì)算機(jī)系統(tǒng)中各種操作的控制信號(hào)。
????????總的來說,組合邏輯控制器的基本原理是通過組合邏輯門電路和時(shí)序系統(tǒng)生成一系列控制信號(hào),以控制指令的執(zhí)行過程。這種控制器具有速度快、結(jié)構(gòu)簡單、修改方便等優(yōu)點(diǎn),但也有設(shè)計(jì)難度大、線路復(fù)雜的缺點(diǎn)。
3.5 微程序控制器原理
首先我們需要知道的三個(gè)概念:微指令、微程序、微操作
- 微指令(Microinstruction):微指令是機(jī)器指令轉(zhuǎn)換為一系列微操作的控制信號(hào),通常包含操作碼和地址碼字段。微指令具有非常具體和細(xì)致的操作控制功能,能夠直接控制硬件實(shí)現(xiàn)各種基本的操作。
- 微程序(Microprogram):微程序是機(jī)器指令的轉(zhuǎn)換序列,由一系列微指令組成。微程序通過將機(jī)器指令轉(zhuǎn)換為一系列微指令來實(shí)現(xiàn)對(duì)機(jī)器指令的精確控制。微程序控制器通過存儲(chǔ)器中的微程序表來執(zhí)行微指令序列,從而實(shí)現(xiàn)對(duì)機(jī)器指令的執(zhí)行。
- 微操作(Microoperation):微操作是計(jì)算機(jī)中最小執(zhí)行單位,通常由一組控制信號(hào)來控制。在微程序控制器中,微操作是由微指令控制的,用于實(shí)現(xiàn)對(duì)數(shù)據(jù)通路的各種基本操作。
1.微程序控制的基本原理(簡答題)
????????微程序控制的基本原理是將機(jī)器指令分解為基本的微命令序列,在制造CPU時(shí)固化在控制存儲(chǔ)器CM中,執(zhí)行一條機(jī)器指令時(shí),CPU依次從CM中取出微指令產(chǎn)生微命令。一條微指令包含的微命令控制實(shí)現(xiàn)一步(一個(gè)節(jié)拍)操作,若干條微指令組成一小段微程序解釋執(zhí)行一條機(jī)器指令。執(zhí)行過程如下:
-
根據(jù)計(jì)算機(jī)給出的第一條微指令的地址,從控制存儲(chǔ)器中取出第一條微指令。
-
微指令由操作控制部分和順序控制部分組成。操作控制部分產(chǎn)生微操作控制信號(hào),控制執(zhí)行部分完成規(guī)定的操作。順序控制部分中的直接順序控制部分放入微地址寄存器,順序控制部分的P字段和執(zhí)行部件反饋的狀態(tài)條件信息決定修改微地址寄存器中的值。
-
按地址寄存器中的值從控制存儲(chǔ)器中取出下一條微指令,繼續(xù)第二步,如此循環(huán),直到全部指令執(zhí)行完畢。
2.水平型微指令與垂直型微指令的區(qū)別
????????水平型微指令的特點(diǎn)是能夠定義并執(zhí)行多個(gè)并行操作的微指令。這種類型的微指令通常采用直接編碼、字段直接或間接編碼以及混合編碼的方式。在執(zhí)行一條機(jī)器指令所需的微指令數(shù)目方面,水平型微指令比垂直型微指令少,因此執(zhí)行速度更快。此外,水平型微指令的微程序結(jié)構(gòu)相對(duì)較短,但需要較長的微指令結(jié)構(gòu)來換取。
????????相比之下,垂直型微指令采用類似機(jī)器指令操作碼的方式,在微指令字中設(shè)置微操作碼字段,由微操作碼規(guī)定微指令的功能。垂直型微指令的并行操作能力較差,通常只能實(shí)現(xiàn)一個(gè)微操作,控制1~2個(gè)信息傳送通路,效率較低,執(zhí)行一條機(jī)器指令所需的微指令數(shù)目多,執(zhí)行時(shí)間長。然而,垂直型微指令與機(jī)器指令相似,因此容易掌握和利用,編程比較簡單。
? ? ? ? 水平型微指令
? ? ? ? 垂直型微指令
3.微指令編碼方式(直接編碼法、分段直接編碼法)
? ? ?①直接編碼法(不譯法):微指令操作控制字段的每一位都直接表示一個(gè)微命令,該位為“1”,表示執(zhí)行這個(gè)微命令。
????????這種方法的優(yōu)點(diǎn)是結(jié)構(gòu)簡單,并行性強(qiáng),無需譯碼,速度快。
? ? ? ? 缺點(diǎn)是微指令字長過長,n個(gè)微指令就要要求微指令的操作字段有n位,造成控存容量極大。
????????
? ? ? ? ②分段直接編碼法:將微指令的控制字段分成若干“段”,每段經(jīng)譯碼后發(fā)出控制信號(hào)。這種方法的優(yōu)點(diǎn)是可以縮短微指令字長。然而,需要通過譯碼電路后再發(fā)出微命令,因此比直接編碼方式慢。
????????
????????如上圖,(PC)->MAR和1->R這兩個(gè)微操作是可以并行的執(zhí)行的,所以我們把這兩個(gè)微操作放到不同的段里面,這兩個(gè)微操作在段內(nèi)會(huì)有與之相對(duì)應(yīng)的編碼,這個(gè)編碼經(jīng)過譯碼器的譯碼就會(huì)發(fā)出相應(yīng)的控制信號(hào),并且這兩個(gè)的控制信號(hào)是并行的發(fā)出的。
(PC)->MAR和(PC)+1->PC這兩個(gè)微操作是互斥的,可以放到同一個(gè)段。
第5章:匯編語言
1.指令語句、偽指令語句的語句格式
????????指令語句,也稱為可執(zhí)行語句,是用于指導(dǎo)計(jì)算機(jī)執(zhí)行特定操作的語句。指令語句通常包括操作符和操作數(shù),操作符指定要執(zhí)行的操作,而操作數(shù)指定參與操作的數(shù)據(jù)或變量。指令語句在程序執(zhí)行過程中被直接解釋或編譯成機(jī)器代碼,并由計(jì)算機(jī)硬件執(zhí)行。例如,在C語言中,賦值語句“a = b + c;”就是一個(gè)指令語句,它告訴計(jì)算機(jī)將變量b和c的值相加,并將結(jié)果存儲(chǔ)在變量a中。
????????偽指令語句是用于指導(dǎo)編程器或匯編器生成特定代碼的語句。它們不是直接指導(dǎo)計(jì)算機(jī)執(zhí)行操作的語句,而是通過指導(dǎo)編譯器或匯編器的行為來間接影響程序的執(zhí)行。偽指令語句通常用于定義程序的結(jié)構(gòu)、控制程序的流程、設(shè)置符號(hào)等。例如,在匯編語言中,偽指令“ORG 0x1000”用于指定程序代碼的起始地址為0x1000。
????????指令語句、偽指令語句都有相同的語句格式,包括4個(gè)字段
名字 | 操作符 | 操作數(shù) | ;注釋 |
名字字段:用來標(biāo)記字段的名字,并且一定是用冒號(hào)“:”作為名字字段的結(jié)束符。
操作符字段:指令語句中。操作符如MOV、ADD、SUB等,表示程序在運(yùn)行時(shí)完成的功能。在偽指令語句中,數(shù)據(jù)定義指令DB、DW、DD,段定義偽指令SEGMENT,過程定義偽指令PROC。
操作數(shù)字段:本字段需要幾個(gè)操作數(shù),多個(gè)操作數(shù)之間要用,進(jìn)行分隔。
注釋字段:用“;”進(jìn)行注釋,學(xué)過c、c++高級(jí)語言的應(yīng)該都知道的。
2.匯編語言程序結(jié)構(gòu)
①數(shù)據(jù)段
數(shù)據(jù)段用于存儲(chǔ)程序中靜態(tài)和全局變量的數(shù)據(jù)。
它通常包含初始化的數(shù)據(jù),這些數(shù)據(jù)在程序開始執(zhí)行時(shí)就被加載到內(nèi)存中。
數(shù)據(jù)段通常被設(shè)置為只讀,以防止程序意外地修改這些數(shù)據(jù)。
?
②堆棧段
堆棧段用于存儲(chǔ)局部變量、函數(shù)調(diào)用的返回地址以及程序中的臨時(shí)數(shù)據(jù)。
堆棧是一個(gè)后進(jìn)先出(LIFO)的數(shù)據(jù)結(jié)構(gòu),最后一個(gè)進(jìn)入堆棧的元素將是第一個(gè)出來的。
堆棧的增長和縮小通常由匯編語言中的PUSH和POP指令控制。
?
③代碼段
代碼段用于存儲(chǔ)程序的指令。
它包含程序開始執(zhí)行時(shí)需要執(zhí)行的機(jī)器代碼。
代碼段通常被設(shè)置為只讀,以防止程序意外地修改其指令。
下面是一個(gè)最簡單的x8086的匯編語言程序的實(shí)例:
;數(shù)據(jù)段
DATAS SEGMENT STRING DB 'Hello, World!',13,10,'$' ; 定義字符串常量,其中13代表回車,10代表換行(Line Feed),'$'代表字符串結(jié)束符 DATAS ENDS
;代碼段 CODES SEGMENT ASSUME CS:CODES, DS:DATAS ; 假設(shè)代碼段寄存器為CODES,數(shù)據(jù)段寄存器為DATAS START: MOV AX, DATAS ; 將DATAS段的地址賦值給AX寄存器 MOV DS, AX ; 將AX寄存器的值賦值給DS數(shù)據(jù)段寄存器,初始化數(shù)據(jù)段寄存器 LEA DX, STRING ; 將字符串STRING的偏移地址加載到DX寄存器中 MOV AH, 9 ; 將9賦值給AH寄存器,代表使用DOS中斷21H的9號(hào)功能,用于在屏幕上顯示字符串 INT 21H ; 調(diào)用DOS中斷21H,執(zhí)行相應(yīng)的功能 MOV AH, 4CH ; 將4CH賦值給AH寄存器,代表使用DOS中斷21H的4CH號(hào)功能,用于退出程序 INT 21H ; 調(diào)用DOS中斷21H,執(zhí)行退出程序的功能 CODES ENDS END START ; 匯編程序結(jié)束,從START標(biāo)簽開始執(zhí)行
3.程序設(shè)計(jì)(分支、循環(huán),掌握【例題5-10】)(綜合題)??
①順序結(jié)構(gòu)
????????順序結(jié)構(gòu)是最簡單的程序結(jié)構(gòu),它按照指令的順序逐條執(zhí)行。在x86匯編語言中,順序結(jié)構(gòu)由一系列指令組成,按照它們?cè)诖a段中的順序執(zhí)行。沒有條件或跳轉(zhuǎn)指令中斷程序的正常執(zhí)行流程。
例如:
MOV AX, 10 ; 將10移入AX寄存器
ADD AX, 5 ; 將5加到AX寄存器上
????????在這個(gè)例子中,兩條指令按照它們?cè)诖a中的順序執(zhí)行,首先是將10移入AX寄存器,然后是將5加到AX寄存器上。
常用指令
MOV:移動(dòng)指令。用于將數(shù)據(jù)從一個(gè)位置復(fù)制到另一個(gè)位置。
例如:
MOV AX, [BX]
?將內(nèi)存地址為BX的內(nèi)容復(fù)制到AX寄存器中。LEA:加載有效地址指令。用于將操作數(shù)的有效地址加載到寄存器中。
例如:
LEA BX, [AX]
?將AX寄存器的值作為偏移量加載到BX寄存器中。ADD:加法指令。用于將兩個(gè)操作數(shù)相加,并將結(jié)果存儲(chǔ)在目標(biāo)操作數(shù)中。
例如:
ADD AX, BX
?將BX寄存器的值加到AX寄存器的值上,并將結(jié)果存儲(chǔ)在AX中。SUB:減法指令。用于從第一個(gè)操作數(shù)中減去第二個(gè)操作數(shù),并將結(jié)果存儲(chǔ)在目標(biāo)操作數(shù)中。
例如:
SUB AX, BX
?從AX寄存器的值中減去BX寄存器的值,并將結(jié)果存儲(chǔ)在AX中。TEST:測(cè)試指令。用于對(duì)操作數(shù)執(zhí)行按位與運(yùn)算,并根據(jù)結(jié)果設(shè)置標(biāo)志位。
例如:
TEST AX, BX
?將AX和BX執(zhí)行按位與運(yùn)算,并根據(jù)結(jié)果設(shè)置標(biāo)志位。CMP:比較指令。用于比較兩個(gè)操作數(shù),并根據(jù)結(jié)果設(shè)置標(biāo)志位。
例如:
CMP AX, BX
?比較AX和BX的值,并根據(jù)結(jié)果設(shè)置標(biāo)志位。DEC:遞減指令。用于將操作數(shù)的值減1。
例如:DEC BX
?將BX寄存器的值減1。INC:遞增指令。用于將操作數(shù)的值加1。
例如:INC BX
?將BX寄存器的值加1。AND:按位與指令。用于對(duì)操作數(shù)執(zhí)行按位與運(yùn)算,并將結(jié)果存儲(chǔ)在目標(biāo)操作數(shù)中。例如:
AND AX, BX
?將AX和BX執(zhí)行按位與運(yùn)算,并將結(jié)果存儲(chǔ)在AX中。- XOR:按位異或指令。用于對(duì)操作數(shù)執(zhí)行按位異或運(yùn)算,并將結(jié)果存儲(chǔ)在目標(biāo)操作數(shù)中。
????????例如:
XOR AX, BX
?將AX和BX執(zhí)行按位異或運(yùn)算,并將結(jié)果存儲(chǔ)在AX中。? ? 11.OR:按位或指令。用于對(duì)操作數(shù)執(zhí)行按位或運(yùn)算,并將結(jié)果存儲(chǔ)在目標(biāo)操作數(shù)中。
????????例如:
OR AX, BX
?將AX和BX執(zhí)行按位或運(yùn)算,并將結(jié)果存儲(chǔ)在AX中。? ? 12.SHL?和?SAL:左移指令。SHL將操作數(shù)的位向左移動(dòng)指定的位數(shù),SAL等價(jià)于SHL 1。
????????例如:
SHL BX, 2
?將BX寄存器的值向左移動(dòng)2位。????13.SHR?和?SAR:右移指令。SHR執(zhí)行算術(shù)右移(保持符號(hào)位),SAR執(zhí)行邏輯右移(復(fù)制符號(hào)位)。
????????例如:
SHR BX, 2
?將BX寄存器的值向右移動(dòng)2位并保持符號(hào)位不變(算術(shù)右移)。
②分支結(jié)構(gòu)
????????分支結(jié)構(gòu)允許程序根據(jù)某個(gè)條件改變執(zhí)行流程。在x86匯編語言中,分支結(jié)構(gòu)通常使用跳轉(zhuǎn)指令(如JMP)來實(shí)現(xiàn)。根據(jù)條件的不同,程序可以跳轉(zhuǎn)到代碼段中的不同位置。
例如:
CMP AX, 15 ; 比較AX寄存器和15
JE Label ; 如果AX等于15,則跳轉(zhuǎn)到Label標(biāo)簽處
????????在這個(gè)例子中,CMP指令將AX寄存器的值與15進(jìn)行比較,并根據(jù)比較結(jié)果設(shè)置標(biāo)志位。JE指令檢查零標(biāo)志位(ZF),如果ZF被設(shè)置(即AX等于15),則程序跳轉(zhuǎn)到Label標(biāo)簽處。
常用指令:
1.JMP:無條件跳轉(zhuǎn)指令。用于將程序的執(zhí)行流無條件地跳轉(zhuǎn)到指定的地址處執(zhí)行。
????????例如:
JMP [BX]
?將程序的執(zhí)行流跳轉(zhuǎn)到內(nèi)存地址為BX處執(zhí)行。2.JC, JNC, JE/JZ, JS, JNS, JO, JNO, JP/JPE, JNP/JPO:條件跳轉(zhuǎn)指令。根據(jù)特定的條件標(biāo)志(如零標(biāo)志、進(jìn)位標(biāo)志、符號(hào)標(biāo)志等)進(jìn)行有條件的跳轉(zhuǎn)。這些指令分別表示“進(jìn)位時(shí)跳轉(zhuǎn)”、“非進(jìn)位時(shí)跳轉(zhuǎn)”、“相等/零時(shí)跳轉(zhuǎn)”、“負(fù)數(shù)時(shí)跳轉(zhuǎn)”、“正數(shù)時(shí)跳轉(zhuǎn)”、“溢出時(shí)跳轉(zhuǎn)”、“非溢出時(shí)跳轉(zhuǎn)”、“奇偶校驗(yàn)時(shí)跳轉(zhuǎn)”和“非奇偶校
③循環(huán)結(jié)構(gòu)
????????循環(huán)結(jié)構(gòu)允許程序重復(fù)執(zhí)行一段代碼,直到滿足某個(gè)終止條件。在x86匯編語言中,循環(huán)結(jié)構(gòu)通常使用LOOP指令實(shí)現(xiàn)。LOOP指令根據(jù)CX寄存器的值來控制循環(huán)的次數(shù)。
例如:
MOV CX, 10 ; 將10移入CX寄存器
LOOPE Label ; 如果CX不為0且ZF被設(shè)置(即CX大于0且上次循環(huán)的ZF被清除),則跳轉(zhuǎn)到Label標(biāo)簽處
????????在這個(gè)例子中,MOV指令將10移入CX寄存器,作為循環(huán)的次數(shù)。LOOPE指令檢查CX的值和零標(biāo)志位(ZF)。如果CX不為0且ZF被設(shè)置(即CX大于0且上次循環(huán)的ZF被清除),則程序跳轉(zhuǎn)到Label標(biāo)簽處,并繼續(xù)執(zhí)行循環(huán)體中的代碼。當(dāng)CX變?yōu)?時(shí),循環(huán)結(jié)束。
DATA SEGMENT // 定義一個(gè)數(shù)據(jù)段
NUM DB ? // 定義一個(gè)字節(jié)大小的變量NUM,?表示其值尚未確定
DA1 DB 2,-3,-4,-5,34,-4,0,3,4,24,-8 // 定義一個(gè)字節(jié)數(shù)組DA1,其包含了11個(gè)元素
COUNT EQU $ - DA1 // 定義COUNT為DA1的長度($代表當(dāng)前位置,因此$ - DA1就是DA1的長度)
DATA ENDS // 數(shù)據(jù)段結(jié)束 STAK1 SEGMENT PARA STACK // 定義一個(gè)堆棧段 DW 20H DUP(0) // 分配20H(32字節(jié))的空間,并初始化為0
STAK1 ENDS // 堆棧段結(jié)束 CODE SEGMENT // 定義一個(gè)代碼段 ASSUME CS:CODE,DS:DATA,SS:STAK1 // 設(shè)定段寄存器:CS指向CODE,DS指向DATA,SS指向STAK1 BEING: MOV AX,DATA // 將DATA段的地址加載到AX寄存器中 MOV DS,AX // 將AX的值加載到DS寄存器中,DS是數(shù)據(jù)段寄存器 MOV SI, OFFSET DA1 // 將DA1的偏移地址加載到SI寄存器中,SI是源索引寄存器 XOR BL, BL // BL寄存器清零,BL將用于計(jì)算負(fù)數(shù)的數(shù)量
EXCHANG: MOV AL,[SI] // 將SI指向的內(nèi)存地址的值加載到AL寄存器中 XOR AL,[SI+1] // 將AL中的值與SI+1指向的內(nèi)存地址的值進(jìn)行異或操作 TEST AL,80H // 測(cè)試AL寄存器的最高位是否為1,如果是則說明AL中的數(shù)是負(fù)數(shù) JE NEXT // 如果最高位不是1(即JE判斷為相等),則跳轉(zhuǎn)到NEXT標(biāo)簽處執(zhí)行 INC BL // 如果AL是負(fù)數(shù),BL加1
NEXT: INC SI // SI加1,指向下一個(gè)元素 LOOP EXCHANG // 循環(huán)執(zhí)行EXCHANG標(biāo)簽處的代碼,直到遍歷完所有元素 MOV NUM, BL // 將BL的值(負(fù)數(shù)的個(gè)數(shù))存儲(chǔ)到NUM變量中 MOV AH, 4CH // 將4CH加載到AH寄存器中,4CH是DOS系統(tǒng)中結(jié)束程序的調(diào)用代碼 INT 21H // 通過軟中斷21H調(diào)用DOS系統(tǒng)服務(wù),結(jié)束程序運(yùn)行 CODE ENDS // 代碼段結(jié)束 END BEING // 程序結(jié)束,返回到BEGIN標(biāo)簽處
第6章:存儲(chǔ)系統(tǒng)
博主正在努力整理中請(qǐng)稍等~~~~
1.存儲(chǔ)器的主要功能、層次結(jié)構(gòu)
????????存儲(chǔ)器的功能:存儲(chǔ)器的主要功能是存儲(chǔ)數(shù)據(jù)和指令,并在需要時(shí)提供快速訪問。存儲(chǔ)器層次結(jié)構(gòu)是為了滿足計(jì)算機(jī)系統(tǒng)對(duì)速度、容量和價(jià)格的需求而發(fā)展起來的。
? ? ? ? 存儲(chǔ)器的層次結(jié)構(gòu):? ??
- CPU寄存器:這是存儲(chǔ)器層次結(jié)構(gòu)的最內(nèi)層,直接與CPU相連,訪問速度最快,但容量非常有限。CPU寄存器用于保存CPU當(dāng)前執(zhí)行的指令和數(shù)據(jù)。
- 高速緩存(Cache):高速緩存是位于CPU和主存儲(chǔ)器之間的一層存儲(chǔ)器,用于解決CPU和主存儲(chǔ)器之間速度不匹配的問題。高速緩存利用局部性原理,將CPU頻繁訪問的數(shù)據(jù)和指令緩存到離CPU更近的位置,以減少訪問主存儲(chǔ)器的次數(shù),從而提高系統(tǒng)的性能。
- 主存儲(chǔ)器(Main Memory):主存儲(chǔ)器是計(jì)算機(jī)系統(tǒng)中的一個(gè)主要部件,用于保存進(jìn)程運(yùn)行時(shí)的程序和數(shù)據(jù)。CPU的控制部件只能從主存儲(chǔ)器中取得指令和數(shù)據(jù)。數(shù)據(jù)能夠從主存儲(chǔ)器中讀取并裝入到寄存器中,或者從寄存器存入到主存儲(chǔ)器。CPU與外圍設(shè)備交換的信息一般也依托于主存儲(chǔ)器地址空間。
- 磁盤存儲(chǔ):磁盤存儲(chǔ)是一種輔助存儲(chǔ)器,用于長期保存大量數(shù)據(jù)。磁盤存儲(chǔ)器的容量比主存儲(chǔ)器大得多,但訪問速度較慢。
- 固定磁盤和可移動(dòng)存儲(chǔ)介質(zhì):固定磁盤是一種永久性的存儲(chǔ)介質(zhì),而可移動(dòng)存儲(chǔ)介質(zhì)則可以隨時(shí)取出或更換。它們主要用于數(shù)據(jù)的長期保存和備份。
? ? ? ? 存儲(chǔ)器按照存取方式分類:
- 隨機(jī)存儲(chǔ)器(Random Access Memory,RAM):任何存儲(chǔ)單元的內(nèi)容都能被隨機(jī)存取,且存取時(shí)間和存儲(chǔ)單元的物理位置無關(guān)。RAM是計(jì)算機(jī)系統(tǒng)中的主要存儲(chǔ)器,用于存儲(chǔ)程序和數(shù)據(jù),并且允許對(duì)其進(jìn)行讀寫操作。
- 順序存儲(chǔ)器(Sequential Access Memory,SAM):只能按某種順序來存取,存取時(shí)間和存儲(chǔ)單元的物理位置有關(guān)。SAM通常用于存儲(chǔ)大量的數(shù)據(jù),如磁帶或線性磁帶文件。
- 直接存取存儲(chǔ)器(Direct Access Storage,DAM):既有隨機(jī)存取特性,也有順序存取特性。DAM先直接選取信息所在區(qū)域,然后按順序方式進(jìn)行存取。這種存儲(chǔ)器通常用于大型數(shù)據(jù)庫和文件系統(tǒng)。
- 只讀存儲(chǔ)器(ROM)是一種只能讀取數(shù)據(jù)而不能寫入數(shù)據(jù)的存儲(chǔ)器。數(shù)據(jù)一旦寫入ROM后,就無法更改,除非重新寫入新的數(shù)據(jù)。ROM的特點(diǎn)是存儲(chǔ)的數(shù)據(jù)穩(wěn)定,斷電后數(shù)據(jù)不會(huì)丟失,并且結(jié)構(gòu)較簡單,使用方便。因此,ROM常用于存儲(chǔ)程序和數(shù)據(jù),如BIOS、固件等。
? ? ? ??
2.存儲(chǔ)器容量擴(kuò)展(地址分配)(綜合題)
? ? ? ? ①位擴(kuò)展:位擴(kuò)展相當(dāng)于將兩個(gè)存儲(chǔ)芯片用相同的地址線接入,這意味著數(shù)地址線的數(shù)目只和芯片的存儲(chǔ)單元有關(guān),芯片每一次讀寫的數(shù)據(jù)字長又和數(shù)據(jù)線的數(shù)目有關(guān)。當(dāng)CPU訪問存儲(chǔ)單元時(shí)候,每一個(gè)芯片的同樣位置上的存儲(chǔ)單元被選中,并分別輸出四位數(shù)據(jù)到不同的數(shù)據(jù)線上。這種方式可以擴(kuò)大存儲(chǔ)器的位數(shù),但存儲(chǔ)單元的數(shù)目不變,每個(gè)單元的位數(shù)增加。
? ? ? ? ②字?jǐn)U展:字?jǐn)U展是通過增加存儲(chǔ)字的數(shù)量來實(shí)現(xiàn)存儲(chǔ)器容量的擴(kuò)展。例如,使用1K4的存儲(chǔ)芯片,可以通過字?jǐn)U展成為1K8的存儲(chǔ)芯片。這種方式可以增加存儲(chǔ)字的數(shù)量,但每個(gè)存儲(chǔ)單元的位數(shù)不變。
? ? ? ? ③字位擴(kuò)展:字位擴(kuò)展是同時(shí)進(jìn)行字?jǐn)U展和位擴(kuò)展的存儲(chǔ)器容量擴(kuò)展方式。通過先進(jìn)行位擴(kuò)展,滿足位要求的芯片再使用字?jǐn)U展,對(duì)芯片進(jìn)行擴(kuò)展。例如,使用1K4位的芯片可以擴(kuò)充成為4K8位的芯片。這種方式可以同時(shí)增加存儲(chǔ)器的位數(shù)和字的數(shù)量。
3.DRAM刷新方式
? ? ? ? DRAM和SRAM的區(qū)別:?? ? ?
????????因?yàn)镈RAM是采用的電容的方式存儲(chǔ)的信息所以在一段時(shí)間內(nèi)我們就必須要對(duì)DRAM寄存器進(jìn)行刷新,不然會(huì)有寄存器的數(shù)據(jù)丟失。
? ? ? ? DRAM刷新也就是讀取出一行的數(shù)據(jù),然后再寫回去,所以一次刷新操作占用一個(gè)讀寫周期。
? ? ? ? DRAM的刷新方式分類:
- 集中刷新:在規(guī)定的一個(gè)刷新周期內(nèi),對(duì)全部存儲(chǔ)單元集中一段時(shí)間逐行進(jìn)行刷新。這種方式在刷新過程中需要停止讀/寫操作,存在“死區(qū)”。以一個(gè)128×128的矩陣存儲(chǔ)芯片為例,存儲(chǔ)周期為0.5μs,刷新周期為2ms。一個(gè)刷新周期內(nèi)需要刷新128行,每行刷新的時(shí)間為0.5μs,所以全部刷新的時(shí)間為128×0.5μs=64μs。在刷新周期內(nèi),不能進(jìn)行讀寫操作,因此這段時(shí)間被稱為“死區(qū)”,死區(qū)的時(shí)間占比為128÷4000×100%=3.2%。
- 分散刷新:將每行存儲(chǔ)單元的刷新分散到每個(gè)存儲(chǔ)周期內(nèi)完成,即將刷新時(shí)間分散到每個(gè)讀寫周期中。這種方式可以避免“死區(qū)”,但會(huì)延長存取周期,降低整個(gè)系統(tǒng)的速度。
- 異步刷新:結(jié)合了集中刷新和分散刷新的特點(diǎn),將刷新分散到多個(gè)讀/寫周期中完成,充分利用了最大刷新間隔為2ms的特點(diǎn),既縮短了“死區(qū)”,又充分利用了整個(gè)系統(tǒng)的性能。
4.程序訪問的局部性原理
????????程序訪問的局部性原理,也稱為局部引用原理,是指程序在執(zhí)行過程中,對(duì)數(shù)據(jù)的訪問往往呈現(xiàn)出某種局部性特征,即在一個(gè)較短的時(shí)間間隔內(nèi),程序?qū)㈩l繁地訪問存儲(chǔ)器中的某個(gè)局部區(qū)域的數(shù)據(jù),而不是訪問整個(gè)存儲(chǔ)器中的數(shù)據(jù)。這種局部性特征主要表現(xiàn)在以下幾個(gè)方面:
- 時(shí)間局部性:如果一個(gè)數(shù)據(jù)被訪問,那么在不久的將來,這個(gè)數(shù)據(jù)可能會(huì)再次被訪問。這是因?yàn)槌绦蛑写嬖诖罅康难h(huán)和遞歸等重復(fù)操作的代碼。
- 空間局部性:如果一個(gè)數(shù)據(jù)被訪問,那么與這個(gè)數(shù)據(jù)相鄰的數(shù)據(jù)也可能會(huì)被訪問。這是因?yàn)槌绦蛑泻芏嗖僮鞫际菍?duì)數(shù)組、結(jié)構(gòu)體等連續(xù)存儲(chǔ)的數(shù)據(jù)進(jìn)行操作。
利用程序訪問的局部性原理,可以采取一些優(yōu)化措施來提高程序的執(zhí)行效率,例如:
- 緩存技術(shù):將頻繁訪問的數(shù)據(jù)緩存在高速緩存中,以減少對(duì)主存的訪問次數(shù)。
- 預(yù)取技術(shù):在程序執(zhí)行過程中,提前將即將被訪問的數(shù)據(jù)從主存中讀入到高速緩存中。
- 塊交換技術(shù):將一組連續(xù)的數(shù)據(jù)作為一個(gè)塊進(jìn)行交換,以減少訪問不同塊數(shù)據(jù)時(shí)的開銷。
- 分頁和分段技術(shù):將主存劃分為多個(gè)頁面或段,每個(gè)頁面或段的大小與高速緩存的大小相匹配,以充分利用高速緩存的空間。
? ? ? ? 也就是為什么會(huì)有虛擬內(nèi)存的引入,就是要把大的程序分開的放入內(nèi)存中,因?yàn)閮?nèi)存是不夠使用的如果是很大的程序的話。
5.Cache的地址映射方式
全相聯(lián)映射:主存塊可以放在 Cache 的任意位置。
直接映射:每個(gè)主存塊只能放到一個(gè)特定的位置:
Cache塊號(hào) = 主存塊號(hào) % Cache總塊數(shù)
組相聯(lián)映射:Cache塊分為若干組,每個(gè)主存塊可放到特定分組中的任意一個(gè)位置: 組號(hào) = 主存塊號(hào) % 分組數(shù)
(一)、全相聯(lián)映射(隨意放)
CPU 訪問主存地址 1…1101001110:
①主存地址的前22位,對(duì)比Cache中所有塊的標(biāo)記;
②若標(biāo)記匹配且有效位=1,則Cache命中,訪問塊內(nèi)地址為 001110 的單元。
③若未命中或有效位 = 0,則正常訪問主存。
(二)、直接映射(只能放固定位置)
直接映射,主存塊在Cache中的位置 = 主存塊號(hào) % Cache總塊數(shù)。
若 Cache總塊數(shù) =2^n則主存塊號(hào)末尾n位直接反映它在Cache 中的位置。將主存塊號(hào)的其余位作為標(biāo)記即可。
此時(shí)主存地址為:
CPU 訪問主存地址 0…01000 001110 :
①根據(jù)主存塊號(hào)的后 3位確定Cache行 。
②若主存塊號(hào)的前 19 位與Cache標(biāo)記匹配且有效位=1,則Cache命中,訪問塊內(nèi)地址為 001110 的單元。
③若未命中或有效位=0,則正常訪問主存。
(三)、組相聯(lián)映射(可放到特定分組)
n 路組相聯(lián)映射 —— n塊為一組
eg:2路組相聯(lián)映射——2塊為一組
組相聯(lián)映射,所屬分組 = 主存塊號(hào) %分組數(shù)
CPU 訪問主存地址1…1101001110 :
①根據(jù)主存塊號(hào)的后 2位確定所屬分組號(hào)。
②若主存塊號(hào)的前20位與分組內(nèi)的某個(gè)標(biāo)記匹配且有位=1, 則Cache命中,訪問塊內(nèi)地址為 001110的單元。
③若未命中或有效位=0,則正常訪問主存。
第7章:輸入/輸出系統(tǒng)
1.程序中斷方式與DMA方式的主要區(qū)別(簡答題)
????????
?????????雖然中斷驅(qū)動(dòng)方式解決了程序直接控制方式的問題,但是每一次只能讀/寫一個(gè)字,導(dǎo)致CPU頻繁切換,耗費(fèi)了很多時(shí)間。于是人們又發(fā)明了直接存儲(chǔ)器訪問方式,其基本思想是在外設(shè)和主存之間開辟直接的數(shù)據(jù)交換通路。
? ? ? ? DMA方式的特點(diǎn)是:數(shù)據(jù)傳送的基本單位是數(shù)據(jù)塊;所傳送的數(shù)據(jù)是從設(shè)備送內(nèi)存,或者相反;不需要經(jīng)過cpu的中轉(zhuǎn)了,僅在傳送一個(gè)或多個(gè)數(shù)據(jù)塊的開始和結(jié)束時(shí),才需中斷CPU,請(qǐng)求干預(yù),整塊數(shù)據(jù)的傳送是在DMA控制器控制下完成的。
? ? ? ? 最大區(qū)別:
1.DMA方式是一次傳遞一個(gè)數(shù)據(jù)塊,而程序中斷驅(qū)動(dòng)一次是傳輸一個(gè)字,兩者的數(shù)據(jù)傳送的單位不同。
2.DMA方式是不需要cpu的中轉(zhuǎn),直接在磁盤和主存中建立通道,只需要在完成和開始的時(shí)候告訴CPU就可以了,減少了中斷處理,cpu不需要頻繁切換效率高。
2.I/O設(shè)備的編址方式
????????獨(dú)立編址是指為每個(gè)I/O設(shè)備分配一個(gè)獨(dú)立的地址空間。在這種方式下,每個(gè)I/O設(shè)備都有自己的一組地址碼,通過這些地址碼來訪問I/O設(shè)備。這種方式的特點(diǎn)是簡單易行,對(duì)于小型系統(tǒng)來說比較適用。但隨著系統(tǒng)規(guī)模的不斷擴(kuò)大,I/O設(shè)備數(shù)量的不斷增加,獨(dú)立編址方式會(huì)導(dǎo)致地址碼資源浪費(fèi),管理維護(hù)也比較困難。
????????統(tǒng)一編址則是指將所有的I/O設(shè)備統(tǒng)一編址,形成一個(gè)共同的地址空間。在這個(gè)地址空間中,每個(gè)I/O設(shè)備都被看作是內(nèi)存單元的一部分,具有自己的地址和數(shù)據(jù)線。這種方式的特點(diǎn)是簡單方便,易于管理維護(hù),而且可以充分利用地址碼資源。但統(tǒng)一編址方式需要專門的硬件支持,實(shí)現(xiàn)起來比較復(fù)雜,且可能會(huì)與內(nèi)存發(fā)生地址沖突。
3.DMA方式
????????
DMA方式的優(yōu)點(diǎn):
- 速度快:由于DMA方式實(shí)現(xiàn)了硬件設(shè)備和主存之間的直接數(shù)據(jù)傳輸,因此傳輸速度非常快,可以大大提高系統(tǒng)的效率。
- 減輕CPU負(fù)擔(dān):在DMA方式下,硬件設(shè)備自主地進(jìn)行數(shù)據(jù)傳輸,不需要CPU的干預(yù),這使得CPU可以騰出更多的時(shí)間處理其他任務(wù),提高了系統(tǒng)的處理能力。
- 實(shí)現(xiàn)并行處理:多個(gè)硬件設(shè)備可以同時(shí)使用DMA方式進(jìn)行數(shù)據(jù)傳輸,從而實(shí)現(xiàn)并行處理,進(jìn)一步提高系統(tǒng)的性能。
DMA方式的缺點(diǎn):
- 成本高:實(shí)現(xiàn)DMA方式需要增加相應(yīng)的硬件設(shè)備和控制邏輯,這會(huì)增加系統(tǒng)的成本。
- 設(shè)計(jì)復(fù)雜度高:由于DMA方式涉及到硬件設(shè)備和主存的直接交互,因此需要精心設(shè)計(jì)相關(guān)的控制邏輯和數(shù)據(jù)傳輸協(xié)議,增加了設(shè)計(jì)的復(fù)雜度。
- 可能產(chǎn)生沖突:如果多個(gè)硬件設(shè)備同時(shí)使用DMA方式進(jìn)行數(shù)據(jù)傳輸,可能會(huì)產(chǎn)生數(shù)據(jù)沖突或數(shù)據(jù)錯(cuò)誤的情況。因此,需要設(shè)計(jì)合理的沖突避免機(jī)制或仲裁機(jī)制來確保數(shù)據(jù)傳輸?shù)恼_性。
DMA傳送方式主要有以下幾種:
- 周期挪用:這種方式下,當(dāng)CPU訪問主存時(shí),DMA控制器挪用或占用一部分主存總線的時(shí)間,從而實(shí)現(xiàn)數(shù)據(jù)傳輸。
- 停止CPU訪存:在這種方式下,當(dāng)進(jìn)行DMA傳送時(shí),CPU停止訪問主存,從而讓出總線給DMA控制器使用。
- 分時(shí)共享:這種方式下,CPU和DMA控制器交替地控制總線,從而實(shí)現(xiàn)數(shù)據(jù)傳輸。這種方式不需要停止CPU的訪存操作,但可能會(huì)影響CPU的效率。