1/6实验报告专业班级:姓名:机器号:学号:E-mail:指导教师:总成绩:分步成绩:出勤:实验表现实验报告:实验五模型机与机器指令执行实验一实验目的1实验目的(1)掌握控制器的工作原理(2)掌握由控制器、运算器、存储器、组成的模型机的工作原理(3)通过运行各种简单程序,掌握机器指令和微指令的关系2实验要求(1)做好实验预习和准备工作,掌握本次实验所用指令系统功能(2)将实验用汇编语言源文件编译成机器语言的目标文件(3)完成规定的实验内容(4)故障分析与排除(5)实验结束时完成实验报告,并将报告提交服务器。二实验原理模型机的逻辑框图如图所示。其指令系统和微指令系统可参看资料。在本实验中,模型机作为一个整体工作。所有微程序的控制信号由微程序存储器uM输出。而各寄存器,运算器的控制端口与uM联接。计算机组成原理机器号___________________AWTDLRSTR3R2R1R0MARkeyinportoutPCmem_amem_dIRControl24ALUDBUSABUSIAIBUSINT_CODEDisplayInputSRAM2/6三实验内容在实验前,先用8芯电缆连接J1和J2,控制方式开关拨到“微程序控制”方向。将计算机串口与实验仪串口相连,启动COP2000软件,并用快捷图标“设置”功能打开设置窗口,选择实验仪连接的串行口,然后再按“连接COP2000实验仪”按钮接通到实验仪。实验4移位/取反实验1在COP2000软件中的源程序窗口输入下列程序:MOVA,#55HRRARLCACPLAEND2将程序另存为EX3.ASM,将程序汇编成机器码,反汇编窗口会显示出程序地址,机器码,反汇编指令。3执行“单微指令运行”功能,观察执行每条指令时,寄存器的输入/输出状态,各控制信号的状态,PC及uPC如何工作,其跟踪结果写人下表。汇编指令程序地址机器码指令说明微程序PCuPC运行时寄存器或存储器的值MOVA,#55H00017C55传输数据指令C7FFF7CBFFFF01027C7DEM=55,A=00EM=D0,A=55RRA02D0逻辑右移FFFCB7CBFFFF0303D0D1EM=DC,D=55EM=7C,A=2ARLCA03DC带进位左移FFFED7CBFFFF0404DCDDEM=E4EM=7C,A=54CPLA04E4取反FFFE96CBFFFF0505E4E5EM=00EM=7C,A=AB实验5调用实验1在COP2000软件中的源程序窗口输入下列程序:MOVA,#00LOOP:CALLINCAJMPLOOPINCA:ADDA,#1RETEND2将程序另存为EX5.ASM,将程序汇编成机器码,反汇编窗口会显示出程序地址,机器码,反汇编指令。3执行“单微指令运行”功能,观察执行每条指令时,寄存器的输入/输出状态,各控制信号的状态,PC及uPC如何工作,其跟踪结果写人下表。汇编指令程序地址机器码指令说明微程序PCuPC运行时寄存器或存储器的值MOVA,#0000017C00数据传输指令C7FFF7CBFFFF01027C7DEM=BC,A=00CALLINCA0203BC06调用函数段EF7F7FFFEF7FD6BFFFCBFFFF03040406BCBDBEBFEM=06EM=ACEM=063/6ADDA,#106071C01不带进位加法C7FFEFFFFE90CBFFFF0708081C1D1EEM=01EM=CC,W=01EM=06,A=01RET08CC返回语句FEFF5FCBFFFF0904CCCDEM=00EM=06JMPLOOP0405AC02无条件跳转语句C6FFFFCBFFFF0502ACADEM=02EM=BC四思考题1,简述IR寄存器的作用,IR0,IR1的作用。IR2,IR3的作用。答:IR寄存器用来存放从主存储器读出的一条指令。IR0:用来存放后续指令地址。IR1:保存当前正在执行的一条指令IR2:保存将被存储的下一个数据字节的地址。IR3:保存当前CPU所访问的主存单元的地址。2,简述跳转指令的执行过程。答:首先从SRAM中取指令经IBUS存入IR寄存器,并且解析指令,然后将指令码存入μPC,根据μPC从μM中读出微指令,通过控制端口执行该组微指令,该组微指令有两条,所执行的操作为:以PC为地址从EM中读出数据并送到数据总线上,再将数据总线上的数据存入PC中。该组微指令执行完毕后,从PC中将下一条指令的地址输出到MAR,再从MAR输入到SRAM,从SRAM中读取下一条指令,该条指令就是跳转到的标号位置的指令。实验六指令/微指令设计实验一实验目的1掌握计算机各种指令的设计和执行过程;2掌握指令/微指令的设计方法。二实验原理COP2000计算机组成原理实验仪,可以由用户自己设计指令/微指令系统,这样用户可以在现有的指令系统上进行扩充,加上一些较常用的指令,也可重新设计一套完全不同的指令/微指令系统。做为原理,我们建立一个有如下指令的系统:指令助记符指令意义描述LDA,#II将立即数装入累加器AADDA,#II累加器A加立即数GOTOMM无条件跳转指令OUTA累加器A输出到端口因为硬件系统需要指令机器码的最低两位做为R0-R3寄存器寻址用,所以指令机器码要忽略掉这两位。这四条指令的机器码分别为04H,08H,0CH,10H。其它指令的设计相同。指令系统设计1.打开COP2000组成原理实验软件,选择[文件|新建指令系统/微程序],观察软件下方的“指令系统”窗口,所有指令码都“未使用”。4/62.选择第二行,即“机器码1”为000001XX行,在下方的“助记符”栏填入数据装载功能的指令助记符“LD”,在“操作数1”栏选择“A”,表示第一个操作数为累加器A。在“操作数2”栏选择“#II”,表示第二个操作数为立即数。按“修改”按钮确认。3.选择第三行,即“机器码1”为000010XX行,在下方的“助记符”栏填入加法功能的指令助记符“ADD”,在“操作码1”栏选择“A”,表示第一操作数为累加器A,在“操作数2”栏选择“#II”,表示第二操作数为立即数。按“修改”按钮确认。4.选择第四行,即“机器码1”为000011XX行,在下方的“助记符”栏填入无条件跳转功能的指令助记符“GOTO”,在“操作码1”栏选择“MM”,表示跳转地址为MM,此指令无第二操作数,无需选择“操作数2”。按“修改”按钮确认。5.选择第五行,即“机器码1”为000100XX行,在下方的“助记符”栏填入输出数据功能的指令助记符“OUTA”,由于此指令隐含指定了将累加器A输出到输出商品寄存器,所以不用选择“操作码1”和“操作数2”,按“修改”按钮确认。输入完成了四条指令如图,微指令系统设计将窗口切换到“uM微程序”窗口,现在此窗口中所有微指令值都是0FFFFFFH,也就是无任何操作,我们需要在此窗口输入每条指令的微程序来实现该指令的功能。1.程序开始要执行的第一条微指令应是取指操作,因为程序复位后,PC和uPC的值都为0,所以微程序的0地址处就是程序执行的第一条取指的微指令。根据此功能,首先选中“_FATCH_”指令的第一行,观察窗口下方的各控制信号,有“勾”表示信号为高,处于无效状态,去掉“勾”信号为低,为有效状态。要从EM中读数,EMRD必需有效,去掉信号下面的“勾”使其有效;读EM的地址要从PC输出,所以PCOE要有效,允许PC输出,去掉PCOE下面的“勾”,PCOE有效同时还会使PC加1,准备读EM的下一地址;IREN是将EM读出的指令码存入uPC和IR,所以要去掉IREN的“勾”使其有效。这样,取指操作的微指令就设计好了,取指操作的微指令的值为0CBFFFFH。2.第一条指令是把立即数装入累加器A,首先要从EM中读出立即数,并送到数据总线DBUS,再从DBUS上将数据打入累加器A中,按照这个要求,从EM中读数据,EMRD应该有效,EM的地址由PC输出,PCOE必需有效,读出的数据送到DBUS,EMEN也应有效,要求将数据存入A中,AEN也要有效,选中“LDA,#II”指令的第一行,这条微指令的值为0C7FFF7H。为了保证程序的连续执行,每条指令的最后必需是取指令,取出下条将要执行的指令。所以微指令的值为0CBFFFFH。3.第二条指令为立即数加法指令,立即数加可分两步,首先从EM中读出立即数,送到DBUS,并存入工作寄存器W中,从EM中读数,EMRD应有效,读EM的地址由PC输出,PCOE要有效,读出的数据要送到DBUS,EMEN应有效,数据存入W中,WEN应有效,根据描述,这条微指令的值为0C7FFEFH。第二步,5/6执行加法操作,并将结果存入A中。执行加法操作,S2S1S0的值应为000(二进制),结果无需移位直接输出到DBUS,X2X1X0的值就要为100(二进制),从DBUS将数据再存入A中,AEN应有效。与此同时,ABUS和IBUS空闲,取指操作可以并行执行,也就是以PC为地址,从EM中读出下条将要执行指令的机器码,并打入IR和uPC中,根据取指操作的说明,EMRD、PCOE、IREN要有效,根据上面描述,选中该指令的第二行,将EMRD、PCOE、IREN、X2X1X0、AEN、S2S1S0都置成有效和相应的工作方式,此微指令的值为0CBFF90H。4.“GOTOMM”为无条件跳转,所要执行的操作为从EM中读出目标地址,送到数据总线DBUS上,并存入PC中,实现程序跳转。从EM中读数,EMRD要有效,读EM的地址由PC输出,PCOE有效,数据送到DBUS,EMEN要有效,将数据打入PC中,由两位决定,ELP有效,指令寄存器IR的第三位IR3应为1,由于本指令机器码为0CH,存入IR后,IR3为1。选中“GOTOMM”指令的第一行,将上面的EMRD、PCOE、EMEN、ELP设成低,使其成为有效状态,结合指令的第三位,实现程序跳转,这条微指令的值为0C6FFFFH。下条微指令应为取指操作,微指令的值为0CBFFFFH。5.“OUTA”,将累加器的内容输出到输出端口。其操作为累加器A不做运算,直通输出,ALU结果不移位输出到DBUS,DBUS上的数据存入输出端口OUT。累加器A直通输出结果,S2S1S0值要为111(二进制),ALU结果不移位输出到数据总线DBUS,X2X1X0的值要等于100(二进制),DBUS数据要打入OUT,那么OUTEN应有效。与此同时,ABUS和IBUS空闲,取指操作可以并行执行,也就是以PC为地址,从EM中读出下条将要执行指令的机器码,并打入IR和uPC中,根据取指操作的说明,EMRD、PCOE、IREN要有效,综上所述,选中此指令的第一行,将EMRD、PCOE、IREN、OUTEN、X2X1X0、S2S1S0置成有效状态和相应的工作方式,微指令的值为0CBDF9FH。6.选择菜单[文件|保存指令系统/微程序]功能,将新建的指令系统/微程序保存下来,以便以后调用。为不与已有的两个指令系统冲突,将新的指令系统/微程序保存为“NEW_INST.INS”。三实验内容1.对新设计的指令系统的验证:(1)在源程序窗口输入下面程序LDA,#0LOOP:ADDA,#1OUTAGOTOLOOP(2)将程序另存为NEW_INST.ASM,将程序汇编成机器码,观察反汇编窗口,会显示出程序地址、机器码、反汇编指令。(3)按快捷图标的F7,执行“单微指令运行”功能,观察执行每条微指令时,数据是否按照设计要求流动,寄存器的输入/输出状态是否符合设计要求,各控制信号的状态,PC及uPC如何工作是否正确。(4)运行过程写入下表:汇编指令程序地址机器码指令说明微程序PCuPC运行时寄存器或存储器的值LDA,#0000400将立即数装入累加器AC7FFF701046/601CBFFFF0205EM=08,A=00ADDA,#102030801累加器A加立即数C7FFEFCBFF9003040809EM=01EM=10,W=01OUTA0410无条件跳转指令CBDF9F0510EM=0C,A=01GOTOLO