计算机组成与系统结构课程设计实验报告
学院: 计算机学科与网络工程学院
专业班级: 计算机科学与技术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 | 停机 |
- check_1
;课程设计检查程序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
- check_2
;课程设计检查程序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、存在的问题及体会
计算机组成是计算机专业课程,对计算机组成的了解深入与否很大程度决定一个的程序员水平的高低。我对计算机组成原理这门课程是非常感兴趣的。特别是计算机组成实验课。课堂上的知识碍于时间限制,老师不可能面面俱到,而且对于新手来说,这门课程显得生涩难懂,需要学生投入足够的时间硬啃。老实说,上了一学期的课,我还是对很多知识感到陌生。在接下来的暑假,我打算自己再学一遍。这学期,感谢老师的循循善诱 诲人不倦。