计算机组成原理课程设计(2013江苏大学版本:含day1~day7微程序文件)

更新时间:2023-11-02 06:21:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

计算机组成原理课程设计报告

专业名称:软件工程 班级学号: 3100608024 学生姓名: 张建彬 指导教师: 丁 伟

设计时间:2013年7月4日—2013年7月12日

附:

day1~day7微程序下载地址:

http://pan.http://www.wodefanwen.com//share/link?shareid=743960927&uk=353520509

第一天:熟悉微程序的设计和调试方法

一、设计目标

1、掌握微程序的设计方法

2、熟悉利用调试软件运行、调试微程序的方法 二、操作提示 1、准备工作 (1)将试验仪的通信电缆和下载电缆分别连接电脑的RS-232串行接口和打印机接口。接通

试验仪电源。

(2)从课程资源网站下载CPU.bit、CPU.cfg、day1.m19。 2、下载FPGA配置数据

利用iMPACT软件将CPU.bit下载到FPGA。

3.输入微程序

利用调试软件UniDebugger将微程序写入控存。 (1) 设置实验方式和观察信号。

(2) 下载微程序文件day1.m19.该文件包含取指令微程序部分取操作数微程

序和MOV指令执行阶段微程序

微程序如下:

①.取指令微程序 微地址(H) 001 002 003 微指令(H) F0 F1 20080006 1 00069003 CC000404 0 6 0 0 3 0 0 0 微指令字段(H) F2 F3 F4 F5 F6 0 0 0 2 1 0 0 2 0 0 1 0 F7 F8 0 1 0 0 0 2 F9 002 PCoe,ARce 003 ARoe’,RD,DRce’,PCinc 004 DRoe,IRce 微命令

②.取源操作数为立即数的微程序 微地址(H) 004 00B 00F 016 微指令(H) F0 00000A08 0 0008000F 00069C10 D0000006 1 0 6 0 0 0 4 0 0 0 0 微指令字段(H) F1 F2 F3 F4 F5 F6 0 0 0 0 0 2 1 0 0 0 2 0 0 0 1 0 F7 F8 F9 0 0 1 0 5 0 6 0 008 NOP 00F PCoe,ARce 010 ARoe’,RD,DRce’,PCinc 006 DRoe,TRce 微命令

③.取目的操作数为寄存器寻址的微程序 微地址(H) 006 018 微指令(H) F0 20080006 0 00069003 2 F1 0 5 F2 0 0 微指令字段(H) F3 0 0 F4 F5 F6 0 5 0 0 0 0 F7 F8 0 0 5 0 F9 018 NOP 007 GRSoe,Ace 微命令

④.MOV指令的微程序

微地址(H) 007 044 046 微指令(H) F0 00000800 0 00000E46 88000000 0 4 F1 0 0 4 F2 0 0 0 0 0 0 微指令字段(H) F3 F4 0 0 0 F5 F6 0 0 0 0 0 0 F7 F8 0 0 0 4 7 0 F9 xxx PCoe,ARce 046 ARoe’,RD,DRce’,PCinc 000 DRoe,IRce 微命令

4、输入调机程序

今天的将调机程序就是一条指令:“ MOV #1234H, R1”。首先将指令翻译成机器码,根 据指令的编码规则,该指令的编码是:0761 1234。然后利用调试软件将指令码写入主存, 地址从主存的0000H开始。

5、调试微程序。

点击调试软件工具条上的“单步”或“扩展”按钮多次,运行的结果显示如下图所示。图中第一行数据是“单步”运行的结果,后续各行是“扩展单步”的运行结果。可以看出,“扩展单步”比“单步”可以观察到更多的信号。

本例MOV指令的单步运行跟踪数据

6、分析微程序的执行结果,一般方法如下:

首先分析微程序执行流程是否正确,根据前面指令微流程的设计,理论上该指令微程序 的执行顺序应该是001→002→003→004→00B→00F→016→006→018→007→044→046→000,通过调试软件的执行结果图可以看出,该指令微程序的微指令次序是正确的。 如果执行的微指令次序不正确,那就要分析原因,检查BM和NC设置是否正确、检查uAR

