資料介紹
這個題目是我臨時想的,不知道是否準確,一直想寫一個類似的東西,希望能夠引起童鞋們關注硬件并喜歡上硬件。
我是文科出生,研究生階段才轉向計算機,中間有很長一段時間都只做軟件理論相關研究和一些具體的軟件項目,包括編譯器、電力系統監控器、軟件測試工具研發等;直到2009年,才開始陸陸續續接觸一些硬件項目,說是硬件項目,其實主要是一些嵌入式的項目,如世界杯前做的3G轉Wifi和自己玩的一些小車和傳感器等。
在做嵌入式項目之前,壓根就沒接觸過硬件方面的開發知識,難度可想而知,什么叫編碼器、什么叫譯碼器、怎么做分頻、怎么做倍頻、怎么做A/D轉換、D/A等等,一系列的問題迎面而來。為了完成項目,只能硬著頭皮上,從最基礎的數字邏輯開始看起,從二進制、卡諾圖入手,逐漸深入到組合電路和時序電路,再結合一本叫做《計算機組成與設計-硬件/軟件接口》,才逐漸深入明白我們做的編譯器后端的具體工作原理,在此基礎上對軟件的各種性能問題有了更深刻的認識。
組合電路和時序電路是計算機原理的基礎課,組合電路描述的是單一的函數功能,函數輸出只與當前的函數輸入相關;時序電路則引入了時間維度,時序電路在通電的情況下,能夠保持狀態,電路的輸出不僅與當前的輸入有關,而且與前一時刻的電路狀態相關,如我們個人PC中的內存和CPU中的寄存器,均為時序電路。
說了這么多,我們學習的組合電路和時序電路在計算機中又是怎么一回事呢?為了便于理解,下面以一個大家都能接受的C語言程序開始,從上層向下層開始解釋。
void main(){
int a = 3, b = 5;
int sum = a b;
}
這個例子大家都能明白,main函數要做的事情就是實現兩個數的加法操作。這是我們人類的思維方式,但是計算機并不認識,如何讓計算機理解呢?于是,我們需要將上面這個程序翻譯成機器能理解的模樣,這時候就需要借助編譯器(如常見的gcc、msc等)將上面的程序翻譯成MIPS指令(不同的CPU有不同的指令集,包括X86指令集、MIPS指令集、Sparc指令集等,我們在這里用MIPS指令集,咱們的龍芯也是采用MIPS指令集),如下所示:
#下面的每條匯編代碼對應一個二進制
addi $t0, 0, 3 # a = 0 3, a保存在$t0寄存器中, 對應的二進制代碼為:0010 00** **** **** **** **** **** ****(這里的星號*表示二進制,這里暫時不關心)
addi $t1, 0, 5 # b = 0 5, b保存在$t1寄存器中
addi $t2, $t1, $t0 # sum = a + b, sum保存在$t2寄存器中
到這里,大家一定還在疑惑,不是說要翻譯成二進制代碼嗎?怎么是MIPS匯編語言?對,就是匯編語言,這個匯編語言中的每一條指令就對應一條二進制代碼,匯編的方式更容易讓人理解。
現在我們得到了計算機可以理解的MIPS指令(可以想象成可執行程序)了,接下來的問題是如何執行MIPS指令。
要執行程序,首先必須將可執行程序文件(從外設)加載到內存。可執行文件加載到內存時,操作系統會為每個可執行程序在內存中分配四個區:
1 代碼區。也就是前面的到的匯編代碼所對應的二進制碼
2 全局數據區。全局變量,靜態變量放在這個區
3 堆區。表示在程序執行過程中,動態申請的空間在這個區,如C語言中的malloc, free操作均是針對此區中的對象執行申請或釋放操作
4 棧區。函數運行時,局部變量的保存區域。
我們重點關注代碼區和棧區,初始時,其分布如下圖所示:
代碼區-1.png
其中PC(Program Counter)是程序計數器(是CPU中的一個寄存器,具有數據存儲功能),即用來指示下一個即將執行的指令的地址,本例中,進入main函數后,即將執行的第一條指令是a = 3,其地址為:0X FF FF FF 00, 因此PC指向其對應的匯編代碼的地址。
CPU根據PC的的值,從指定地址0X FF FF FF 00處獲取指令,然后解析指令,并執行指令(即執行a=3)。
當a = 0執行完畢后,PC執行操作:PC = PC + 4,PC指向0X FF FF FF 04,即b = 5的指令的地址。此時,棧區的狀態為:
棧區-1.png
接著,CPU根據PC的的值,從指定地址0X FF FF FF 04處獲取指令,然后解析指令,并執行指令(即執行b=5)。當b=5執行完畢后,PC執行操作:PC = PC + 4,PC指向0X FF FF FF 08,即sum=a+b的指令的地址。此時,棧區的狀態為:
棧區-2.png
然后,CPU根據PC的的值,從指定地址0X FF FF FF 08處獲取指令,然后解析指令,并執行指令(即執行sum=a+b)。當sum=a+b執行完畢后,PC執行操作:PC = PC + 4,PC指向0X FF FF FF 12(因為,指令已經執行完畢,這里應該提示要從main函數返回)。此時,棧區的狀態為:
棧區-3.png
至此為止,main函數內部的流程基本上陳述完了(關于函數間調用,相對復雜,計算機組成中會詳細講解),但如何實現這些步驟呢,其中的關鍵問題包括如下:
問題:
1、知道內存地址,如何定位到那個地址???答案:地址譯碼器
2、獲取到a=3對應的指令后,如何知道是做a=0 3的操作???答案:解析指令,指令譯碼器
3、PC寄存器如何保存值?如何做加4操作?答案:計數器(寄存器講解)
作者:CodingTech
來源:
(mbbeetchina)
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 手勢識別,計算機是怎么實現的呢?資料下載
- “時序電路”及其核心部件觸發器的工作原理資料下載
- 什么是時序電路?觸發器又是怎么回事資料下載
- 數碼管與分析儀的時序電路原理圖免費下載 8次下載
- 計算機通信與網絡教程—課件資料下載 0次下載
- 數字電路基礎與計算機中的邏輯部件相關資料下載 5次下載
- 基于門控時鐘的低功耗時序電路設計解析 12次下載
- 典型時序電路與門控時鐘在時序電路中的應用設計 25次下載
- 基于二叉樹的時序電路測試序列設計 0次下載
- 觸發器和時序邏輯電路教材
- 基于量子進化算法的時序電路測試生成 0次下載
- 基于粒子群算法的同步時序電路初始化
- 計算機應用基礎課件 0次下載
- 計算機文化基礎課件 0次下載
- PLD練習2(時序電路)
- 組合邏輯電路和時序邏輯電路的區別和聯系 6240次閱讀
- 基本邏輯電路、時序電路、組合電路設計 1136次閱讀
- 時序電路到底是什么 5507次閱讀
- 時序電路基本組件及時序邏輯電路應用實例 6667次閱讀
- 計算機高速數字電路設計技術及措施 3251次閱讀
- 計算機的組成及其功能 6610次閱讀
- 時序邏輯電路設計 8199次閱讀
- FPGA之時序電路的理解 3306次閱讀
- FPGA的設計主要是以時序電路為主嗎? 4723次閱讀
- 組合邏輯電路和時序邏輯電路比較_組合邏輯電路和時序邏輯電路有什么區別 9.2w次閱讀
- 組合邏輯電路的特點詳解 3.8w次閱讀
- FPGA中組合邏輯和時序邏輯的區別 8773次閱讀
- 數字電路之時序電路 1.8w次閱讀
- 火控計算機接口電路的設計 2728次閱讀
- 計算機CPU溫度監控控制電路圖 4470次閱讀
下載排行
本周
- 1電子電路原理第七版PDF電子教材免費下載
- 0.00 MB | 1491次下載 | 免費
- 2單片機典型實例介紹
- 18.19 MB | 95次下載 | 1 積分
- 3S7-200PLC編程實例詳細資料
- 1.17 MB | 27次下載 | 1 積分
- 4筆記本電腦主板的元件識別和講解說明
- 4.28 MB | 18次下載 | 4 積分
- 5開關電源原理及各功能電路詳解
- 0.38 MB | 11次下載 | 免費
- 6100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 7基于單片機和 SG3525的程控開關電源設計
- 0.23 MB | 4次下載 | 免費
- 8基于AT89C2051/4051單片機編程器的實驗
- 0.11 MB | 4次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費
- 2PADS 9.0 2009最新版 -下載
- 0.00 MB | 66304次下載 | 免費
- 3protel99下載protel99軟件下載(中文版)
- 0.00 MB | 51209次下載 | 免費
- 4LabView 8.0 專業版下載 (3CD完整版)
- 0.00 MB | 51043次下載 | 免費
- 5555集成電路應用800例(新編版)
- 0.00 MB | 33562次下載 | 免費
- 6接口電路圖大全
- 未知 | 30320次下載 | 免費
- 7Multisim 10下載Multisim 10 中文版
- 0.00 MB | 28588次下載 | 免費
- 8開關電源設計實例指南
- 未知 | 21539次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935053次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537793次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191183次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183277次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138039次下載 | 免費
評論
查看更多