计算机组成原理课程设计报告(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(即)而当DR!=SR 时Z=0,微程序跳转至A4。
四、实验要求:(1)根据内容自行设计相关指令微程序;(务必利用非上机时间设计好微程序)(2)设计测试程序、实验数据并上机调试。
(3)设计报告内容:包括1、设计目的2、设计内容3、微程序设计(含指令格式、功能、设计及微程序)4、实验数据(测试所设计指令的程序及结果)。
(具体要求安最新规范为准)(1)大型实验报告必须打印成册,各班班长收齐大型实验报告于19周星期五前,交张芳老师办公室。
五、上机时间安排:2014计算机组成原理课程设计安排如下:(第十九周)(地点:10-413和414机房)备注:1.各班每2人一组,可自由组合但要固定,各班班长将各组组号及学生名单于第一次上机时上报指导教师;2.各班学生须严格按照规定的时间上机,不得无故缺席、迟到早退,指导教师会严格考勤。
指导教师:许建龙、张芳2014年6月18日计算机组成原理课程设计实验报告一、目的和要求深入了解计算机各种指令的执行过程,以及控制器的组成,指令系统微程序设计的具体知识,进一步理解和掌握动态微程序设计的概念;完成微程序控制的特定功能计算机的指令系统设计和调试。
二、实验环境PC 机与TEC-2机模拟程序三、具体内容(一)把用绝对地址表示的内存单元A 中的内容与内存单元B中的内容相加,结果存于内存单元C中。
指令格式:D4××,ADDR1,ADDR2,ADDR3 四字指令(控存入口100H)功能:1. 微程序:[ADDR3]=[ADDR1]+[ADDR2](1)PC→AR,PC+1→PC 00000E00A0B55402当前程序计数器内容送地址寄存器,为读取第一个操作数地址做准备;程序计数器指向下一单元地址B55----------------------------------------------------------------------------------------------------------------B0CI3-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→AR00000E00 10F0 0002从主存读取第一个操作数地址,为读取第一个操作数做准备B55-----------------------------------------------------------------------------------------------------------------B0MIO#REQ WE#为001,表示从主存储器读入数据(地址);B 口地址为0000,BI8-BI6为001,MI5-MI3为000,MI2-MI0为111,SCI为00,做运算;表示AM2901不0000 0000 0000 1110 0000 0000 1010 0000 1011 0101 0101 0100 0000 0010 0000 0000 0000 1110 0000 0000 0001 0000 1111 0000 0000 0000 0000 0010(3)MEM→Q 00000E0000F00000从主存读取第一个操作数B55--------------------------------------------------------------------------------------------------------------------B000000000000011100000000000000000111100000000000000000000MIO #REQ WE#(B23)为001,表示从主存储器读入数据(地址);I8-6 为000,MI5-3为000,MI2-0 为111,表示将主存中读出的数据加上0,再将结果回送到Q 寄存器;(4)PC→AR,PC+1→PC 00000E00A0B55402当前程序计数器内容送地址寄存器,为读取第二个操作数地址做准备;程序计数器指向下一单元地址B55--------------------------------------------------------------------------------------------------------------------B00000 0000 0000 1110 0000 0000 1010 0000 1011 0101 0101 0100 0000 0010(5)MEM→AR00000E00 10F0 0002从主存读取第二个操作数地址,为读取第二个操作数做准备B55--------------------------------------------------------------------------------------------------------------------B00000 0000 0000 1110 0000 0000 0001 0000 1111 0000 0000 0000 0000 0010(6)MEM+Q→Q 0000 0E00 00E0 0000从主存读取第二个操作数B55--------------------------------------------------------------------------------------------------------------------B000000000000011100000000000000000111000000000000000000000MIO# REQ WE#为001,BI8-6为000,MI5-3为000,MI2-0为110,表示将第二个操作数从主存读出并且加上Q 寄存器的内容,再将结果回送到Q寄存器;(7)PC→AR,PC+1→PC 00000E00A0B55402当前程序计数器内容送地址寄存器,为读取计算结果存储单元地址做准备;程序计数器指向下一单元地址B55--------------------------------------------------------------------------------------------------------------------B00000 0000 0000 1110 0000 0000 1010 0000 1011 0101 0101 0100 0000 0010(8)MEM→AR00000E00 10F0 0002从主存读取结果存储单元地址B55--------------------------------------------------------------------------------------------------------------------B00000 0000 0000 1110 0000 0000 0001 0000 1111 0000 0000 0000 0000 0010(9)Q→MEM,CC#=00029 0300 1020 0010计算结果送结果存储单元B55--------------------------------------------------------------------------------------------------------------------B00010 1001 0000 0011 0000 0000 0001 0000 0010 0000 0000 0000 0001 0000MIO#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. 输入微码>E90009000000:00000000:0E000000:A0B5 0000:5402 0000:00000905 0000:0E00 0000:10F0 0000:0002 0000:0000 0000:0E00090A 0000:00F0 0000:0000 0000:0000 0000:0E00 0000:A0B5090F 0000:5402 0000:0000 0000:0E000000:10F0 0000:00020914 0000:0000 0000:0E010000:00E0 0000:0000 0000:0000 0919 0000:0E00 0000:A0B50000:5402 0000:0000 0000:0E00 091E 0000:10F0 0000:0002 0000:0029 0000:0300 0000:1020 0923 0000:0010;将微程序的16进制代码输入到从900H开始的内存单元中3. 查看微码>D9000900 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 00000918 0000 0E00 A0B5 5402 0000 0E00 10F0 0002 0920 0029 0300 1020 0010 0000 0000 0000 0000;查看单元内容是否正确4. 加载微码>A8000800:MOV R1,900;微码在内存中的首地址为900H 0802:MOV R2,9;微程序一共有9 条微指令0804:MOV R3,100;微码加载到微控存中的首地址0806:LDMC;加载微码指令807: RET;返回808:>G800 ;执行加载微码程序5. 输入程序,测试新指令>A8200820:MOV R0,0023 0822:MOV[A00],R0 0824:MOV[A01],R0 826:NOP827:NOP828:NOP829:NOP082A: RET082B:>E826将操作数放到寄存器R0,这里两个操作数都是23H 将R0存放的操作数放到A00地址单元将R0存放的操作数放到A01地址单元编辑0826开始到0829单元内容,将新指令输入0826 0000:D400 0000:0A00 0000:0A010000:0A02 >U820查看0820:2C000023MOV R0, 00230822:3400 0A00MOV [0A00],R00824:3400 0A01MOV [0A01],R00826:D400 DW D4000827:0A00 ADC R0, R00828:0A01 ADC R0, R10829:0A02 ADC R0, R2082A: AC00 RET>G820运行6. 运算结果>DA00 0A00 0023 0023 0046 0000 0000 0000 0000 0000;0A00 单元和 0A01 单元内容为操作数,相加后结果为 0046,存在 0A02 单元,正确(二)将一通用寄存器内容减去某内存单元内容,结果放在另一寄存器中。