的各个输入信号的值是否正确,如IR、NA等。

然后分析指令的运行结果。理论上本条测试指令执行完后,GRS的值应该是1234。通过 调试软件的执行如上结果图可以看出,指令执行结果是正确的。如果结果不对,就需要进一 步分析每一条微指令。分析的方法是针对微指令的每一条微命令,查看相应微操作前后相关 模块的数据变化是否与指令微流程一致。下面举个例子说明如何分析每条微指令的。图中的微地址为00B(uAR=00B)的控存单元所对应的内容为2008000F,即微指令为2008000F,所代表的微操作是:PCoe,ARce,即PC的内容送IB、IB的内容送AR,理论上的正确结果应该是IB=0001, AR=0001;通过图中的00B单元微指令的执行结果可以看出,IB 的数据由上一条微指令的结果FFFF→0001, AR 的数据由上一条微指令的结果0000→0001,说明本条微指令执行结果是正确。

从上面的分析可以看出,要想检查运行结果是否正确,关键是要清楚理论上正确的结果 是什么。这就要求实验者对指令的微程序流程非常清楚,从而达到了理解计算机内部信息流 动过程、掌握计算机工作原理的目的。所以实验者应重视实验数据的分析工作,否则就失去 了实验的意义。

第二天: 取操作数微程序的设计与调试

一、设计目标

设计并调试取操作数的微程序 二、取操作数微流程

取源操作数微流程:

取目的作数微流程:

三、测试程序、数据及运行结果

格式如下:

1、测试内容:立即数寻址、直接寻址 测试指令(或程序):MOV #5678H,0010H

指令功能:将立即数5678H送到内存地址为0010单元,机器码如下

机器码: 内存地址(H) 0000 机器码(H) 汇编指令 077A 5678 0010 MOV #5678H , 0010H 在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。扩展单步执行的结果如图1.2,分析过程如下:

对照图1.2,首先看微指令的执行次序:001—>002—>003—>004—>00B—>00F—>016—>006—>01B—>01F—>024—>025—>026—>007—>004—>047—>072—>000,参照取指令,取操作数和MOV执行微流程分析,所执行的微指令顺序是正确的

其次分析执行的过程,在003的微指令执行后,下一步IR=077A,说明取指令是正确的;在016的微指令执行后,下一步TR=5678,说明取原操作数是正确的;在在026的微指令执行后,下一步A=FFFF(此时0010单元的内容为FFFF,见图1.2),说明取目的操作数是正确的。

最后分析指令执行的结果,指令执行前0010单元的内容为FFFF(见图1.1)指令执行后内容变为5678(在指令的最后一条微指令,微地址为072的下一步,见图1.5),说明结果是正确的。

图1.1指令执行前的RAM的内容

图1.2运行结果及分析:

图1.3指令执行后RAM的内容

2、测试内容:相对寻址、间接寻址 测试指令(或程序):MOV +0004H,(0010H)

指令功能:将有效地址(PC+0004H)的内容送到0010H地址的地址中去

机器码: 内存地址(H) 0000 机器码(H) 0719 0004 0010 汇编指令 MOV +0004, (0010H) 在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。扩展单步执行的结果如图2.2,分析过程如下:

对照图2.2,首先看微指令的执行次序:001—>002—>003—>004—>00B—>00F—>010—>011—>017—>015—>016—>006—>01B—>01F—>022—>023—>024—>025—>026—>007—>044—>047—>072—>000,参照取指令,取操作数和MOV执行微流程分析,所执行的微指令顺序是正确的

其次分析执行的过程,在003的微指令执行后,下一步IR=0719,说明取指令是正

确的;在016的微指令执行后,下一步TR=0000,说明取原操作数是正确的;在在026的微指令执行后,下一步A=0004(此时0010单元的内容为FFFF,见图2.2),说明取目的操作数是正确的。

