计算机组成原理课程设计
报告
(2013/2014第二学期------第19周)
指导教师:许建龙
张芳
班级:12计科2班
姓名:
学号:
计算机组成原理大型实验任务书(计算机12级1、2、3班和实验班)
一、实验目的:
深入了解计算机各种指令的执行过程,以及控制器的组成,指令系统微程序设计的具体知识,进一步理解和掌握动态微程序设计的概念;完成微程序控制的特定功能计算机的指令系统设计和调试。
二、实验说明:
要进行这项大型实验,必须清楚地懂得:
(1)TEC-2机的功能部件及其连接关系;
(2)TEC-2机每个功能部件的功能与具体组成;
(3)TEC-2机支持的指令格式;
(4)TEC-2机的微指令格式,AM2910芯片的用法;
(5)已实现的典型指令的执行实例,即相应的微指令与其执行次序的安排与衔接;
(6)要实现的新指令的格式与功能。
三、实验内容:
选定指令格式、操作码,设计如下指令:
(1)把用绝对地址表示的内存单元A中的内容与内存单元B中的内容相加,结果存于内存单元C中。
指令格式:D4××,ADDR1,ADDR2,ADDR3
四字指令(控存入口100H)
功能:[ADDR3]=[ADDR1]+[ADDR2]
(2)将一通用寄存器内容减去某内存单元内容,结果放在另一寄存器中。
指令格式:E0 DR
SR,ADDR
(SR,DR源、目的寄存器各4位)双字指令(控存入口130H)
功能:DR=SR - [ADDR]
(3)转移指令。判断两个通用寄存器内容是否相等,若相等则转移到指定绝对地址,否则顺序执行。
指令格式:E5 DR
SR,ADDR
双字指令(控存入口140H)
功能:if DR==SR goto ADDR else顺序执行。
设计:利用指令的CND字段,即IR10~8,令IR10~8=101,即CC=Z
则当DR==SR时Z=1,微程序不跳转,接着执行MEM PC(即ADDR PC)
而当DR!=SR时Z=0,微程序跳转至A4。
四、实验要求:
(1)根据内容自行设计相关指令微程序;(务必利用非上机时间设计好微程序)
(2)设计测试程序、实验数据并上机调试。
(3)设计报告内容:包括1、设计目的2、设计内容3、微程序设计(含指令格式、功能、设计及微程序)4、实验数据(测试所设计指令的程序及结果)。(具体要求安最新规范为准)
(4)
大型实验报告必须打印成册,各班班长收齐大型实验报告于19周星期五前,交张芳老师办公室。
五、上机时间安排:
2014计算机组成原理课程设计安排如下:(第十九周)
(地点:10-413和414机房)
时
间
星
期
9:00---12:00
1:00---4:00
17:30—20:30
备
注
星期三
6月25日
12计算机(1)12计算机(2)12计算机(3)
电信实验班
星期四
6月26日
12计算机(1)12计算机(2)12计算机(3)
电信实验班
12计算机(1)
12计算机(2)
12计算机(3)
电信实验班
星期五
6月27日
12计算机(1)12计算机(2)12计算机(3)
电信实验班
12计算机(1)12计算机(2)12计算机(3)
电信实验班
备注:1.各班每2人一组,可自由组合但要固定,各班班长将各组组号及学生名单于第一次上机时上报指导教师;
2.各班学生须严格按照规定的时间上机,不得无故缺席、迟到早退,指导教师会严格考勤。
指导教师:
许建龙、张芳2014年6月18日
计算机组成原理课程设计实验报告
一、目的和要求
深入了解计算机各种指令的执行过程,以及控制器的组成,指令系统微程序设计的具体知识,进一步理解和掌握动态微程序设计的概念;完成微程序控制的特定功能计算机的指令系统设计和调试。
二、实验环境
PC机与TEC-2机模拟程序
三、具体内容
(一)
把用绝对地址表示的内存单元A中的内容与内存单元B中的内容相加,结果存于内存单元C中。
指令格式:D4××,ADDR1,ADDR2,ADDR3
四字指令(控存入口100H)
功能:[ADDR3]=[ADDR1]+[ADDR2]
1.
微程序:
(1)PC→AR,PC+1→PC 0000 0E00 A0B5 5402
当前程序计数器内容送地址寄存器,为读取第一个操作数地址做准备;程序计数器指向下一单元地址
B55-------------------------------------------------------------------------------------------------------------B0
0000
0000
0000
1110
0000
0000
1010
0000
1011
0101
0101
0100
0000
0010
CI3-CI0(B43-B40)为1110,功能为顺序执行;
SCC(B39-B37)为000,CC#=1,不发生转移;
SST(B34-B32)为000,标志位不发生改变;
MIO#(B31)REQ(B27)WE#(B23)为101,表示不操作;
B口地址(B15-B12)为0101,BI8-BI6(B30-B28)为010,MI5-MI3(B26-B24)为000,MI2-MI0(B22-B20)为011,SCI(B11-B10)为01,SA(B7)为0,SB(B3)为0,表示5号通用寄存器R5,即PC通过B口实现加1,再通过B口写回到PC(B+0+Cin→B);
(2)MEM→AR 0000 0E00 10F0 0002
从主存读取第一个操作数地址,为读取第一个操作数做准备
B55-------------------------------------------------------------------------------------------------------------B0
0000
0000
0000
1110
0000
0000
0001
0000
1111
0000
0000
0000
0000
0010
MIO# REQ WE#
为001,表示从主存储器读入数据(地址);
B口地址为0000,BI8-BI6为001,MI5-MI3为000,MI2-MI0为111,SCI为00,
表示AM2901不做运算;
(3)MEM→Q 0000 0E00 00F0 0000
从主存读取第一个操作数
B55-------------------------------------------------------------------------------------------------------------B0
0000
0000
0000
1110
0000
0000
0000
0000
1111
0000
0000
0000
0000
0000
MIO #REQ WE#(B23)为001,表示从主存储器读入数据(地址);
I8-6为000,MI5-3为000,MI2-0为111,表示将主存中读出的数据加上0,再将结果回送到Q寄存器;
(4)PC→AR,PC+1→PC 0000 0E00 A0B5 5402
当前程序计数器内容送地址寄存器,为读取第二个操作数地址做准备;程序计数器指向下一单元地址
B55-------------------------------------------------------------------------------------------------------------B0
0000
0000
0000
1110
0000
0000
1010
0000
1011
0101
0101
0100
0000
0010
(5)MEM→AR 0000 0E00 10F0 0002
从主存读取第二个操作数地址,为读取第二个操作数做准备
B55-------------------------------------------------------------------------------------------------------------B0
0000
0000
0000
1110
0000
0000
0001
0000
1111
0000
0000
0000
0000
0010
(6)MEM+Q→Q 0000 0E00 00E0 0000
从主存读取第二个操作数
B55-------------------------------------------------------------------------------------------------------------B0
0000
0000
0000
1110
0000
0000
0000
0000
1110
0000
0000
0000
0000
0000
MIO# REQ WE#为001,BI8-6为000,MI5-3为000,MI2-0为110,表示将第二个操作数从主存读出并且加上Q寄存器的内容,再将结果回送到Q寄存器;
(7)PC→AR,PC+1→PC 0000 0E00 A0B5 5402
当前程序计数器内容送地址寄存器,为读取计算结果存储单元地址做准备;程序计数器指向下一单元地址
B55-------------------------------------------------------------------------------------------------------------B0
0000
0000
0000
1110
0000
0000
1010
0000
1011
0101
0101
0100
0000
0010
(8)MEM→AR 0000 0E00 10F0 0002
从主存读取结果存储单元地址
B55-------------------------------------------------------------------------------------------------------------B0
0000
0000
0000
1110
0000
0000
0001
0000
1111
0000
0000
0000
0000
0010
(9)Q→MEM,CC#=0 0029 0300 1020 0010
计算结果送结果存储单元
B55-------------------------------------------------------------------------------------------------------------B0
0010
1001
0000
0011
0000
0000
0001
0000
0010
0000
0000
0000
0001
0000
MIO# REQ WE#为000,BI8-6为001,MI5-3为000,MI2-0为010,表示将Q寄存器里面的内容存到AR存储的单元地址对应的存储单元;
B55-B46为0010100100(4AH),即下地址,CI3-0为0011(3号命令,条件转移),SCC为00(CC#),表示转移到4AH中断。
2.
输入微码
>E900
0900 0000:0000 0000:0E00 0000:A0B5 0000:5402 0000:0000
0905 0000:0E00 0000:10F0 0000:0002 0000:0000 0000:0E00
090A 0000:00F0 0000:0000 0000:0000 0000:0E00 0000:A0B5
090F 0000:5402 0000:0000 0000:0E00 0000:10F0 0000:0002
0914 0000:0000 0000:0E01 0000:00E0 0000:0000 0000:0000
0919 0000:0E00 0000:A0B5 0000:5402 0000:0000 0000:0E00
091E 0000:10F0 0000:0002 0000:0029 0000:0300 0000:1020
0923 0000:0010
;将微程序的16进制代码输入到从900H开始的内存单元中
3.
查看微码
>D900
0900 0000 0E00 A0B5 5402 0000 0E00 10F0 0002
0908 0000 0E00 00F0 0000 0000 0E00 A0B5 5402
0910 0000 0E00 10F0 0002 0000 0E01 00E0 0000
0918 0000 0E00 A0B5 5402 0000 0E00 10F0 0002
0920 0029 0300 1020 0010 0000 0000 0000 0000
;查看单元内容是否正确
4.
加载微码
>A800
0800: MOV
R1,900 ;微码在内存中的首地址为900H
0802: MOV
R2,9 ;微程序一共有9条微指令
0804: MOV
R3,100 ;微码加载到微控存中的首地址
0806:
LDMC ;加载微码指令
0807:
RET ;返回
0808:
>G800 ;执行加载微码程序
5.
输入程序,测试新指令
>A820
0820: MOV
R0,0023
将操作数放到寄存器R0,这里两个操作数都是23H
0822: MOV
[A00],R0
将R0存放的操作数放到A00地址单元
0824: MOV
[A01],R0
将R0存放的操作数放到A01地址单元
0826: NOP
0827: NOP
0828: NOP
0829: NOP
082A: RET
082B:
>E826
编辑0826开始到0829单元内容,将新指令输入
0826 0000:D400 0000:0A00 0000:0A01 0000:0A02
>U820
查看
0820: 2C00 0023 MOV R0, 0023
0822: 3400 0A00 MOV [0A00],
R0
0824: 3400 0A01 MOV [0A01],
R0
0826:
D400 DW D400
0827:
0A00 ADC R0, R0
0828:
0A01 ADC R0, R1
0829:
0A02 ADC R0, R2
082A:
AC00 RET
>G820
运行
6.
运算结果
>DA00
0A00 0023 0023 0046 0000 0000 0000 0000 0000
;0A00单元和0A01单元内容为操作数,相加后结果为0046,存在0A02单元,正确
(二)将一通用寄存器内容减去某内存单元内容,结果放在另一寄存器中。
指令格式:E0 DR
SR,ADDR
(SR,DR源、目的寄存器各4位)双字指令(控存入口130H)
功能:DR=SR - [ADDR]
1.
微程序
(1)
PC→AR,PC+1→PC 0000 0E00 A0B5 5402
当前程序计数器内容送地址寄存器,为读取操作数地址做准备;程序计数器指向下一单元地址
B55-------------------------------------------------------------------------------------------------------------B0
0000
0000
0000
1110
0000
0000
1010
0000
1011
0101
0101
0100
0000
0010
(2)
MEM→AR 0000 0E00 10F0 0002
从主存读取第一个操作数地址,为读取操作数做准备
B55-------------------------------------------------------------------------------------------------------------B0
0000
0000
0000
1110
0000
0000
0001
0000
1111
0000
0000
0000
0000
0010
(3)
SR-[ADDR] →DR 0029 0301 31D0 0088
寄存器SR存放的操作数减去ADDR单元内容,并存入DR
B55-------------------------------------------------------------------------------------------------------------B0
0010
1001
0000
0011
0000
0001
0011
0001
1101
0000
0000
0000
1000
1000
MIO# REQ WE#为000,BI8-6为011,MI5-3为001,MI2-0为101,SA(B7)=1,SB(B3)=1,表示将寄存器SR(A口)存放的操作数减去ADDR单元内容,并存入DR(通过B口);
B55-B46为0010100100(4AH),即下地址,CI3-0为0011(3号命令,条件转移),SCC为00(CC#),表示转移到4AH中断。
2.
输入微码
>E900
0900 0000:0000 0000:0E00 0000:A0B5 0000:5402 0000:0000
0905 0000:0E00 0000:10F0 0000:0002 0000:0029 0000:0301
090A 0000:31D0 0000:0088
;将微程序的16进制代码输入到从900H开始的内存单元中
3.
查看微码
>D900
0900 0000 0E00 A0B5 5402 0000 0E00 10F0 0002
0908 0029 0301 31D0 0088 0000 0000 0000 0000
;查看单元内容是否正确
4.
加载微码
>A800
0800: MOV
R1,900 ;微码在内存中的首地址为900H
0802: MOV
R2,3 ;微程序一共有9条微指令
0804: MOV
R3,130 ;微码加载到微控存中的首地址
0806:
LDMC ;加载微码指令
0807:
RET ;返回
0808:
>G800 ;执行加载微码程序
5.
输入程序,测试新指令
>A820
0820: MOV
R0,0023
将减数放到通用寄存器R0
0822: MOV
R3,0027
将被减数放到通用寄存器R3
0824: MOV
[A00],R0
将R0中减数放到0A00单元
0826: NOP
0827: NOP
0828: RET
0829:
>E826
编辑0826开始到0827单元,将新指令输入,其中SR为R3, DR为R2
0826 0000:E023 0000:0A00
>U820
查看
0820: 2C00 0023 MOV R0, 0023
0822: 2C30 0027 MOV R3, 0027
0824: 3400 0A00 MOV [0A00],
R0
0826:
E023 DW E023
0827:
0A00 ADC R0, R0
0828:
AC00 RET
>G820
运行
6.
运算结果
>R
R0=0023 R1=090C R2=0004 R3=0027 SP=FFFF PC=0820 IP=0828 R7=0000
R8=0000
R9=0000 R10=0000 R11=0000 R12=0000 R13=0000 R14=0000
R15=0000 F=00001111
0820: 2C00 0023 MOV R0, 0023
;源寄存器为R3,目的寄存器为R2,被减数为0023,减数为0027,结果为0004存放于R2,正确
(三)转移指令。判断两个通用寄存器内容是否相等,若相等则转移到指定绝对地址,否则顺序执行。
指令格式:E5 DR
SR,ADDR
双字指令(控存入口140H)
功能:if DR==SR goto ADDR else顺序执行。
设计:利用指令的CND字段,即IR10~8,令IR10~8=101,即CC=Z
则当DR==SR时Z=1,微程序不跳转,接着执行MEM PC(即ADDR PC)
而当DR!=SR时Z=0,微程序跳转至A4。
1.微程序
(1)
SR-DR 0000 0E01 9190 0088
SR内容减DR内容,若相等,则标志符Z=1,否则Z=0
B55-------------------------------------------------------------------------------------------------------------B0
0000
0000
0000
1110
0000
0001
1001
0001
1001
0000
0000
0000
1000
1000
SST=01,表示接收运算结果设置标志位状态
(2)
PC→AR,CC#=CND,PC+1→PC 0029 03E0 A0B5 5402
当前程序计数器内容送地址寄存器,条件转移信号CC#=CND,即判断Z是否为1,若为1则中断条件成立;程序计数器指向下一单元地址
B55-------------------------------------------------------------------------------------------------------------B0
0010
1001
0000
0011
1110
0000
1010
0000
1011
0101
0101
0100
0000
0010
SCC为0111,表示CC#设置条件(CND)源来自指令寄存器(即IR10-8为0101,CND=Z);
B55-B46为0010100100(4AH),即下地址,CI3-0为0011(3号命令,条件转移),表示转移到4AH中断。
(3)
MEM→PC 0029 0300 30F0 5000
取内存单元ADDR中的地址送PC
B55-------------------------------------------------------------------------------------------------------------B0
0010
1001
0000
0011
0000
0000
0011
0000
1111
0000
0101
0000
0000
0000
MIO# REQ WE#为001,B口地址为0101,表示将主存地址单元ADDR中的地址送至地址寄存器
2.输入微码
>E900
0900 0000:0000 0000:0E01 0000:9190 0000:0088 0000:0029
0905 0000:03E0 0000:A0B5 0000:5402 0000:0029 0000:0300
090A 0000:30F0 0000:5000
3.查看微码
>D900
0900 0000 0E01 9190 0088 0029 03E0 A0B5 5402 .........)....T.
908
0029 0300 30F0 5000 0000 0000 0000 0000 .)..0.P.........
4.加载微码
>A800
0800: MOV R1,900
0802: MOV R2,3
0804: MOV R3,140
0806: LDMC
0807: RET
0808:
>G800
5.输入程序,测试新指令
两数相等时;
>A820
0820: MOV R1,0026
0822: MOV R2,0026
0824: NOP
0825: NOP
0826: MOV R1,0023
0828: RET
0829:
>E824
0824 0000:E512 0000:0828
>U820
0820: 2C10 0026 MOV R1, 0026
0822: 2C20 0026 MOV R2, 0026
0824:
E512 DW E512
0825:
0828 ADC R2, R8
0826: 2C10 0023 MOV R1, 0023
0828:
AC00 RET
0829:
0011 NOP
082A:
AC00 RET
082B:
0000 NOP
082C:
0000 NOP
082D:
0000 NOP
082E:
0000 NOP
082F:
0000 NOP
0830:
0000 NOP
0831:
0000 NOP
0832:
0000 NOP
>G820
两数不相等时:
>A820
0820: MOV R1,0025
0822: MOV R2,0024
0824: NOP
0825: NOP
0826: MOV R1,0023
0828: RET
0829:
>E824
0824 0000:E512 0000:0828
>U820
0820: 2C10 0025 MOV R1, 0025
0822: 2C20 0024 MOV R2, 0024
0824:
E512 DW E512
0825:
0828 ADC R2, R8
0826: 2C10 0023 MOV R1, 0023
0828:
AC00 RET
>G820
6.运算结果
相等时:
>R
R0=0000 R1=0026 R2=0026 R3=0011
SP=FFFF PC=0820 IP=0828 R7=0000 R8=0000
R9=0000 R10=0000 R11=0000 R12=0000 R13=0000 R14=0000
R15=0000 F=01001111
0820: 2C10 0026 MOV R1, 0026
;相等时转移到0828执行RET,不执行MOV R1, 0023
;该运算结果正确
不相等时:
>R
R0=0000 R1=0023 R2=0024 R3=0011 SP=FFFF PC=0820 IP=0828 R7=0000 R8=0000
R9=0000 R10=0000 R11=0000 R12=0000 R13=0000 R14=0000
R15=0000 F=00001111
0820: 2C10 0025 MOV R1, 0025
;不相等时执行MOV R1, 0023
;该运算结果正确
四.课程设计答辩题目
设计一个新指令E0 X
DR,实现功能[ADD2]←DR-[ADD1]
设计:
指令格式
E0 X DR
ADD1
ADD2
微指令:
(1)
PC→AR,PC+1→PC ;ADD1地址送地址寄存器
(2)
MEM→AR ;取ADD1地址
(3)
DR+0→Q ; Q存被减数
(4)
Q-MEM→DR ;计算结果回送DR
(5)
PC→AR,PC+1→AR ;取ADD2地址送地址寄存器
(6)
MEM→AR ;取ADD2地址
(7)
DR→MEM,CC#=0 ;DR内容送主存ADD2单元,转中断
二进制微码:
(1)0000 0000 0000
1110 0000 0000 1010 0000 1011 0101 0101 0100 0000 0010
(2)0000 0000 0000
1110 0000 0000 0001 0000 1111 0000 0000 0000 0000 0100
(3)0000 0000 0000
1110 0000 0000 1000 0000 0011 0000 0000 0000 0000 1000
(4)0000 0000 0000
1110 0000 0001 0010 0001 1110 0000 0000 0000 0000 1000
(5)0000 0000 0000
1110 0000 0000 1010 0000 1011 0101 0101 0100 0000 0010
(6)0000 0000 0000
1110 0000 0000 0001 0000 1111 0000 0000 0000 0000 0100
(7)0010 1001 0000
0011 0000 0000 0011 0000 0011 0000 0000 0000 0001 1000
十六进制微码:
(1)0000 0E00 A0B5
5402
(2)0000 0E00 10F0
0004
(3)0000 0E00 8030
0008
(4)0000 0E01 21E0
0008
(5)0000 0E00 A0B5
5402
(6)0000 0E00 10F0
0004
(7)0029 0300 3030
0018
五.实验心得
这个课程设计是对整个学期对计算机组成原理学习的回顾,因此算是这个学期最难的一个大实验,因为设计微码要求对运算器、控制器都要有很深的了解,不仅仅是照着书本上的步骤去做,而是要真真正正去设计一些计算机能运行的最底层的指令,因此,做这个课程设计要在短时间内突击是很困难的,需要平时注意听老师讲的细节上的问题。比如,AM2901外部数据只能从A口进入,结果回存只能通过B口等老师常常强调的,如果没有注意,实验起来就会很麻烦。
在之前做微程序控制实验的时候,其实还有一些地方很模糊,比如为什么测试新指令的时候要输入一定数量的NOP空操作,新指令和程序在运行时是怎么联系在一起的,下地址字段的意义,等等。但是通过课程设计,更推动了我对这些问题加深了解,对计算机的运行原理比之前要更加透彻了。
成绩评定表
到课率
答辩成绩
总成绩
签字:
年
月
日