@(e 計算機)
這一部分主要介紹了計算機的巨集觀結構,馮諾依曼式的經典模型。模型的組成是:cpu,記憶體,輸入輸出和連線這三部分的匯流排。其核心是實現儲存程式,並且cpu逐條執行程式指令來執行程式。
需要理解上面的原理圖,其實就是二進位制數的科學表達法。
為什麼要把浮點數規則化(就是尾數第一位必須非0)?
原因是這樣才可以提高精度,比如尾數的二進位制表達是:浮點數的表示範圍:0.000000003
,可能你通過改變指數規則化之後就能表達更多的尾數:
0.3141593653
。 就是因為有了規則化的操作,在計算機中64位的標準雙精度浮點數(double)才會有恆定的15位有效精度。
只需要理解,尾數的表示範圍是[−名詞補充:移碼:1,1−
2−n]
,而最小的正整數的尾數是
0.5 ,根據規則化,其二進位制表達為:
0.1000000
。
浮點數的指數部分的一種數字表示方法。其實就是補碼把符號位取反就得到移碼。其由來是因為這樣設定有利於計算機電路運算。漢字編碼:
理解漢字的輸入碼,機器內部碼,字形碼,並有這三者明白計算機中漢字錄入,傳輸和顯示的原理。漢字的字模庫就是整個機器內部碼和字形碼的對照表。程式就是一系列指令的集合,cpu執行程式就是一條條讀取指令,然後按照指令的內容,乙個乙個的執行操作,這樣就是程式在執行。
指令的組成:操作碼(執行什麼操作)+ 運算元(對哪些位址的內容執行操作) + 結果儲存位址(操作最後的結果放在**) + 後繼儲存位址(該條指令結束後,下一條指令儲存在**?cpu會跳轉到這個位址繼續執行下一條指令,直到把整個程式的所有指令執行完)指令結構分類:擴充套件操作碼:關於擴充套件操作碼的概念這裡就不贅述了。主要講一下為什麼,擴充套件操作碼具有優越性。其本質是因為它根據位址碼的個數來動態地擴充套件操作碼的長度。在固定長度的指令長度的情況下豐富了指令的種類。
位址結構:位址結構的是位址的表達方式。比如有顯示(表達地)位址,就是直接給出你記憶體位址。有隱式(表達地)位址,給你乙個暫存器的名稱,告訴你你所要用的位址儲存在這個暫存器中,你需要到這個暫存器中去讀取這個位址。那麼為什麼說隱式位址簡化了位址結構呢?其原因是隱式位址是隱含約定它存在於暫存器中,我們只需要每次讀取暫存器中的位址就是所需位址,不需要把這個位址放在指令中,這樣就使指令結構簡化了。
按照指令中的顯式位址的個數,可以把位址分為:三位址指令,二位址指令,單位址指令和零位址指令。按照指令的基本結構不是必須要四個位址(目的操作時,源運算元,結果儲存位址,後繼儲存位址)嗎?名詞補充:原因是,這些位址都被隱式位址化了,它們隱含地儲存在某些暫存器中比如pc和ac(不理解這兩個名詞看下面)。以簡化指令結構的效果。
pc(program counter):被稱為指令指標。其實它是乙個暫存器,可以形象的理解為cpu讀取程式的針頭,它裡面儲存的位址,就是cpu的針頭現在指的位置。(pac:是cpu的乙個暫存器,用來累加值。在單位址指令中,也用來隱式的存放目的運算元,是隱式位址簡化指令的典型應用。
c)+n
−>pc
的解釋:
表現是cpu的指標pc,讀取完了一條指令,跳轉到下一條指令。其實質是pc內部儲存的是後繼儲存位址的內容,對於連續位址的程式,pc就本身每操作一步就累加一次,以實現隱式的表達後繼儲存位址。
我們使用暫存器的隱式位址來減少指令中的顯示位址的個數,以達到簡化指令結構的目的。簡化了指令結構就可以,節省儲存和讀取時間,加快指令執行速度。但是也有壞處,簡化之後的靈活性不好。定址方式:
理解立即定址,直接定址,間接定址,堆疊定址的概念。間接定址的優點有:1.減少指令長度,因為間接定址是通過暫存器或者儲存器中儲存的位址間接訪問指定資料,而暫存器或者儲存器的名字通常比較短,這樣就減少了指令長度。2.增加靈活性,因為你給出的是乙個暫存器或者儲存器的名字,呼叫的是它們裡面儲存的位址。這樣它們儲存的位址不是永恆不變的,是可以改變的具有動態的靈活性和可重複利用性,實際類似於抽象度更高的c語言指標。理解暫存器間接定址的兩種典型指令的流程。
in為什麼自減是先減去1再讀取值,而自增是先讀取值再增加1?這裡實際上和堆疊定址的棧頂sp指標的操作有關,需要先了解書上關於堆疊定址的解釋再理解。c(r0
)+inc
−(r0
)
當記憶體增加一的時候,相當於出棧操作,而對於出棧操作我們總是先讀取它的值,再把它彈出(最後用它一次)。當然自減操作就對應入棧操作了。
堆疊定址的sp(stack pointer)指的是棧頂的指標。注意由於棧底是在高位址的方向所以出棧是sp
+1個字長。
名字解釋:實體地址:關於基址定址的程式重定向的一些解釋:在用高階語言(如c語言)編寫的程式,通常裡面也有位址,但是這些是虛擬位址,是理想化的位址,不是在記憶體中的實際實體地址(當然也不可能是,不同的計算機的實際位址肯定是不一樣的,不可能你的c程式在每個計算機中執行時都用的是相同的實體地址)(這裡實際設計到儲存抽象的概念,也就是高階語言程式設計師看到的是理想化的虛擬記憶體,它和實際的實體地址不是一一對應的),所以我們通過基址定址法,來實現虛擬位址到真實位址的轉換。這個轉換的實際過程就是以基址暫存器中提供的位址為基準,指令中的位址作為偏移量來實現虛擬到實際的對映。實體地址是計算機記憶體的實際編號,比如對於乙個大小為4g的記憶體,它上面的每乙個儲存單元都有它的編號(也就是位址),從0000h一直增長到ffffh。這些編號是永遠固定不變的,物理本質的,所以叫它實體地址。
關於基址加變址定址方式實現二維陣列範圍的解釋:操作
數有效地
址=基地
址+變地
址+位移
量 可以認為基位址是這個陣列的首位址,變位址是這個陣列的行號的起始位址,位移量是這個陣列的列號。
相對定址其實就是**指標(pc)相對於當前**指標(pc)的的跳轉而已。
堆疊用於子程式的多重呼叫:這是非常經典的堆疊的應用,甚至多個執行緒之間切換也是這樣的方法。
只需要理解,當前子程式執行完成之後應該跳轉回它的父程式,繼續執行父程式,而堆疊裡面記錄的就是跳轉到父親程式中間具體哪個位置開始,繼續執行父親程式。
這裡棧的「先進後出」的特性,很好的符合了子程式跳轉的層次需求,所以用棧來實現。
計算機組成原理筆記(一)
任何複雜運算和操作都轉化為二進位制 表示的指令,資料也用二進位制 來表示 將程式和資料儲存起來,讓計算機自動執行指令,完成各種複雜的運算操作 主要由控制器和運算器組成 1 運算器 功能 完成算術和邏輯運算 組成特點 主要由alu 算術邏輯單元 構成,執行算術 邏輯運算以及移位迴圈等操作,是cpu功能...
計算機組成原理 筆記
匯流排的意義 計算機系統部件之間的連線有兩種,一種是分散連線,一種是匯流排連線,因為當部件多的時候,根據排列組合公式,每兩個部件之間都用連線將變得不經濟並且難以實現,故匯流排的出現是為了是各部件之間的通訊體系實現最優化。匯流排是連線多個部件的資訊傳輸線,是個部件共享的傳輸介質。某一時刻只允許有乙個部...
計算機組成原理筆記
第一章 計算機系統概論 計算機分為硬體和軟體 硬體指各種組成的電子元器件 軟體分為系統軟體和應用軟體 系統軟體主要用來管理計算機系統,管理計算機資源,高效率運用資源,包括標準程式庫,語言處理程式,作業系統,資料庫管理系統,網路軟體等 應用軟體稱為應用程式,根據使用者的需求編制的各種應用程式 複雜的計...