您好,欢迎访问三七文档
实验设计指令/微指令系统一、实验目的CP226计算机组成原理实验仪,可以由用户自己设计指令/微指令系统。自己可以在现有的指令系统上进行扩充,加上一些较常用的指令,也可重新设计一套完全不同的指令/微指令系统。1.在设计指令的过程中理解和掌握各个单元、总线信号的功能,以及与数据的流向的关系。2.根据掌握情况设计每条指令,明确每条指令需要几个机器周期,每个机器周期需要完成的任务,对相容性的微操作采用并行执行的方式以使指令简化,提高执行效率。二、实验仪器CP226计算机组成原理实验仪、CP226计算机组成原理软件三、实验内容1.建立一个有如下指令的系统:指令助记符指令意义描述MOVR?,#II将立即数II装入寄存器R中STOR?,MM将存储器MM地址的值加入累加器R?中ADDCR?,#II将立即数II加入寄存器R?中,带进位2.创建新指令系统文件名为:new.dat打开CP226组成原理实验软件,选择[文件|打开指令系统/微程序],调入一个已有的指令系统文件insfile1.dat,参考原来文格式,输入如下文件后,清除原来的指令系统,选择[文件]\另存为new.dat。助记符号指令码字节数MOVR0,#*042MOVR1,#*052MOVR2,#*062MOVR3,#*072STOR0,*082STOR1,*092STOR2,*0A2STOR3,*0B2ADDCR0,#*0C2ADDCR1,#*0D2ADDCR2,#*0E2ADDCR3,#*0F2注:助记符中,#表示立即数,*表示十六进制数,@表示间址寻址04-0F表示相应指令的入口地址,最后一列为该指令所占的字节数。3.创建新微指令系统文件名为:new.mic打开CP226组成原理实验软件,选择[文件|打开指令系统/微程序],调入一个已有的微指令系统文件insfile1.mic,参考原来文件格式,待下面微程序代码确定后相应输入下表,然后清除原来的微指令系统,选择[文件]\另存为new.mic._FATCH_T000CBFFFF指令寄存器IRPC输出A输出写入+101FFFFFFA输出+102FFFFFFA输出+103FFFFFFA输出+1MOVR?,#IIT104C7FBFF存贮器值EM寄存器R?PC输出A输出+1+1T005CBFFFF指令寄存器IRPC输出A输出写入+106FFFFFFA输出+107FFFFFFA输出+1STOR?,MMT208C77FFF存贮器值EM地址寄存器MARPC输出A输出+1+1T109D7BBFF存贮器值EM寄存器R?MAR输出A输出+1T00ACBFFFF指令寄存器IRPC输出A输出写入+10BFFFFFFA输出+1ADDCR?,#IIT30CC7FFEF存贮器值EM寄存器WPC输出A输出+1+1T20DFFF7F7寄存器R?寄存器AA输出+1T10EFFFA9CALU直通寄存器R?标志位C,Z加运算+1T00FCBFFFF指令寄存器IRPC输出A输出写入+1下面根据指令的功能来设计相应的微程序。⑴将窗口切换到“uM微程序”窗口,每个程序开始要执行的第一条微指令应是取指操作,因为程序复位后,PC和uPC的值都为0,所以微程序的0地址处就是程序执行的第一条取指的微指令。取指操作要做的工作是从程序存储器EM中读出下条将要执行的指令,并将指令的机器码存入指令寄存器IR和微程序计数器uPC中,出下条操作的微指令。根据此功能,观察窗口下方的各控制信号,有“勾”表示信号为高,处于无效状态,去掉“勾”信号为低,为有效状态。要从EM中读数,EMRD必需有效,去掉信号下面的“勾”使其有效;读EM的地址要从PC输出,所以PCOE要有效,允许PC输出,去掉PCOE下面的“勾”,PCOE有效同时还会使PC加1,准备读EM的下一地址;IREN是将EM读出的指令码存入uPC和IR,所以要去掉IREN的“勾”使其有效。这样,取指操作的微指令就设计好了,取指操作的微指令的值为CBFFFFH。然后把助记符"_FATCH_",状态"T0",微地址"00",微程序"CBFFFFH"(其余为注释可略),按照上表格式填入,其余类同.(2)MOVR?,#II本指令是将立即数装入通用寄存器R?中,为两个状态周期。首先要从EM中读出立即数,并送到数据总线DBUS,再从DBUS上将数据打入寄存器R0中,按照这个要求,从EM中读数据,EMRD应该有效,EM的地址由PC输出,PCOE必需有效,读出的数据送到DBUS,EMEN也应有效,要求将数据写入R?中,RWR也要有效,同时由.DAT文件中的相应指令的入口地址的最低两位选定R?寄存器(00选定R0,01选定R1,10选定R2,11选定R3)。此处设计的“MOVR?,#II”指令有两个状态周期,T1状态将所有有效位下面的“勾”去掉,使其有效,这条微指令的值为C7FBFFH。为了保证程序的连续执行,每条指令的最后必需是取指令,取出下条将要执行的指令。T0状态取指微指令的值为CBFFFFH。(3)STOR?,MM本指令是将存储器MM地址的值加入累加器R?中,为三个状态周期。在T2状态时,将PC值做为程序存储器EM的地址,所以,PCOE应有效,从程序存储器中读出数据,并将读出的数据送到DBUS总线上则EMRD、EMEN要有效,再将DBUS总线上的数据打入地址寄存器MAR,则MAREN有效,uPC同时加1,取出下条微指令准备执行。按照这个要求,这条微指令的值为C77FFF。在T1状态时,将地址寄存器MAR的值送到地址总线ABUS上,则MAROE有效,以MAR的值做为程序存储器的地址,读出数据并送到数据总线DBUS,则EMRD、EMEN有效。同时将此数据存入寄存器R?中,由.DAT文件中的相应指令的入口地址的最低两位选定R?寄存器(00选定R0,01选定R1,10选定R2,11选定R3),RWR有效以写入R?。同时uPC加1,取出下条微指令准备执行。按照这个要求,在T1状态,微指令的值为D7BBFF。在T0状态时,微指令执行取指令操作,取指微指令的值为CBFFFFH。(4)ADDCR?,#II本指令是将立即数II加入寄存器R?中,带进位,为四个状态周期。在T3状态时,首先要以PC作为地址从EM中读出立即数,并送到数据总线DBUS,再从DBUS上将数据打入寄存器器W中,按照这个要求,从EM中读数据,EMRD应该有效,EM的地址由PC输出,PCOE必需有效,读出的数据送到DBUS,EMEN也应有效,要求将数据存入W中,WEN也要有效,因此这条微指令的值为C7FFEFH。在T2状态时,从R?中读取数据并将独处的数据送到DBUS,则RRD应有效,由.DAT文件中的相应指令的入口地址的最低两位选定R?寄存器(00选定R0,01选定R1,10选定R2,11选定R3)。再将DBUS上的数据打入累加器A,则AEN应有效。因此这条微指令的值为FFF7F7H。在T1状态时,执行带进位的加法操作,并将结果存入R?中。执行带进位的加法操作,S2S1S0的值应为100(二进制),结果无需移位直接输出到DBUS,X2X1X0的值就要为100(二进制),从DBUS将数据再存入R?中,RWR应有效。FEN有效,完成的操作是将标志位存入标志寄存器F(ALU内部)根据上面描述,T1状态时将X2X1X0、RWR、S2S1S0、FEN都置成有效和相应的工作方式,此微指令的值为FFFA9CH。在T0状态,取出下条将要执行的指令,取指微指令的值为CBFFFFH。4.创建新指令集文件名为:new.mac,供指令集窗口显示(可略)。打开CP226组成原理实验软件,选择[文件|打开指令系统/微程序],调入一个已有的指令集文件insfile1.mac,参考原来文件格式,输入如下文件后,清除原来的指令系统,选择[文件]\另存为new.mac._FATCH_000000xx00-031实验机占用不可修改复位后所有寄存器清0首先执行_FATCH_指令取指MOVR?,#II000001xx04-07II2STOR?,MM000010xx08-0BMM2ADDCR?,#II000011xx0C-0FII25.在源程序窗口输入下面测试程序MOVR0,#12HMOVR1,#01HSTOR0,10HADDCR0,#03H将程序另存为NEW.ASM,选择[文件|调入指令系统/微程序],调入new.mic,将程序汇编成机器码,观察反汇编窗口,会显示出程序地址、机器码、反汇编指令。按快捷图标的F7,执行“单微指令运行”功能,观察执行每条微指令时,数据是否按照设计要求流动,寄存器的输入/输出状态是否符合设计要求,各控制信号的状态,PC及uPC如何工作是否正确。四、实验总结这次实验让自己动脑亲手设计了计算机的指令系统,有相当大的收获。从起初的似懂非懂,到后来一步一步地把每一条原有指令的相关数值弄明白,直至最后自己将指令一条条亲自设计出来,并得以实现,这是一个相当漫长的学习过程。1.我想决定这次实验成败与否的关键在于是否细心,因为每一条微指令在实现其功能时,相应微指令值的每一位都不能有丝毫的差错。同时对每条指令要明确它要分为那几个CPU周期来完成,每一个周期的数据流向是怎样的,都是很重要的。2.还有对R0-R3的指定,开始一直不明白是怎么怎么指定的,后来才知道是在.DAT文件由对应于指令的指令码的最低两位来选定R0-R3,即硬件系统需要指令机器码的最低两位做为R0-R3寄存器寻址用,同时指令机器码要忽略掉这两位。总之,这次实验让自己对指令系统及计算机内部实现原理有了更深入的理解和掌握,虽然设计的两条指令实现的功能相对而言比较简单,但这个过程中自己有太深的体会,而这却是不可多得的。
本文标题:指令、微指令设计
链接地址:https://www.777doc.com/doc-5456756 .html