非常简单CPU与相对简单的CPU模拟器实验实验目的:本次实验主要是在非常简单和相对简答的CPU模拟器上观察程序的运行,更加形象直观的了解CPU中程序运行的各个步骤以及各个寄存器和逻辑单元在各个步骤时发挥的作用。加深对CPU的分析和理解。实验方法:在JavaRuntimeEviroment软件平台下通过运行CPU模拟器,输入指令程序,然后运行,直接观察CPU的寄存器部分和状态图部分的运行,记录并进行分析,理解。实验准备:在启动模拟器之前必须先行安装JavaRuntimeEviroment软件,准备好VSCPU.zip、RSCPU.zip两个文件,并建目录“c:\实验”,将VSCPU.zip、RSCPU.zip放置其中。实验步骤与CPU的截图分析:一、非常简单的CPU模拟器:在做好前面的准备工作后,即可以开始非常简答的CPU模拟器模拟:1、先将目录c:\实验下的VSCPU.zip解压至D:\vscpu2、打开D:\vscpu\VSCPU中的index.html页面以运行“非常简单CPU模拟器”。如下图所示的页面:3、观看该模拟器使用方法的动画:(如果了解操作步骤此步也可以省略)D:\vscpu\VSCPU\VerySimple-FLASH\VerSimpleCPUSCREEN.html。4、输入教材P168页程序,在模拟器中观察程序的运行。如下图所示:分析:在输入程序的时候,应注意像27H,39H这些数据前面要加上DB,并且要有空格,然后才能运行程序。上面的六行指令是书上的指令,下面就是要运行一下,动态观察CPU的运行过程。运行CPU模拟器的步骤如下:首先在输完代码之后要先进行编译,点击Assemble按钮你,编译成功,后分别点击1、ViewRegisterSection按钮,即是CPU寄存器部分的运行图2、ViewMemory按钮,即是内存部分的运行图3、ViewControlUnit按钮,即是控制单元的运行图,分别从这三个图观察CPU的运行过程。截图与分析如下所示:(由于每条指令执行过程中的过程比较详细而且复杂,故此处不肯能把全部过程加以分析,只详细分析了第一条指令ADD4运行的具体过程,其他运行过程未写出或者只写了一部分)第一个状态FETCH1初始态:分析:有效信号PCBUS,和ARLOAD表示AR寄存器开始工作,PCBUS通路,此步执行操作把PC中的值复制到AC,即是把0赋给AC,如下所示:分析:冒号前面的数字表示地址,即是内存单元的地址,上图中一行有四个内存单元。每个内存单元中又存有一组数据(既可以表示后面的地址,又可以表示数据)00000100:这一串数的意思是表示:开始执行ADD4这条指令,其中前两位表示指令类型,表示进行什么操作,其中00代表ADD,01代表AND,10代表JMP,11代表INC;后六位表示地址,表示从该地址中取数据进行相应的操作。00000100:就代表指令ADD4,表示把地址4代表的内存单元里的数据(即是27H)与AC寄存器里的数据相加并保存在AC累加器中。01000101:代表指令AND5,表示把地址5代表的内存单元里的数据(即是39H)与AC累加器中的数据按位相与,结果保存在AC累加器中。11000000:表示指令INC,自加一指令,表示将AC中的数据自加一并保存在AC中。10000000:表示JMP0,跳转指令,即是程序运行到此时自动跳转到初始地址0H,然后指令又从0地址的ADD开始运行。00100111表示27H,表示地址4内存单元中存储的数据为2700111001表示39H,表示地址5内存单元中存储的数据是39控制单元:分析:此时状态为FETCH1,故FETCH1为红的(打印可能看不出来,上面的红色信号打印估计也看不出来,这里先说明)第二个状态FETCH2的运行过程如下:分析;FETCH2时,有效信号为READ,MEMBUS,DRLOAD,PCINC(图中红色信号),执行操作由上图可看出在AR被赋值0之后,进入fetch2操作,read信号有效,M从AR(地址寄存器)中读取地址0,然后把地址0所代表内存单元中的数据00000100(04H)输入到总线上,最后传到数据寄存器DR中,同时完成PC自加1操作,记下下一条将被执行指令的地址(1地址代表的内存单元中的数据为01000101,即是下一条指令)即是DR—04H,PC—1。(DR—M,PC—PC+1)。结果如下图所示:内存运行图与上步一样不在截图控制单元运行图如下:FETCH2指令为红色,执行FETCH2操作第三个状态FETCH3的运行状态如下:控制单元:分析:FETCH2自加1,进入FETCH3状态寄存器部分的运行结果与分析如下:分析:FETCH3状态时,由上图可知有效信号为DRBUS,ARLOAD,IRLOAD。所执行操作分别是:IR—DR[7..6],AR—[5..0],即是DR寄存器中的数据高两位存入IR(指令寄存器)寄存器中,用来选择运算类型,低六位装载到AR寄存器中,用来向存储器提供地址,在这步操作中,DR中的数据00000100从DR出来到总线上,然后再分别装载到IR和AR中,其中00存到IR寄存器中选取运算类型(00代表ADD,下面会有显示),000100保存到AR中作为访问存储器的地址,运行结果如下图:分析:从IR处数据分开分析:AR寄存器的值变为000100第四个状态ADD1的运行情况如下:控制单元:分析:上图中FETCH3为红色,计数器counter开始计数,IR装载到计数器中而后用于选择运算类型。寄存器部分分析如下:分析:ADD1状态的有效信号为READ,MEMBUS,DRLOAD,所执行的操作为DR—M,即是将M中的数据存到DR寄存器中。此状态的具体过程是:上一步中AR存入数据000100,即是访存的地址(04H),访问地址为4的内存单元,然后4内存单元中的数据传到总线上再保存到DR中用作ADD操作的其中一个操作数,即是:将4内存单元中的数据27H保存到数据寄存器DR中,结果如下图,DR中的数据由00000100变为00100111:第五个ADD2的运行情况如下:控制单元中ADD2变为红色,有效,此处不再截图寄存器部分的运行情况如下:由下图可知,在ADD2状态中的有效信号为DRBUS,ACLOAD,所执行操作就是把DR寄存器中的数据与AC累加器中的数据相加然后结果保存在AC累加器中,即是:AC—AC+DR。具体过程是数据00100111(27H)从DR中出来作为加法其中的一个操作数,然后AC中的数据0从AC中出来,作为加法的另一个操作数,二者在算术运算单元ALU中进行加法运算,然后相加的结果00100111(27H)保存在AC累加器中,AC累加器的值变为00100111。AC—0+27H=27H二者在ALU相遇并相加:ALU中的具体功能:分析:由上图可知,从DR和AC中出来的数据在ALU中运算。ALU、是算术或逻辑运算单元,故此指令中二者选择并行加法器进行相加云端结果保存在AC中。分析:由上图可知AC的值变为00100111(27H),完成了ADD4指令。非常简单CPU模拟器运行实验心得与总结:以上就是ADD4指令的全部运行过程,在程序运行和分析中逐渐对CPU的运行有了了解,不像书上给出的那样有些抽象,这种模拟器的方法则更加形象具体,对理解CPU的运行与设计有不小的帮助。虽然在开始分析时有部分不懂,但是在看了几遍运行情况之后有了些理解,故都写在了上述的分析中,可能这次实验报告有些多(大部分是截图)但这些分析我认为有必要记录下来。在完成ADD4这条指令后,程序又会跳转到FETCH1,此时PC值为1,运行下一条指令,以此类推,以后的每条指令运行情况都与此类似,另外,关于其他指令的运行情况也了解了,与上述的情况大致相同,只是所取数据和操作类型不同,在此不再赘述。二、相对简单的CPU模拟器:相对简单的CPU模拟器的实验与非常简答的cpu模拟器实验非常类似,实验步骤和上面的一样,在此不再赘述。相对简单CPU模拟器如下图所示:输入代码并编译运行,代码如下:运行结果寄存器部分:分析:比非常简单的CPU更加复杂。内存部分:分析:内存单元还不只如此,比非常简单的CPU内存单元更加多。控制单元部分:分析:控制单元也相对比较复杂,IR变成4位,指令更多。相对简单的CPU模拟器总结分析:由于相对简单的CPU比非常简单CPU复杂的多,而且运行过程比较多,故在此不再分析相对简单的CPU的运行过程。而且大致上每条指令的运算过程都与上面的那条指令相似,不多有些更加复杂罢了。自己通过在课后自己看运行结果,过程比较多,与非常简答的CPU相比,多了LDAC、JMPZ等一系列指令,以及相应的实现这些指令的寄存器,设计更加复杂。不过相对简单的CPU的功能更加丰富。实验心得:通过这次实验,对CPU有了更加深刻的了解,虽然在课堂上有些部分没有听懂,但再看了几遍运行有情况之后有所领悟。虽然此次实验的过程和操作比较简单,但是目的是在理解,明白非常简单和相对简答的CPU的运行过程,这方是此次实验的重点。