计组课程设计
?
計算機組成與系統結構課程設計實驗報告
?
?
?
?
學院: 計算機學科與網絡工程學院??????????????????????
專業班級: 計算機科學與技術172????????????????????
姓名:? ? ? ? ? ? ? ? ? ? ? ??
學號: ? ? ? ? ? ? ? ? ? ? ??
?
?
?
?
2019.06.20
?
廣州大學學生實驗報告
開課學院及實驗室:計算機科學與工程實驗室???????????????? ??????2019年 6 月20日
| 學院 | 計算機科學與教育軟件學院 | 年級/專業/班 | 計科172 | 姓名 | ? | 學號 | ? |
| 實驗課程名稱 | 計算機組成與系統結構實驗課 | 成績 | ? | ||||
| 實驗項目名稱 | 計算機組成與系統結構課程設計 | 指導老師 | ? ? | ||||
2、課程設計的性質、目的、任務
《計算機組成與系統結構課程設計》是計算機學院各專業集中實踐性環節之一,是學習完《計算機組成與系統結構》課程后進行的一次全面的綜合練習。其目的是綜合運用所學計算機原理知識,設計并實現一臺模型計算機,以便鞏固所學的知識,提高分析問題和解決問題的能力。
1、掌握算術、邏輯、移位運算實驗,熟悉ALU運算控制位的運用。
2、掌握存儲器組織、讀寫方式及與總路線組成的數據通路,掌握地址總線、數據總線的工作原理。
3、掌握指令結構和指令取指、執行工作過程。
4、掌握CPU的微程序控制原理。
4、課程設計的題目
綜合運用所學計算機原理知識,設計并實現具有以下16條指令的指令集結構的模型計算機:
| 編號 | 助記符 | 機器指令碼 | 說明 |
| 0 | SUB? Rd,Rs | 0000 RdRs? | Rd-Rs→Rd |
| 1 | ADD? Rd,Rs | 0001 RdRs? | Rd+Rs→Rd |
| 2 | AND? Rd,Rs | 0010 RdRs? | Rd&Rs→Rd (Rd和Rs相與) |
| 3 | DEC Rd | 0011 Rd00 | 將Rd值減1 |
| 4 | CLR Rd | 0100 Rd00 | 將Rd清零 |
| 5 | RL? Rd | 0101 Rd00?? | Rd循環左移一位 |
| 6 | RR? Rd | 0110 Rd00 | Rd循環右移一位 |
| 7 | MOV Rd,Rs? | 0111 RdRs | Rs→Rd |
| 8 | LDI ?Rd,* | 1000 Rd00?? XXXXXXXX | 將指令中的立即數(第二字節)送入Rd |
| 9 | OUT? IOH,Rs | 1001 00Rs | Rs→i/o(數據開關)高字節 |
| 10 | LDA? Rd,M | 1010 Rd00? ?XXXXXXXX? ?XXXXXXXX | [M] →Rd |
| 11 | STA? M,Rs | 1011 00Rs? ?XXXXXXXX ??XXXXXXXX | Rs→[M] |
| 12 | JMP M | 1100 0000 ?XXXXXXXX ??XXXXXXXX | [M]→PC,即跳轉到M所指單元 |
| 13 | JZ M | 1101 0000 ?XXXXXXXX ??XXXXXXXX | 當Z=1時,跳轉到M所指單元 |
| 14 | JC M | 1110 0000 ?XXXXXXXX ??XXXXXXXX | 當CY=1時,跳轉到M所指單元 |
| 15 | HALT | 1111 0000 | 停機 |
?
;課程設計檢查程序1,含除跳轉指令外的12條指令:
add,and,dec,ldi,clr,rl,rr,ldr,sta,mov,out,hlt
#LOAD "lcy.IS"? ;預調入指令系統/微程序,用自己的微程序文件名稱
??? org?? 0
???????
start:LDI? r0,12h
sta 100h,r0
lda r1,100h
dec r1
rl r0
add r0,r1
rr r0
add r0,r1
ldi r2,76h
and r2,r0
mov r3,r2
add r3,r1
clr r0
out ioh,r3
hlt
? end
;課程設計檢查程序2,含3條跳轉指令:jz,jc,jmp
#LOAD "lcy.IS"? ;預調入指令系統/微程序,用自己的微程序文件名稱
??? org?? 0
start:
?
LDI? r0,12h
sub? r0,r0
jz tag1
ldi? r3,0eeh
jmp tag2
tag1:ldi r3,33h
tag2:ldi r0,88h
add r0,r0
jc tag3
ldi r2,0eeh
jmp tag4
tag3:ldi r2,22h
tag4:ldi r1,11h
ldi r0,0
add r1,r0
jz tag5
jmp tag6
tag5:ldi r1,0eeh
tag6:jc tag7
ldi r0,0h
jmp tag8
tag7:ldi r0,0eeh
tag8:hlt
? end
?
5、畫出微程序流程圖(樹型圖)
?
6、填寫所設計的模型機微指令表(只填寫有微指令的相關行):
| 微址00002)1) | M23 | M22 | M21 | M20 | M19 | M18 | M17 | M16 | 代碼 | M15 | M14 | M13 | M12 | M11 | M10 | M9 | M8 | 代碼 | M7 | M6 | M5 | M4 | M3 | M2 | M1 | M0 | 代碼 | 后續微址 | 說明 |
| E/M | IP | MWR | R/M | o2 | o1 | O0 | OP | M | CN | S2 | S2 | S0 | X2 | X1 | X0 | XP | W | ALU | Iu | IE | IR | Icz | Ids | ||||||
| 0000 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | FF | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | FF | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | FF | +1 | ? |
| 0001 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | BF | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | FB | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | F8 | +1 | ? |
| 0600 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | FA | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | F9 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | DF | +1 | SUB |
| 0601 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | F8 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | F9 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 5F | +1 | ? |
| 0602 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | F0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 6E | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 4F | 0001 | ? |
| 0620 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | F8 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | F9 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | FF | +1 | ADD |
| 0621 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | FA | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | F9 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 7F | +1 | ? |
| 0622 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | F0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 66 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 6D | 0001 | ? |
| 0640 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | FA | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | F9 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | DF | +1 | AND |
| 0641 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | F8 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | F9 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 5F | +1 | ? |
| 0642 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | F0 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | EE | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 4F | 0001 | ? |
| 0660 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | F8 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | F9 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 5F | +1 | DEC |
| 0661 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | F0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | D6 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 4D | 0001 | ? |
| 0680 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | F8 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | F9 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 5F | +1 | CLR |
| 0681 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | F0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | DE | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 4D | 0001 | ? |
| 06A0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | F8 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | F9 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 5F | +1 | RL |
| 06A1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | F0 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 76 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 4D | 0001 | ? |
| 06C0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | F8 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | F9 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 7F | +1 | RR |
| 06C1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | F0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 5E | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 6D | 0001 | ? |
| 06E0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | F0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | F9 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | ED | 0001 | MOV |
| 0700 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | F0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | FB | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | DF | +1 | LDI |
| 0701 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | BF | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | FF | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | ED | 0001 | ? |
| 0720 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | F5 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | F9 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | ED | 0001 | OUT |
| 0740 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | F8 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | FB | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | DF | +1 | LDA |
| 0741 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | B9 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | FB | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | DF | +1 | ? |
| 0742 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | BC | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | FE | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1F | +1 | ? |
| 0743 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 70 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | FB | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | ED | 0001 | ? |
| 0760 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | FA | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | FB | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | DF | +1 | STA |
| 0761 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | BB | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | FB | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | DF | +1 | ? |
| 0762 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | BC | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | C6 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0F | 0763 | ? |
| 0763 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 5F | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | F9 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | ED | 0001 | ? |
| 0780 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | FA | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | FB | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | FF | +1 | JMP |
| 0781 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | BB | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | FB | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | FF | +1 | ? |
| 0782 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 3F | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | C6 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 2D | 0001 | ? |
| 07A0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | FA | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | FB | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | FF | +1 | JZ |
| 07A1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | BB | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | FB | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | FF | +1 | ? |
| 07A2 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | BC | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | C6 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 3F | +1 | ? |
| 07A3 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | FF | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | C6 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | FC | 07A4 | ? |
| 07A4 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | FF | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | FF | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | ED | 0001 | ? |
| 07A5 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 3F | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | C6 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 2D | 0001 | ? |
| 07C0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | FA | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | FB | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | FF | +1 | JC |
| 07C1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | BB | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | FB | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | FF | +1 | ? |
| 07C2 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | BC | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | C6 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 3D | 07C4 | ? |
| 07C4 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | FF | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | FF | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | ED | 0001 | ? |
| 07C5 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 3F | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | C6 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 2D | 0001 | ? |
| 07E0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | F8 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | F8 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 3F | +1 | HLT |
| 07E1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 3F | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | D6 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 2D | 0001 | ? |
;分段/RISC模型機指令系統
?
;助記符 操作數????????????? 指令碼 長度
;-----------------------------------------------------
LDI???? R0,*??????????????? 80????? 2???????????? ;將指令中的立即數(第二字節)送入R0
LDI???? R1,*??????????????? 84????? 2???????????? ;將指令中的立即數(第二字節)送入R0
LDI???? R2,*??????????????? 88????? 2???????????? ;將指令中的立即數(第二字節)送入R2
LDI???? R3,*??????????????? 8C????? 2???????????? ;將指令中的立即數(第二字節)送入R3
STA???? *,R0??????????????? B0????? 3???????????? ;Rs(R0)→[M]
STA???? *,R3??????? ????????B3????? 3???????????? ;Rs(R0)→[M]
LDA???? R1,*??????????????? A4????? 3???????????? ;[M] →R1
DEC???? R1????????????????? 34????? 1???????????? ;將R1值減1
RL????? R0????????????????? 50????? 1???????????? ;R0循環左移一位
SUB???? R0,R1?????????????? 01????? 1???????????? ;R0-R1→R1
RR????? R0????????????????? 60????? 1???????????? ;R0循環右移一位
ADD???? R0,R0?????????????? 10????? 1???????????? ;R0+R0→R0
ADD???? R0,R1?????????????? 11????? 1???????????? ;R0+R1→R0
ADD???? R1,R0?????????????? 14????? 1???????????? ;R0+R1→R1
ADD???? R2,R3?????????????? 1B????? 1???????????? ;R2+R3→R2
ADD???? R3,R2?????????????? 1E????? 1???????????? ;R2+R3→R3
ADD???? R3,R1?????????????? 1D????? 1???????????? ;R1+R3→R3
SUB???? R0,R0?????????????? 00????? 1???????????? ;R0-R0->R0
AND??? ?R0,R1?????????????? 21????? 1????????????? ;Rd&Rs→Rd (R2和R0相與)
AND???? R2,R0?????????????? 28????? 1????????????? ;Rd&Rs→Rd (R2和R0相與)
MOV???? R3,R2?????????????? 7E????? 1???????????? ;R2→R3
MOV???? R0,R1?????????????? 71????? 1???????????? ;R1→R0
CLR??? ?R0????????????????? 40????? 1???????????? ;將R0清零
OUT???? IOH,R0????????????? 90????? 1???????????? ;R0→I/O(數據開關)高字節
OUT???? IOH,R1????????????? 91????? 1???????????? ;R1→I/O(數據開關)高字節
OUT???? IOH,R2????????????? 92????? 1???????????? ;R1→I/O(數據開關)高字節
OUT? ???IOH,R3????????????? 93????? 1???????????? ;R3→I/O(數據開關)高字節
JMP???? *?????????????????? C0????? 3???????????? ;[M]->PC,即跳到M所指單元
JZ????? *?????????????????? D0????? 3???????????? ;當Z=1時,跳轉到M所指單元
JC????? *?????????????????? E0????? 3???????????? ;當CY=1時,跳轉到M所指單元
HLT???? ""????????????????? F0????? 1???????????? ;停機
?
Check.1程序跑完的結果:
?
Check.2程序跑完的結果:
?
9、存在的問題及體會
?
計算機組成是計算機專業課程,對計算機組成的了解深入與否很大程度決定一個的程序員水平的高低。我對計算機組成原理這門課程是非常感興趣的。特別是計算機組成實驗課。課堂上的知識礙于時間限制,老師不可能面面俱到,而且對于新手來說,這門課程顯得生澀難懂,需要學生投入足夠的時間硬啃。老實說,上了一學期的課,我還是對很多知識感到陌生。在接下來的暑假,我打算自己再學一遍。這學期,感謝老師的循循善誘 誨人不倦。
?
總結
- 上一篇: LSTM神经网络算法
- 下一篇: pytorch搭建LSTM神经网络预测电