您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 其它相关文档 > 计算机组成原理课程设计
指导教师:桂宁张芳2016年6月18日计算机组成原理课程设计报告(2015/2016第二学期------第17周)指导教师:桂宁张芳班级:姓名:学号:一、目的和要求目的:深入了解计算机各种指令的执行过程,以及控制器的组成,指令系统微程序设计的具体知识,进一步理解和掌握动态微程序设计的概念;完成微程序控制的特定功能计算机的指令系统设计和调试。要求:根据内容自行设计相关指令微程序;(务必利用非上机时间设计好微程序)设计测试程序、实验数据并上机调试。设计报告内容:包括1、设计目的2、设计内容3、微程序设计(含指令格式、功能、设计及微程序)4、实验数据(测试所设计指令的程序及结果)。二、实验环境TEC-2机和PC机三、具体内容实验内容:(1)把用绝对地址表示的内存单元ADDR1中的内容与内存单元ADDR2中的内容相减,结果存于内存单元ADDR3中。指令格式:D4××,ADDR1,ADDR2,ADDR3,四字指令(控存入口100H)功能:[ADDR3]=[ADDR1]-[ADDR2](2)将一通用寄存器内容减去某内存单元内容,结果放在另一寄存器中。指令格式:E0DRSR,ADDR(SR,DR源、目的寄存器各4位)双字指令(控存入口130H)功能:DR=SR-[ADDR](3)转移指令。判断两个通用寄存器内容是否相等,若相等则转移到指定绝对地址,否则顺序执行。指令格式:E5DRSR,ADDR双字指令(控存入口140H)功能:ifDR==SRgotoADDRelse顺序执行。设计:利用指令的CND字段,即IR10~8,令IR10~8=101,即CC=Z则当DR==SR时Z=1,微程序不跳转,接着执行MEMPC(即ADDRPC)而当DR!=SR时Z=0,微程序跳转至A4。实验设计并分析第一条:把用绝对地址表示的内存单元ADDR1中的内容与内存单元ADDR2中的内容相减,结果存于内存单元ADDR3中。指令格式:D4××,ADDR1,ADDR2,ADDR3,四字指令(控存入口100H)功能:[ADDR3]=[ADDR1]-[ADDR2]指令格式:D4XXADDR1ADDR2ADDR3微程序:PC-AR,PC+1-PC:00000E00A0B55402MEN-AR:00000E0010F00002MEN-Q:00000E0000F00000PC-AR,PC+1-PC:00000E00A0B55402MEN-AR:00000E0010F00002MEN-Q-Q:00000E0101E00000PC-AR,PC+1-PC:00000E00A0B55402MEN-AR:00000E0010F00002Q-MEN,CC#=0:0029030010200010E90009000000:00000000:0E000000:A0B50000:54020000:000009050000:0E000000:10F00000:00020000:00000000:0E00090A0000:00F00000:00000000:00000000:0E000000:A0B5090F0000:54020000:00000000:0E000000:10F00000:000209140000:00000000:0E010000:01E00000:00000000:000009190000:0E000000:A0B50000:54020000:00000000:0E00091E0000:10F00000:00020000:00290000:03000000:102009230000:0010用D命令查看输入的微码:D900090000000E00A0B5540200000E0010F00002......T.........090800000E0000F0000000000E00A0B55402..............T.091000000E0010F0000200000E0101E00000................091800000E00A0B5540200000E0010F00002......T.........092000290300102000100000000000000000.)..............092800000000000000000000000000000000................A8000800:MOVR1,9000802:MOVR2,90804:MOVR3,1000806:LDMC0807:RET0808:用G命令运行加载微码的程序:G800用A命令输入程序:A8200820:MOVR0,00230822:MOV[A00],R00824:MOVR1,00220826:MOV[A01],R10828:NOP0829:NOP082A:NOP082B:NOP082C:RET082D:用E命令输入新指令:E82808280000:D4000000:0A000000:0A010000:0A02用U命令查看输入程序:U8200820:2C000023MOVR0,00230822:34000A00MOV[0A00],R00824:2C000032MOVR1,00220826:34000A01MOV[0A01],R10828:D400DWD4000829:0A00ADCR0,R0082A:0A01ADCR0,R1082B:0A02ADCR0,R2082C:AC00RET082D:0000NOP082E:0000NOP082F:0000NOP0830:0000NOP0831:0000NOP0832:0000NOP0833:0000NOP用G命令运行程序:G820用D命令查看运行结果:DA000A000023002200010000假设从地址[0828]开始执行微程序,此时程序计数器PC的值是0829。因为运行程序的时候[0829]和[0830]中存了减法的两个数的内存地址,所以要想方设法1)把这两个加数传到运算器的寄存器中,2)在运算器中相减,3)将结果输出到内存单元[ADDR1]。以下分别进行分析。1)取每个加数要访问两次内存,第一次是取得被减数所在的内存地址的值(MEM→AR),第二次是取得减数本身并保存在Q寄存器中(MEM→Q)。注意,取第二个减数的时候,第一次仍是MEM→AR,而第二次MEM-Q→Q的同时也把减法给完成了,请见接下来的分析。2)相减的操作是MEM-Q→Q。MEM是从内存中取得的第二个数的值,左边的Q是刚才取得的第一个数的值。他俩相减的和传给Q寄存器,覆盖掉了Q寄存器刚才保存的值(第一个数)。3)现在Q寄存器中存有减法的运算结果,最后的工作是把这个结果写到内存单元[ADDR1]中去。如果AR或者PC指向[ADDR1]的话就好办了,难点在于现在AR已经到了[ADDR2]处,PC已经到了[ADDR2+1]处,而且又不知道如何让寄存器的值减一。后来问同学,得到了解决办法:利用IP寄存器。IP正好还呆在[ADDR1-1],即内存地址[0828]。显然,让IP+1就得到了[ADDR1],即[0829]。微指令是IP+1→AR以及MEM→AR,这时AR的值为第一个加数所在的单元[ADDR1]。现在Q的值是运算结果,AR的值是运算结果要传给的内存地址。显而易见,最后一步就是“存储器写”操作Q→MEM。第二条:将一通用寄存器内容减去某内存单元内容,结果放在另一寄存器中。指令格式:E0DRSR,ADDR(SR,DR源、目的寄存器各4位)双字指令(控存入口130H)功能:DR=SR-[ADDR]指令格式:E0XXADDR微程序:PC→AR,PC+1→PC:00000E00A0B55402MEM→AR:00000E0010F00002SR-[ADDR]→DR:0029030131D00088用E命令输入微码:E90009000000:00000000:0E000000:A0B50000:54020000:000009050000:0E000000:10F00000:00020000:00290000:0301090A0000:31D00000:0088用D命令查看输入的微码:D900090000000E00A0B5540200000E0010F00002......T.........09080029030131D000880000000000000000.)..1...........091000000000000000000000000000000000................用A命令输入加载微码的程序:A8000800:MOVR1,9000802:MOVR2,30804:MOVR3,1300806:LDMC0807:RET0808:用G命令运行加载微码的程序:G800用A命令输入程序:A8200820:MOVR7,00240822:MOVR8,00230824:MOV[A00],R80826:NOP0827:NOP0828:RET0829:用E命令输入新指令:E82608260000:E0070000:0A00用U命令查看输入的程序:U8200820:2C700024MOVR7,00240822:2C800023MOVR8,00230824:34080A00MOV[0A00],R80826:E007DWE0070827:0A00ADCR0,R00828:AC00RET0829:0000NOP082A:0000NOP082B:0000NOP082C:0000NOP082D:0000NOP082E:0000NOP082F:0000NOP0830:0000NOP0831:0000NOP0832:0000NOP用G命令运行程序:G820用D命令查看运行结果:DA000A00002200000000用R命令查看寄存器内容:RR0=0001R1=090CR2=0000R3=0133SP=FFFFPC=0820IP=0828R7=0024R8=0023R9=0000R10=0000R11=0000R12=0000R13=0000R14=0000R15=0000F=000011110820:2C700024MOVR7,0024根据指令的功能和指令格式,先读取地址ADDR单元内容暂时放置于Q寄存器中,然后再读取内存单元中的DATA,同时与Q寄存器内容相减,结果存放在DR寄存器中。第三条:转移指令。判断两个通用寄存器内容是否相等,若相等则转移到指定绝对地址,否则顺序执行。指令格式:E5DRSR,ADDR双字指令(控存入口140H)功能:ifDR==SRgotoADDRelse顺序执行。设计:利用指令的CND字段,即IR10~8,令IR10~8=101,即CC=Z则当DR==SR时Z=1,微程序不跳转,接着执行MEMPC(即ADDRPC)而当DR!=SR时Z=0,微程序跳转至A4。指令格式:E5XXADDR微程序:SR-DR:00000E0191900088PC→AR,CC#=CND,PC+1→PC:002903E0A0B55402MEM→PC:0029030030F05000用E命令输入微码:E90009000000:00000000:0E010000:91900000:00880000:002909050000:03E00000:A0B50000:54020000:00290000:0300090A0000:30F00000:5000用D命令查看输入的微码:D900090000000E0191900088002903E0A0B55402.........)....T.09080029030030F050000000000000000000.)..0.P.........091000000000000000000000000000000000................用A命令输入加载微码的程序:A8000800:MOVR1,9000802:MOVR2,3080
本文标题:计算机组成原理课程设计
链接地址:https://www.777doc.com/doc-4582096 .html