最后分析指令执行的结果,指令执行前0010单元的内容为FFFF,以FFFF为地址FFFF内容原为0004,最终指令执行后内容变为0000(在指令的最后一条微指令,微地址为072的下一步,见图2.2),说明结果是正确的。

图2.1

图2.2

3、测试内容:寄存器寻址、寄存器间接寻址 测试指令(或程序):MOV R1,(R2) 机器码: 内存地址(H) 0000 机器码(H) 汇编指令 042A MOV R1,(R2) 在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。扩展单步

执行的结果如图3.2,分析过程如下:

对照图3.2,首先看微指令的执行次序:001—>002—>003—>004—>008—>006—>019—>025—>026—>007—>044—>047—>072—>000,参照取指令,取操作数和MOV执行微流程分析,所执行的微指令顺序是正确的

其次分析执行的过程,在003的微指令执行后,下一步IR=042A,说明取指令是正确的;在008的微指令执行后,下一步TR=0000,说明取原操作数是正确的;在在026的微指令执行后,A=0000说明取目的操作数是正确的。

最后分析指令执行的结果,指令执行前R1单元的内容为0000(见图3.2),指令执行后以R2内容0000为地址,即将0000转移到0000地址(在指令的最后一条微指令,微地址为072的下一步,见图3.2)说明结果是正确的

4、测试内容:寄存器寻址、寄存器变址寻址 测试指令(或程序):MOV R1,2(R2)

机器码:

内存地址(H) 0000 机器码(H) 汇编指令 0432 0002 MOV R1,2(R2) 在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。扩展单步

执行的结果如图2.2,分析过程如下:

对照图,首先看微指令的执行次序:001—>002—>003—>004—>008—>006—>01A—>01C—>01D—>01E—>027—>025—>026—>007—>044—>047—>072—>000,参照取指令,取操作数和MOV执行微流程分析,所执行的微指令顺序是正确的

其次分析执行的过程,在003的微指令执行后,下一步IR=0719,说明取指令是正确的;在008的微指令执行后,下一步TR=0000,说明取原操作数是正确的;在在026的微指令执行后,下一步A=0002,说明取目的操作数是正确的。

最后分析指令执行的结果,指令执行前R1单元的内容为0000(见图1.2),将其转移到0002+R2,开始0002+R2内容为0002指令执行后内容变为0000(在指令的最后一条微指令,微地址为072的下一步,见图1.5),说明结果是正确的。

四、设计中遇到的问题及解决办法

才开始的时候,对软件的应用不是很熟悉,遇到一些麻烦,起初对各个寻址方式的寻址过程不理解,不能看懂调试微流程的各步骤,经过请教同学和查看课本,有了进一步的了解,解决了软件应用问题。

第三天 :双操作数指令的微程序设计与调试

一、设计目标

设计并调试运算指令的微流程 二、运算指令微程序入口地址

三、运算类指令微程序 微地址(H) 007 048 054 050 068 06F 070 071 072 微指令(H) 0000 0800 9870 006F 9930 006F 98F0 006F 9940 0000 0000 0E70 6800 0000 6003 0072 0005 2400 微命令 NOP TRoe, ADD, SV, PSWce TRoe, SUBB, SV, PSWce TRoe, SUB, SV, PSWce TRoe, AND,PSWce NOP Soe,GRSce Soe,Drce Droe’,Aroe’,WR BM 4 0 0 0 0 7 0 0 0 NA xxx 06F 06F 06F 000 070 000 072 000 注释 指令执行入口 ADD SUBB SUB TEST 回送结果入口 结果送入寄存器 结果送入DR 结果送入主存

(具体图如下,参照指导书图2-6的形式)

四、测试程序、数据及运行结果

1、

测试内容:ADDC 0010H, (R2) 机器码:

内存地址(H) 0000 机器码(H) 汇编指令 0F4A 0010 ADDC 0010H,(R2) 在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。扩展单步执

