上一章著重講了指令,我們用匯編、C語言等工具編寫的代碼最終也被轉化成機器指令被執行。本章進一步闡述編程語言如何被加載和執行的過程。
6.1.一段程序代碼
我們給出一段類似C語言的代碼,作為本書電路的“hello world”程序,看看電路之間如何配合才能完成執行這個代碼的目標。
試著分析這3行代碼:
1、a=6,a在高級語言中是一個變量,其本質是一個內存地址;a=6的意思是在a地址的內存空間中存入數字6;本章為了講解過程進一步簡化,假設這兩句已經執行完畢。
2、c=a+b,首先把a和b的內存空間中的數字,用加法器加起來,得到一個結果值9,然后把9存儲到c這個地址的內存空間中。
圖 6-1 本章代碼內存示意圖
指令操作碼 | 指令地址 | 說明 |
---|---|---|
0000 0000 | 0000 1100 | 讀取被加數a的值到加法站暫存器 |
0000 0001 | 0000 1010 | 從內存讀取加數,并相加 |
0000 0010 | 0000 1101 | 將相加的結果存儲內存 |
6.2.程序執行控制
從上一章詳細闡述了指令寄存器從內存中取出代碼指令,然后控制指令的執行。但是他只負責具體執行一條指令,給它什么指令,它就去完成,可見背后還應該有一個“指揮棒”,把需要執行的指令給指令寄存器,等他執行完成后,把下一個指令給它。
需要設計一個程序執行控制模塊,來做這個“指揮棒”,我們來試著分析它如何工作。
如圖 6-1,內存被分成代碼區和數據區兩部分,代碼區從內存的0000 0000位置開始。根據我們的電路設計,指令的格式是8位的操作碼加上8位的操作地址(見圖 5-1),我們的內存被設計成8位的存儲單元,每一個內存地址下可以存放一個8位的數據。所以一個完整指令在內存中被分兩行存儲。
圖 6-2 計數寄存器對指令寄存器的控制示意圖
圖 6-2所示,指令寄存器通過對其他的寄存器的控制來執行指令,程序運行控制模塊則通過控制指令寄存器的運行,達到控制整個電路運行的效果。首先,電路通電后,“程序運行控制邏輯模塊”中PC寄存器放著內存中存放代碼的首地址(圖 6-1的0000 0000地址),然后反復執行如下步驟:
1.控制指令操作寄存器(IR_OP)把第一個指令的操作碼取出(內存設置可讀,IR_OP設置可寫);
2.PC寄存器地址加1;
3.控制指令地址寄存器(IR_ADDR)把第一個指令的操作地址取出(內存設置可讀,IR_ADDR設置可寫);
4.指令地址寄存器(IR_ADDR)設置為可讀,設定好指令操作過程中的內存地址;
5.指令操作寄存器(IR_OP)設置為可讀,按照指令碼運行相應的指令邏輯;
6.PC寄存器地址加1;
每完成一次6個步驟的循環,則完成內存中的一個指令的執行,并準備進入下一個指令的執行。
6.3.指令執行控制譯碼器設計
為了實現反復執行以上6步,電路設計的大概思路是用一個三進八出的譯碼器,輸出端對應這6個步驟,輸入端循環輸入二進制的0~5。
6.4.PC寄存器內存地址加1電路設計
6.5.小節
-
寄存器
+關注
關注
31文章
5363瀏覽量
121162 -
C語言
+關注
關注
180文章
7614瀏覽量
137712 -
編程語言
+關注
關注
10文章
1950瀏覽量
34984 -
程序代碼
+關注
關注
4文章
42瀏覽量
15466
發布評論請先 登錄
相關推薦
評論