計算機組成原理
課程設計報告
成員:許愷 2014011329
胡強勇 2014011315
時間:2016.12.20
一.簡要總結計算機組成原理實驗
計算機組成原理實驗總共五個實驗,首先我們熟悉了教學機的使用方法,后面的實驗我們分為運算器、存儲器、控制器,控制器分為兩次實驗。緊接的第二次實驗我們就進行了運算器的實驗,對運算器的內部構造極其原理進行了驗證理解,在這里我們學習了運算器ALU的8種運算功能,以及其通用寄存器組,以及運算器的編碼指令和每部分的作用。然后,我們第三次實驗對我們課上所學的存儲器進行了實驗驗證,按照書上的步驟進行了內存擴展,在這次實驗中我們了解了存儲器的功能、組織以及靜態存儲器芯片的讀寫原理,通過實驗對字擴展和位擴展有了理解和掌握。第四次和第五次實驗都是關於微程序控制器的實驗,這部分我們先學習了很多圖表,都是和微程序控制相關的,通過這些和實驗,我們理解了控制器的功能和組成,理解了各類典型指令的執行流程,對指令格式、尋址方式、指令系統、指令分類有了系統的概念,還讓我們學會了指令的設計以及相關技術。在這一部分,實驗主要以教學機為基礎來進行,通過讓我們自己學習研究指令代碼並進行設計來讓我們對課本進行實踐,讓我們,看懂、理解、會寫、會設計指令代碼。計算機就是由運算器、存儲器、控制器以及I/O組成的,接口部分有專門的課程,所以我們的計算機組成原理實驗就從前三方面對我們的理論知識進行實踐教學,主體重點清楚明了,實驗難易結合,有單步驗證也有綜合設計,對我們的動手和設計能力有極大的提高。
二.回答下列問題
1.微程序中的微指令是順序執行的嗎?下地址是如何產生的?
1)不是。一般的微指令格式由操作控制和順序控制兩部分構成。操作控制部分用來發出管理和指揮全機工作的控制信號。其順序控制部分用來決定產生下一個微指令的地址。
2)有兩種方式
①計數器的方式:
微程序順序執行時,其后繼微地址就是現行微地址加上一個增量(通常為1);
當微程序遇到轉移或轉子程序時,由微指令的轉移地址段來形成轉移微地址。
特點:
優點:簡單、易於掌握,編制微程序容易
缺點:這種方式不能實現兩路以上的並行微程序轉移,因而不利於提高微程序的執行速度。
②多路轉移的方式:
轉移條件:
①操作碼
②狀態條件及測試
③微指令中下地址
2.根據實驗,哪些微指令是所有機器指令都要用到的?為什么要這樣設計?
答:加電啟動(1條):0->PC,DI#=0;
取指(3條):PC->AR,PC+1->PC;
MEM->DR;
DR->IR;
執行完畢(2條):STR->Q、CC#=INT#;
PC->AR、PC+1->PC
因為這些指令都屬於公操作。所謂公操作,就是一條指令執行完畢后,CPU所開始進行的操作,這些操作主要是CPU對外圍設備請求的處理,如中斷處理、通道處理等。由於所有的指令的取指周期是完全一樣的,因此,取指令也可認為是公操作。
3.一條機器指令與一段微指令相對應,完成這條機器指令的微程序的各條微指令存放在控制存儲器中,存放這些微指令的微地址是否連續,為什么?
答:不連續。因為微指令執行的順序控制問題,就是如何確定下一條微指令的地址問題。通常,產生后繼微地址有兩種方法。分別是計數器方式和多路轉移方式。而這兩種方式產生的下一條微指令的地址都不一定連續。
4.設計!
1)指令設計(題目要求)
指令設計:
指令:SBB
指令格式:16位一個字長
功能:DR-SR-CF->DR
微程序地址映射:指令編碼 00100001->51
選擇寄存器:目的寄存器R0,源寄存器R1
指令存儲格式:2101
微程序與32位微碼:
01:PC->AR,PC+1->PC; 8D05505E
02:MEM->IR; 20800008
03:/MAP; 80800000
51:DR-SR-CF->DR; 30 0011 0000 100 001 011 001 0000 0001 001 010 000 000
30:STR->Q,CC#=INT#; 9C000003
31:PC->AR,PC+1->PC,CC#=0; 8D05505E
指令設計:
指令:STRX DR,OFFSET[SR]
指令格式:16位兩個字長
功能:PC->AR,PC+1->PC,MEM+SR->AR,CC#=0,DR->MEM
微程序地址映射:指令編碼11100110->61
選擇寄存器:不用
指令存儲格式:E601
微程序與32位微碼:
01:PC->AR,PC+1->PC; 8D05505E
02:MEM->IR; 20800008
03;/MAP; 80800000
61:PC->AR,PC+1->PC;00 1110 0000 100 011 010 000 0101 0101 000 001 011 000
62:MEM+SR->AR,CC#=0;00 1110 0000 001 101 011 000 0000 0000 000 000 011 000
63:DR->MEM; 30 0011 0000 000 100 001 000 1000 0000 000 000 000 001
30:STR->Q,CC#=INT#; 9C000003
31:PC->AR,PC+1->PC,CC#=0; 8D05505E
指令設計:
指令:JMPR
指令格式:16位一個字長
功能:JMPR SR
微程序地址映射:指令編碼01100000->5A
選擇寄存器:源寄存器R0
指令存儲格式:6000
微程序與32位微碼:
01:PC->AR,PC+1->PC
02:MEM->IR
03:/MAP
5A: SR->PC,CC#=0 30 0011 0000 100 100 011 000 0101 0000 000 000 000 000
30:STR->Q,CC#=INT#
31:PC->AR,PC+1->PC,CC#=0
指令設計:
指令:CALR
指令格式:16位兩個字長
功能:調用SR指明的子程序
微程序地址映射:指令編碼11100000->64
確定轉移
指令存儲格式:E000
微程序與32位微碼:
01:PC->AR,PC+1->PC;
02:MEM->IR;
03:/MAP
64:SP-1->SP、AR; 00 1110 0000 100 011 011 001 0100 0000 000 001 011 000
65:PC->MEM; 00 1110 0000 000 100 001 000 0000 0101 000 000 000 001
66:SR->PC、CC#=0; 30 0011 0000 100 100 011 000 0101 1000 000 000 000 000
30:STR->1,CC#=INT#; 9C000003
31:PC->AR,PC+1->PC; 8D05505E
指令設計:
指令:ADC
指令格式:16位一個字長
功能:DR+SR+C->DR
微程序地址映射:指令編碼00100000->50
選擇寄存器:目的寄存器R0,源寄存器R1
指令存儲格式:2001
微程序與32位微碼:
01:PC->AR,PC+1->PC
02:MEM->IR
03:/MAP
50:DR+SR+CF->DR 30 0011 0000 100 001 011 000 0000 0001 001 010 000 000
30:STR->Q,CC#=INT#
31:PC->AR,PC+1->PC,CC#=0
指令設計:
指令:STC
指令格式:16位一個字長
功能:C=1
微程序地址映射:指令編碼01101101->57
指令存儲格式:6D00
微程序與32位微碼:
01:PC->AR,PC+1->PC
02:MEM->IR
03:/MAP
57:STC,CC#=0 30 0011 0000 100 011 001 000 0000 0000 100 000 000 000
30:STR->Q,CC#=INT#
31:PC->AR,PC+1->PC,CC#=0
指令設計(拓展)
指令設計:
指令:RCL DR
指令格式:16位一個字長
功能:DR帶進位C循環左移
微程序地址映射:指令編碼00101010->54
所用寄存器:源寄存器R0
指令存儲格式:2A00
微程序與32位微碼:
01:PC->AR,PC+1->PC;
02:MEM->IR;
03:/MAP;
54:DCL DR; 30 0011 0000 100 011 111 000 0000 0000 110 101 000 000
30:STR->Q,CC#=INT#;
31:PC->AR,PC+1->PC,CC#=0;
指令設計:
指令:IRET
指令格式:16位一個字長
功能:中斷返回
微程序地址映射:指令編碼11101111->67
所用寄存器:無
指令存儲格式:EF00
微程序與32位微碼:
01:PC->AR,PC+1->PC;
02:MEM->IR;
03:/MAP;
67:SP->AR,SP+1->SP; 00 1110 0000 100 011 010 000 0000 0100 000 001 011 000
68:MEM->STR、CC#、INTOLD#; 30 0011 0000 001 111 001 000 0000 0000 000 000 100 000
30:STR->Q,CC#=INT#;
31:PC->AR,PC+1->PC,CC#=0;
指令設計:
指令:NOT
指令格式:16位一個字長
功能:DR<-/DR
微程序地址映射:指令編碼00101101->52
選擇寄存器:目的寄存器R0
指令存儲格式:2D00
微程序與32位微碼:
01:PC->AR,PC+1->PC;
02:MEM->IR;
03:/MAP;
52:/DR->DR; 30 0011 0000 100 011 011 111 0000 0000 001 000 000 000
30:STR->Q,CC#=INT#;
31:PC->AR,PC+1->PC,CC#=0;
指令設計:
指令:STRA [ADR],SR
指令格式:16位兩個字長
功能:[ADR]<-SR
微程序地址映射:指令編碼11100111->5F
選擇寄存器:目的寄存器R0
指令存儲格式:E701
微程序與32位微碼:
01:PC->AR,PC+1->PC;
02:MEM->IR;
03:/MAP;
5F: PC->AR,PC+1->PC; 60 1110 0000 100 011 010 000 0101 0101 000 001 011 000
60:MEM->AR; 30 0011 0000 001 111 001 000 0000 0000 000 000 011 000
30:STR->Q,CC#=INT#;
31:PC->AR,PC+1->PC,CC#=0;
2)錯誤和遇到的問題以及解決
指令設計中出現了很多錯誤和問題,我們說一下遇到的問題和錯誤以及解決。
- SST問題?
解答:SST標志位問題,對標志位無影響時使用000;對標志位產生影響時用001;想 通過標志位直接輸出0或1時用011或100;RAM0表示將16位最低位放進標志位;同 理RAM15表示將最高位放到標志位,在移位時使用;Q0指將Q寄存器的最低位放到標 志位,用法不詳。
- I2~0中0A和0B的區別?
解答:沒什么區別,如果如果需要輸出給運算寄存器,則需要用B;如果需要直接從A輸出,則用A。
- I2~0中Q和D的含義?
解答:Q寄存器是一個乘商寄存器,當運算涉及乘除法時,會使用Q寄存器,其他情況為通用寄存器同AB;D寄存器通常用於有內存讀的時候,代表了內存和內存的一些指令,實驗書上未詳細介紹。
- DC1中中斷向量低位到內部總線的含義?
解答:中斷向量的低位指中斷向量16位的低四位,將其送到內部總線判斷指令是否產生中斷。(DC1中的000約等於111,沒什么作用。)
- CC#=0為何有時加有時不加?
解答:CC#=0放在非公操作指令的最后一條微指令的末尾,表示指令執行結束,跳轉到30公操作。
- RCL的SSH SCI 中為什么用邏輯移位?
解答:應該用的是循環移位。
5.回答問題
1)設計指令系統
2)設計上述6條機器指令對應的微指令
答:此題在上面已經解答,在此不做重復。
3)除公操作外,每個指令用哪幾條微指令實現指令功能?
答:此題在上面已經解答,在此不做重復。
4)分析說明三條擴展指令的32位微碼的設置原理。
在這里選擇三條擴展指令進行詳細的32微碼設置的分析:
1.SBB指令分析
SBB DR,SR
DR-SR-CF->DR
MRW |
I2-0 |
I8-6 |
I5-3 |
B口 |
A口 |
SST |
SSH.SCI |
DC2 |
DC1 |
100 |
001 |
011 |
001 |
0000 |
0001 |
001 |
010 |
000 |
000 |
MRW |
因為此指令無內存和I/O讀寫,故選1XX |
I2-0 |
因為涉及DR和SR,所以用A和B兩個鎖存器,故為001 |
I8-6 |
因為要->DR,所以要輸出到DR上,所以選F->B,Y=F,故為011 |
I5-3 |
因為是減法運算,所以選R-S,故為001 |
B口 |
因為B口使用R0,故為0000 |
A口 |
A口使用R1,故為0001 |
SST |
因減法運算還有-CF,會有標志位的運算,所以選擇001 |
SSH,SCI |
因為運算中存在CF故標志位不定,,所以選010 |
DC2 |
指令並沒有對AR,IR,INT操作,故不操作,選000 |
DC1 |
因為不需要用到DC1故選000 |
2.JMPR指令分析
JMPR SR
SR->PC,CC#=0
MRW |
I2-0 |
I8-6 |
I5-3 |
B口 |
A口 |
SST |
SSH.SCI |
DC2 |
DC1 |
100 |
100 |
011 |
000 |
0101 |
1000 |
000 |
000 |
000 |
000 |
MRW |
因為此指令無內存和I/O讀寫,故選1XX |
I2-0 |
因為SR直接賦值,所以用A鎖存器,R為0,故為100 |
I8-6 |
因為要->SP,所以要輸出到SP上,所以選F->B,Y=F,故為011 |
I5-3 |
因為是0+SR運算,所以選R+S,故為000 |
B口 |
因為B口使用SP,R5,故為0101 |
A口 |
A口使用SR,R8,故為1000 |
SST |
因為不會存在標志位的改變,所以選擇000 |
SSH,SCI |
因為不需要用標志位,所以選000 |
DC2 |
指令並沒有對AR,IR,INT操作,故不操作,選000 |
DC1 |
因為不需要用到DC1故選000 |
3.STRA指令分析
STRA [ADR],SR
PC->AR,PC+1->PC;
MRW |
I2-0 |
I8-6 |
I5-3 |
B口 |
A口 |
SST |
SSH.SCI |
DC2 |
DC1 |
100 |
011 |
010 |
000 |
0101 |
0101 |
000 |
001 |
011 |
000 |
MRW |
因為此指令無內存I/O讀寫,故選1XX |
I2-0 |
因為PC既要被運算也要被輸出,故選B鎖存器,故為011 |
I8-6 |
因為要->AR,PC,所以要輸出到PC上,所以選F->B,Y=A,故為010 |
I5-3 |
因為是加法運算,所以選R+S,故為000 |
B口 |
因為B口使用PC,R5,故為0101 |
A口 |
A口使用PC,R5,故為0101 |
SST |
不會有標志位的運算,所以選擇000 |
SSH,SCI |
因PC需+1,標志位需要為1,所以選001 |
DC2 |
因為需要AR接收,故選011 |
DC1 |
因為不需要用到DC1故選000 |
MEM->AR;
MRW |
I2-0 |
I8-6 |
I5-3 |
B口 |
A口 |
SST |
SSH.SCI |
DC2 |
DC1 |
001 |
111 |
001 |
000 |
0000 |
0000 |
000 |
000 |
011 |
000 |
MRW |
因為此指令需要讀取內存,故選000 |
I2-0 |
因為從內存讀取,所以使用D直接賦值,故為001 |
I8-6 |
因為直接輸出,不用改變B的值,所以選Y=F,故為001 |
I5-3 |
因為加0運算,所以選R+S,故為000 |
B口 |
因為B口沒使用,故為0000 |
A口 |
A口沒使用,故為0000 |
SST |
因不會有標志位的運算,所以選擇000 |
SSH,SCI |
因為沒有標志位運算,所以選000 |
DC2 |
指令要寫入AR,故選011 |
DC1 |
因為不需要用到DC1故選000 |
6.總結感悟
這次的計算機組成原理課程設計我組成員收獲頗豐,在掌握知識的同時,還增強了克服困難的信心。總體來說,本次的報告難度適中,如果上課認真學習報告是沒有問題的,在報告的寫的過程中,我們復習了很多課上還有實驗中的知識,同時也查了一些資料,問了老師一些問題,感覺懂得了不少課內外的知識。不僅如此,完成報告也給了我們鼓勵,讓我們在面對困難的時候能夠認真的一步一步去完成,不斷提高自己。在和老師的交流中我們也發現了實驗的一些小漏洞,比如可能對於學生來說實驗書寫的知識太少了,有的知識點不能理解的很好,我認為可以在實驗書上寫更多的擴展知識,讓同學們更加的理解整個知識體系,也學的更多。謝謝。