行的结果如图,分析过程如下:

对照图1.4,首先看微指令的执行次序:001—>002—>003—>004—>00B—>00F—>014—>015—>016—>006—>019—>025—>026—>007—>04C—>06F—>071—>072—>000,参照取指令,取操作数和ADDC执行微流程分析,所执行的微指令顺序是正确的

其次分析执行的过程,在003的微指令执行后,下一步IR=0F4A,说明取指令是正确的;在016的微指令执行后,下一步TR=FFFC,说明取原操作数是正确的;在在026的微指令执行后,下一步A=0F4A,说明取目的操作数是正确的。

最后分析指令执行的结果:即FFFC+0F4A结果,由072下一条指令可以看出其结果为0F47,说明结果是正确的。

运行结果:

2、

测试内容:CMP #0010, +0001H

机器码: 内存地址(H) 0000 机器码(H) 汇编指令 1B78 0010 0001 CMP #0010,+0001H 在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。扩展单步执

行的结果如图,分析过程如下:

对照图,首先看微指令的执行次序:001—>002—>003—>004—>00B—>00F—>016—>006—>01B—>01F—>020—>021—>027—>025—>026—>007—>058—>000,参照取指令,取操作数和ADDC执行微流程分析,所执行的微指令顺序是正确的

其次分析执行的过程,在003的微指令执行后,下一步IR=0F4A,说明取指令是正确的;在016的微指令执行后,下一步TR=FFFC,说明取原操作数是正确的;在在026的微指令执行后,下一步A=0F4A,说明取目的操作数是正确的。

最后分析指令执行的结果:CMP指令不保存结果,只有PSW记录,SZOC结果为1

运行结果

3、

测试内容:.AND R1,0010H 机器码:

内存地址(H) 0000 机器码(H) 汇编指令 1C3A 0010 AND R1,0010H 在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。扩展单步执

行的结果如图,分析过程如下:

对照图,首先看微指令的执行次序:001—>002—>003—>004—>008—>006—>01B—>01F—>024—>025—>026—>007—>05C—>06F—>071—>072—>000,参照取指令,取操作数和AND执行微流程分析,所执行的微指令顺序是正确的

其次分析执行的过程,在003的微指令执行后,下一步IR=0F4A,说明取指令是正确的;在008的微指令执行后,下一步TR=0000,说明取原操作数是正确的;在在026的微指令执行后,下一步A=FFFC,说明取目的操作数是正确的。

最后分析指令执行的结果:即0000 AND FFFC结果,由072下一条指令可以看出其结果为FFFB,说明结果是正确的。 运行结果:

五、设计中遇到的问题及解决办法

调试双操作数指令执行微程序,先要写出双操作数指令执行微程序的微地址,微命令,然后写微程序,最后上机调试,判断是否正确,检查微程序运行结果是否正确是一项稍繁琐的事情,需要检查每步的寄存器、标志位、总线上的地址和数据。但经过几天的熟悉,我们已慢慢熟悉掌握。

第四天:单操作数运算和移位指令的微程序设计与调试

一、设计目标

完成单操作数运算指令INC、DEC、NOT和7条移位指令微程序的设计。

二、单操作数运算和移位指令微程序入口地址 指令助记符 入口地址(H) 0A4 0A8 0AC 指令助记符 入口地址(H) 092 094 096 098 09A 09C 09E INC DEC NOT SAR SHL SHR ROL ROR RCL RCR

三、单操作数和移位指令微程序设计

微地址(H) 007 092 094 096 098 09A 09C 09E 0A4 0A8 0AC 06F 070 071 072 微指令(H) 0000 08A4 1810 006F 1820 006F 1810 006F 1820 006F 1810 006F 1820 006F 1810 006F 1A70 006F 1AB0 006F 19F0 006F 0000 0E70 6800 0000 6003 0072 0005 2400 微命令 NOP SR,PSWce SR,PSWce SR,PSWce SL,PSWce SL,PSWce SL,PSWce SL,PSWce INC,SV,PSWce DEC,SV,PSWce NOT,SV,PSWce NOP Soe,GRSce Soe,Drce Droe’,Aroe’,WR BM 4 7 0 0 0 NA 0A4 070 000 072 000 注释 指令执行入口 SAR SHL SHR ROL ROR RCL RCR INC DEC NOT 存结果 结果送入寄存器 结果送入DR 结果送入主存 四、测试程序、数据及运行结果

1. 单操作数运算

测试内容:DEC 0010H 机器码: 内存地址(H) 0000 机器码(H) 汇编指令 025A 0010 ADDC 0010H,(R2) 在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。扩展单步执行的结果如图,分析过程如下:

对照图,首先看微指令的执行次序:001—>002—>003—>006—>01B—>01F—>024—>025—>026—>007—>0AB—>06F—>071—>072—>000,参照取指令,取操作数和DEC执行微流程分析,所执行的微指令顺序是正确的

其次分析执行的过程,DEC为单操作数指令,在003的微指令执行后,下一步执行取目的操作数,在026的微指令执行后,下一步A=FFFD,说明取目的操作数是正确的。

最后分析指令执行的结果:即FFFD-1结果,由072下一条指令可以看出其结果为FFFC,说明结果是正确的。

运行结果

2. 测试内容:

CALL 0014H (add#1234,0010h) 035A0014 (0B7A 1234 0010) RET 0002

运行结果及分析:

在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。扩展单步执行的结果如图,分析过程如下:

对照图,首先看微指令的执行次序:001—>002—>003—>006—>01B—>01F—>024—>025—>026—>007—>DC0—>0D1—>0D2—>0D3—>0D4—>001—>002—>003—>004—>00B—>00F—>016—>006—>01B—>01F—>024—>025—>026—>007—>048—>06F—>071—>072—>000—>001—>002—>003—>007—>03C—>03D—>03E—>03F—>000

参照取指令,取操作数和CALL,ADD,RET执行微流程,所执行的微指令顺序是正确的,其次分析执行的过程,此操作共执行了三条指令。第一条指令在003的微指令执行后,下一步IR=035A,说明取指令是正确的,执行取目的操作数,在026的微指令执行后,下一步A=0B7A,(此时PC值为02)即开始执行加法指令,即将立即数1234与0010地址内容0012相加(此时PC=17),最后执行RET指令,即PC调回02

四、设计中遇到的问题及解决办法

写微指令时遇到许多问题,刚开始没弄明白各条指令的意思,然后经过同学的讲解,弄懂了各个指令的意思,通过参考书籍,成功的写出了各个指令的微程序。

第六天检查指令

一、设计目标

用综合应用程序测试JU-C1十六位微程序控制计算机。

二、测试程序、数据及运行结果

总结:

这次关于JU-C1十六位微程序控制计算机微程序的课程设计,我受益匪浅,通过实验将实际问题和课本内容紧密的联系在一起,将知识运用到了实际之中,更加深入地掌握了微程序设计。实验过程中按照老师的计划,每天完成一定的量,使我们能够更加清晰的了解计算机内部组成以及数据通路,并且对实例化的语句有所了解,通过自己编写的程序能够实现运算、转移、移位等功能,让我进一步加深了对微程序各种功能的理解。实验中我们

利用调试软件 UniDebugger运行自己设计的程序,对自己的程序产生的错误进行改正,这使我们对调试软件 UniDebugger的工作方式及程序的设计有了进一步的掌握。

在每天的设计过程中我也遇到了很多问题,但是以前在学习

中没有发现的。为此,我在通过仔细的研究课本及向老师和同学提问,拓宽了自己的知识面。同时也深感实践对于我们这门学科的重要性。同时,在经过老师的检查后发现自己在前面的实验中有些疏忽的问题,为此,在最后的两天时间里,对其进行了相应的修改,最后得以完美的测试结果。另一方面,通过本次课程设计能够联系之前的学习

内容,发现自己在理解的基础上,实践能力得到了很大的提升。同时,也意识到自己存在的不足,在今后的学习中,一定要认真对待,学会多和同学交流,解决自身的知识盲点,让自己的学习能力得到强化。

2. 移位运算

测试内容:SAR (0010H) //0010->0014->2513 运行数据:0039 0010 运行结果及分析:

在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。扩展单步执行的结果如图,分析过程如下:

对照图,首先看微指令的执行次序:001—>002—>003—>006—>01B—>01F—>020—>021—>027—>025—>026—>007—>09E—>06F—>071—>072—>000,参照取指令,取操作数和SAR执行微流程,所执行的微指令顺序是正确的 其次分析执行的过程,SAR为单操作数指令,在003的微指令执行后,下一步IR=0039,说明取指令是正确的,执行取目的操作数,在026的微指令执行后,下一步A=2513,即以0010的内容0014H为地址,其中0014的内容为2513,说明取目的操作数是正确的。算术右移后变为1289,由运行结果证明是正确的

3. 测试内容:SHR 0010H //0010->2513

运行数据:007A 0010 运行结果及分析:

在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。扩展单步执行的结果如图,分析过程如下:

对照图,首先看微指令的执行次序:001—>002—>003—>006—>01B—>01F—>024—>025—>026—>007—>096—>06F—>071—>072—>000,参照取指令,取操作数和SHL执行微流程,所执行的微指令顺序是正确的

其次分析执行的过程,SHR为单操作数指令,在003的微指令执行后,下一步IR=007A,说明取指令是正确的,执行取目的操作数,在026的微指令执行后,下一步A=2513,即0010的内容为2513,说明取目的操作数是正确的。逻辑右移后变为1289,由运行结果证明是正确的

4. 测试内容:RCL +0010H //0010->0012->2513

运行数据:00D8 0010 运行结果及分析:

在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。扩展单步执行的结果如图,分析过程如下:

对照图,首先看微指令的执行次序:001—>002—>003—>006—>01B—>01F—>024—>025—>026—>007—>09C—>06F—>071—>072—>000,参照取指令,取操作数和SHL执行微流程,所执行的微指令顺序是正确的

其次分析执行的过程,RCL为单操作数指令,在003的微指令执行后,下一步IR=00D8,说明取指令是正确的,执行取目的操作数,在026的微指令执行后,下一步A=2513,即以PC+0010即0012的内容,为2513,说明取目的操作数是正确的。循环右移后变为4A26,由运行结果证明是正确的

四、设计中遇到的问题及解决办法

这节预习时对器件的实例化不太清楚,例如在SHIFTER中对MUX的实例化,实例化的两个MUX,一个是用来产生最低有效位,一个用来产生最高有效位。产生低位的输入端口分别是0,0,d[15],CF,输出为lsb;产生高位的输入端口为d[15],0,d[0],CF,输出为hsb。 根据地址IR76,判断输入。

在最低有效位lsb产生逻辑中,当IR76=00时将0送给lsb,即算术左移,当IR76=01时将0送给lsb,即逻辑左移,当IR76=10时将d[15]送给lsb,即循环左移,当IR76=11时将CF送给lsb,即带进位的循环左移

在最高有效位hsb产生逻辑中,当IR76=00时将d[15]送给hsb,即算术右移,当IR76=01时将0送给hsb,即逻辑右移,当IR76=10时将d[0]送给hsb,即循环右移,当IR76=11时将CF送给hsb,即带进位的循环右移

第五天:子程序调用、堆栈和转移指令微程序设计与调试

一、设计目标 完成CALL、RET、PUSH、POP和9条转移指令的微程序的设计。 二、PUSH、POP、CALL、RET指令微程序的设计 PUSH 微地址(H) 0C0 0C1 0C2 0C3 微指令(H) F0 F1 5 0 7 0 F2 0 A 0 0 F3 0 3 0 0 F4 0 0 2 1 F5 0 0 0 1 F6 0 0 0 0 F7 0 0 0 0 F8 0 0 0 0 F9 0C1 0C2 0C3 000 微指令字段(H) 微命令 F40000C1 7 02B000C2 0 7C0800C3 3 00052000 0 SPoe,Ace DEC,SV Soe,SPce,ARce ARoe’,DRoe’,WR POP 微地址(H) 0C8 0C9 0CA 0CB 0CC 微指令(H) F0 F1 4 5 0 0 7 F2 0 A 9 0 0 F3 0 0 0 0 0 微指令字段(H) F4 0 2 1 2 1 F5 0 0 2 0 1 F6 0 0 0 0 0 F7 0 0 1 0 2 F8 0 0 0 0 0 F9 0C9 0CA 0CB 0CC 000 微命令 B00000C9 5 F40800CA 7 027610CB 0 800800CC 4 7C052000 3 ARoe,TRce SPoe,Ace,ARce ARoe’,RD,DRce’,INC,SV TRoe,ARce Soe,SPce,ARoe’DRoe’,WR CALL 微地址(H) 0D0 0D1 0D2 0D3 0D4 微指令(H) F0 F1 5 4 7 0 1 F2 0 A 0 0 0 F3 0 3 0 0 0 F4 0 0 2 0 1 F5 0 0 0 3 1 F6 0 0 0 0 0 F7 0 0 0 0 2 F8 0 0 0 0 0 F9 0D1 0D2 0D3 0D4 000 微指令字段(H) 微命令 F40000D1 7 B2B000D2 5 7C0800D3 3 200300D4 1 84052000 4 SPoe,Ace DEC,SV,ARoe,TRce Soe,ARce,SPce PCoe,DRce ARoe’,DRoe’,WR,TRoe,PCce RET 微地址(H) 03C 03D 03E 03F 微指令(H) F0 F1 5 0 1 7 F2 0 9 0 0 F3 0 3 0 0 F4 2 1 0 0 F5 0 2 0 0 F6 0 0 0 0 F7 0 1 0 0 F8 0 0 0 0 F9 03D 03E 03F 000 微指令字段(H) 微命令 F408003D 7 0276103E 0 C400003F 6 7C000000 3 SPoe,Ace,ARce INC,SV,ARoe’,RD, DRce’ DRoe,PCce Soe,SPce

三、测试程序、数据及运行结果

1. 测试内容:

PUSH (0010H) 0319 0010 //0010->0012->8023 PUSH 0014H 031A 0014 //0014->2513 POP 0016 033A 0016

运行结果及分析:

在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。扩展单步执行的结果如图,分析过程如下:

对照图,首先看微指令的执行次序:001—>002—>003—>006—>01B—>01F—>022—>023—>024—>025—>026—>007—>0C0—>0C1—>0C2—>0C3—>000—>001—>002—>003—>006—>01B—>01F—>024—>025—>026—>007—>0C0—>0C1—>0C2—>0C3—>000—>001—>002—>003—>006—>01B—>01F—>024—>025—>026—>007—>0C8—>0C9—>0CA—>0CB—>0CC—>000

参照取指令,取操作数和PUSH,POP执行微流程,所执行的微指令顺序是正确的

其次分析执行的过程,此操作共执行了三条指令,两条PUSH指令,一条POP指令,都为单操作数指令。第一条指令在003的微指令执行后,下一步IR=0319,说明取指令是正确的,执行取目的操作数,在026的微指令执行后,下一步A=8023,即以0010的内容0012为地址,取到0012的内容为8023,说明取目的操作数是正确的。将2513压入栈中,初始时SP为03F,将2513压入03E中,SPJ减1第二条指令与第一条类似。第三条指令在003的微指令执行后,下一步IR=033A,说明取指令是正确的,执行取目的操作数,在026的微指令执行后,下一步A=003E,说明取目的操作数是正确的。将003E的内容出栈置入0016中去,SP增1。

本文来源:https://www.bwwdw.com/article/0nt2.html

Top