




已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机组成原理课程设计报告专业名称: 计算机科学与技术班级学号: 计算机0802学生姓名: 指导教师:设计时间: 2010年 06 月 28 日2010年 07 月 01 日2010年 07 月第一天 取操作数微程序的设计和调试一、设计目标 设计并调试取操作数的微程序二、取操作数微流程三、测试程序、数据及运行结果格式如下:1、测试内容:立即数寻址、直接寻址、间接寻址、相对寻址、寄存器寻址立即寻址测试指令(或程序):mov #1234h,r1 机器码: 内存地址(h)机器码(h)汇编指令00000761 1234mov #1234h,r1运行结果及分析:为了分析微程序是否正确,首先通过查看微指令流程判断bm和nc是设置是否正确,如果执行的微指令依次是:00100200300400b00f016006018007。(后面的mov指令的exe微指令是由老师提供的),根据前面指令微流程的设计,所执行的微指令次序是正确的。在上图中,测试指令微程序最后一条微指令的地址为046,微指令是88000000,所代表的微操作应该是troe,grsce。执行后crs=0000,好像出错了。但是我们看到在下一条微指令时grs=1234,赵老师在上实验课的时候曾经讲过这个问题,这是因为grs的装入使能信号grsce受时钟信号的影响,内容在微指令周期结束时才被保存,所以观察到的数据慢了一步。直接寻址测试指令(或程序):mov 0014h,r1机器码: 内存地址(h)机器码(h)汇编指令00000761 1234mov 0014h,r1运行结果及分析:为了分析微程序是否正确,首先通过查看微指令流程判断bm和nc是设置是否正确,如果执行的微指令依次是:00100200300400b00f014015016006018007。根据前面指令微流程的设计,所执行的微指令次序是正确的。间接寻址测试指令(或程序):mov( 0014),r1机器码: 内存地址(h)机器码(h)汇编指令00000721 1234mov (0014),r1运行结果及分析:为了分析微程序是否正确,首先通过查看微指令流程判断bm和nc是设置是否正确,如果执行的微指令依次是:00100200300400b00f0120013014015016006018007。根据前面指令微流程的设计,所执行的微指令次序是正确的。测试指令(或程序):mov disp(0014),r1机器码: 内存地址(h)机器码(h)汇编指令00000701 1234mov +disp,r1运行结果及分析:为了分析微程序是否正确,首先通过查看微指令流程判断bm和nc是设置是否正确,如果执行的微指令依次是:00100200300400b00f010011017015016006018007。根据前面指令微流程的设计,所执行的微指令次序是正确的。由于时间关系,今天只验证了5种寻址方式。后面两种寻址方式的指令和编码如下所示:寄存器间接寻址mov #1234h,(r1) 指令编码为0769 1234寄存器变址寻址mov #1234h,disp(r1) 指令编码为0771 1234四、设计中遇到的问题及解决办法遇到的问题:1. 搞不清楚取操作数入口的微程序是由什么组成。2. 对软件unidebugger的操作不太熟悉。3. 以为只需要将取源操作数的微程序输入到micro中就行了。解决的办法:1:一时搞不清楚去源操作数的入口的微程序究竟是要填什么,便不和它纠缠,往下看的时候,看到图中的都填满了微命令,便知道了,原来取操作数的入口的微命令是空的(nop)。2:认真地回忆了做实验的时候的上机步骤后,对该软件的基本操作基本熟悉,然后按照课程设计指导书上的要求便能更好地运用该软件。3:mov指令为双操作数指令。原本以为该指令虽然是双操作数指令,但应该只涉及到取源操作数,至于目的操作数,该指令应该只是将源操作数输送到目的地址中,取不取目的操作数不影响问题的。但是很快,我就意识到这个认识是错误的了。因为在我执行该mov指令的时候,程序竟然运行到0018处。这个微指令地址应该出现在取目的操作数阶段,但是我却没有将取目的操作数的微指令编码输入micro中,导致程序运行到该行后输出地微指令编码是00000000。当然运行结果肯定是错误的。于是我毫不犹豫地将取目的操作数的微指令编码全都输入到micro中,然后再次运行mov指令,这一次运行结果就正确了。第二天 运算指令的微程序设计与调试一、设计目标 设计并调试运算指令的微指令二、运算指令微程序入口地址指令助记符指 令 编 码入口地址(h)fedcba9876543210movsrc, dst000001源地址码目的地址码044addsrc, dst000010源地址码目的地址码048addcsrc, dst000011源地址码目的地址码04csub src, dst000100源地址码目的地址码050subbsrc, dst000101源地址码目的地址码054cmpsrc, dst000110源地址码目的地址码058andsrc, dst000111源地址码目的地址码05cor src, dst001000源地址码目的地址码060xor src, dst001001源地址码目的地址码064testsrc, dst001010源地址码目的地址码068inc dst00000010001目的地址码0a4dec dst00000010010目的地址码0a8not dst00000010011目的地址码0ac三、运算类指令微程序(参照指导书图26的形式)addc:04c98b0 006ftroe,addc,sv,pswce0:na-uar06fsub: 05098f0 006ftroe,sub,sv,pswce0:na-uar06fsubb: 0549930 006ftroe,subb,sv,pswce0:na-uar06fcmp: 05898c0 006ftroe,sub,pswce0:na-uar000and: 05c9970 006ftroe,and,sv,pswce0:na-uar06for: 060 99b0 006ftroe,or,sv,pswce0:na-uar06fxor: 0649a30 006ftroe,xor,sv,pswce0:na-uar06fdec: 0a81ab0 006ftroe,dec,sv,pswce0:na-uar06fnot: 0ac19f0 006ftroe,not,sv,pswce0:na-uar06f四、测试程序、数据及运行结果1、测试内容:1:将数据移动到寄存器中;2:将存储数据单元的内容加1;3:将寄存器中的数据和地址单元里的数据进行比较;4:将寄存器做为变址寄存器,将其与1111进行逻辑与运算运行数据:0760 0000mov #0000h,r1;077a 1101mov #1101,0010;023a 0011inc (0011);1b2a 0015cmp (0015),(r1);1f71 1111and #1111,disp(r1);运行结果:对于mov指令而言,在第一天的课程设计的时候已经得到了验证,结果是正确的,这里就不在重复了。加一指令inc,为了分析微程序是否正确,首先通过查看微指令流程判断bm和nc是设置是否正确,如果执行的微指令依次是:00100200300600b00f02200230240250260070a406f071072000。根据前面指令微流程的设计,所执行的微指令次序是正确的,而且,通过alu运算后,输出结果加1,说明运算是正确的。对于cmp指令的执行出现了问题,没将图片拷下来。为了验证指令的正确性,我重新编写了mov指令,并用了比较简单的寻址方式,以便快速查处问题所在。之后就是所遇到的问题。五、设计中遇到的问题及解决办法对于cmp指令的执行出现了问题,没将出问题的图片拷下来。但为了验证指令的正确性,我重新编写了mov指令,并用了比较简单的寻址方式。1b7a fffd 0008mov #fffd,0008h并对ram中的0008单元做了设置,将其中的内容改成了fffd,根据cmp指令的工作原理,比较两个相同的数据的时候(两个数据都是fffd),输出地psw的标志位中的zf应该为1,其他结果应该是0的。但是运行的结果与想象中的有很大差别。运行结果如下:仔细看图片中的数据:00100200300600b00f01600601b01f024025026007058000 指令的运行顺序没出现问题。但是结果出现了问题。szoc为8,说明标志位sf为1,结果竟然是负的。再看看alu中的运行结果,竟然不是0000,而是fffd,由此可知,并不是我的cmp指令出现了错误,而是alu运算器出现了一点小小的错误(sub指令的编写出了点问题)。第三天 cpu硬件的初级设计与验证一、设计目标 在运算器实验的基础上对硬件进行扩充,建立初级cpu的数据通路,构造一个只支持运算指令的初级cpu。二、硬件设计1、pc模块设计(加上适当注释) /*程序计数器pc与r模块一样采用异步复位,当n_reset有效时,pc清0,否则在时钟信号clk的上升沿如果数据装入使能ce有效则dq,如果自加信号pcinc有效则q+1q。pc通过三态门与ib相连。*/timescale 1ns / 1psmodule pc(d,q,n_reset,clk,ce,pcinc); input 15:0 d; input n_reset,clk,ce; input pcinc;output 15:0 q;reg 15:0 data;always (posedge clk or negedge n_reset)beginif(!n_reset)/当n_reset有效时,pc清0data = 0;else if(ce)/ce有效则dqdata = d;else if( pcinc )/pcinc有效则q+1qdata = data+1;endassign q = data;endmodule2、ir模块设计timescale 1ns / 1ps/* dr连接内部总线ib和系统总线的db;dr有两路数据输入data_ib、data_db,分别来自ib、db,相应的有两个装入使能信号drce_ib、drce_db,输出端q分别通过两个三态门连到ib、db。dr采用异步复位,复位时dr清0,否则在时钟信号的上升沿,当drce_ib有效时则data_ibq,当drce_db有效时则data_dbq。*/module dr #(parameter datawidth=16)(input wire datawidth-1:0 data_ib, input wire datawidth-1:0 data_db, input wire clk, input wire drce_ib, input wire drce_db, input n_reset, output reg datawidth-1:0 q);always(posedge clk or negedge n_reset) begin if(!n_reset)/ dr采用异步复位,复位时dr清0 q = 0; else if(drce_ib)/drce_ib有效时则data_ibq q = data_ib; else if(drce_db)/drce_db有效时则data_dbq q = data_db;endendmodule3、顶层模块设计(自己增加的设计部分)/tr寄存器的实例化r #(datawidth) tr(.q(tr_out), .d(ib), .clk(clock), .ce(trce), .n_reset(n_reset);/ar寄存器的实例化r #(datawidth) ar(.q(ar_out), .d(ib), .clk(clock), .ce(arce), .n_reset(n_reset);/ir寄存器的实例化r #(datawidth) ir(.q(ir_out), .d(ib), .clk(clock), .ce(irce), .n_reset(n_reset);三、验证0762 0014 mov #0000h,r1;023a 0014 inc 0014h;1b2a 0015cmp (0015),(r2);0762 0001 mov #0001,r2;1f72 1010 and #1010,disp(r2);运行结果:结果分析:为了分析微程序是否正确,首先通过查看微指令流程判断bm和nc是设置是否正确,如果执行的微指令依次是:00100200300400b00f016006018007044046000根据前面指令微流程的设计,所执行的微指令次序是正确的,而且grs里的数据内容为:0014,所以执行的结果是正确的。inc指令的执行的微指令依次是:00100200300601b01f0240250260070a406f071072000根据前面指令过程微流程的设计,所执行的微指令次序是正确的。inc指令执行后,alu中内容是fffd(原来0014单元内容为fffc),所以执行结果是正确的。cmp指令:为了分析微程序是否正确,首先通过查看微指令流程判断bm和nc是设置是否正确。执行的微指令依次是:00100200300400b00f012013014015016006019025026007058000根据执行结果看:alu中运行结果是0000,而且标志位为。说明结果为,且没有借位。执行结果正确。mov+and指令指令的执行是没问题的。为了分析微程序是否正确,首先通过查看微指令流程判断bm和nc是设置是否正确。执行的微指令依次是:00100200300400b00f01600601a01c01d01e02702502600705c06f071072000根据执行结果看:alu中运行结果是0000,而且标志位为。说明结果为,且没有借位。执行结果正确。四、设计中遇到的问题及解决办法问题:inc指令在结果执行过程中仔细看程序执行的过程可知:inc指令应该在取完目的操作数之后(026)就转到exe执行007,但是程序中却是直接返回取指令入口。这个问题应该出在微指令设计的正确性上,果然,查看micro中的微指令(026)单元,竟然是00000000,问题出现在这里。但是这个确实很奇怪,在第二天的时候我已经将所有微指令都保存好了,但现在下载的微指令却和第二天的微指令不一样,很可能是软件设计上的缺陷吧。将正确的微指令输入后,问题也就解决了。同样的问题出现在and指令上。一下就是and指令运行的结果。从程序运行的流程上看:正确的and指令应该在执行完01a后执行的01c的。但是这里却出现了错误。经检查,同样的问题出现了,micro了的微指令已经和第二天设计的微指令不一样了,由此可见该软件还存在一些缺陷。第四天 为cpu扩充转移指令一、设计要求 在初级cpu的基础上进行功能扩充,使其支持转移类指令二、硬件uag模块设计(自己修改的设计部分,加上适当注释)3d3: uagout=na8:1,bm3_uar0;case(ir7:6)/ 条件转移类指令 * 2b00: flag_mux=1b0; 2b01:flag_mux=1b0; / 添加第四天的代码,参照指导书图210 2b10: flag_mux=1b0; / 根据标志位正确生成bm3_uar0 2b11: flag_mux=1b0; default:flag_mux=1b0; endcase三、转移指令微程序的设计四、测试程序、数据及运行结果1、测试内容(1):通过比较指令,将psw标志位设置为5,然后测试转移指令是否能正确执行。运行数据:(0010单元设置为1111,如下图)1b7a 1111 0010cmp #1111,0010;019a 000bjz 000b;运行结果及分析:为了分析cmp+jz微程序是否正确,首先通过查看微指令流程判断bm和nc是设置是否正确。首先,cmp执行的微指令依次是:00100200300400b00f01600601b01f024025026007058000根据执行结果看:alu中运行结果是0000,而且标志位为。说明结果为,且没有借位。执行结果正确。接下来验证jz指令执行是否正确:00100200300601b01f024025026007075077000,程序正常跳转,执行结果正确。测试内容(2):通过比较指令,将psw标志位设置为9,然后测试转移指令是否能正确执行。运行数据:(0010单元设置为ffef,如下图)1b7a 1111 0010cmp #1111,0010;019a 000bjz 000b;运行结果及分析:为了分析cmp+jz微程序是否正确,首先通过查看微指令流程判断bm和nc是设置是否正确。首先,cmp执行的微指令依次是:00100200300400b00f01600601b01f024025026007058000根据执行结果看:alu中运行结果是eede,而且标志位为9。说明结果为负,且有借位。执行结果正确。接下来验证jz指令执行是否正确:00100200300601b01f024025026007075076000,程序正常跳转,执行结果正确。五、设计中遇到的问题及解决办法出现的问题:在程序编写完成后,开始验证。但是指令运行顺序出现了问题。如图所示:(程序没有跳转到075的位置)微指令运行的顺序出现了问题,首先考虑微指令编码有没有出现错误。经仔细检测,指令编码没有出现问题。接下来很可能是程序出现了问题。果然,在转移指令的入口的地方,原本要设置为075h,但是我在编写代码的时候写成了 4b0011 ir7:5 1b01;这样子虽然能运行程序,但是却将程序复杂化,本来只需要一个模式来执行转移程序的,现在却必须为8个转移指令准备8个转移条件。为了使程序运行,将代码改成 h075 后,程序只需要一个入口来为8个转移指令服务。第五天 为cpu扩充移位指令一、设计目标 在前面cpu的就出上扩充硬件,使其支持移位指令。二、硬件设计1、shifter模块设计(加上适当注释)mux mux_lsb(.addr(ir76),.q(data_lsb),.d1(1b0),.d2(1b0),.d3(ddatawidth-1),.d4(cf);mux mux_hsb(.addr(ir76),.q(data_hsb),.d1(ddatawidth-1),.d2(1b0),.d3(d0),.d4(cf);2、cf模块设计timescale 1ns / 1psmodule cf_mux(d15, d0, cout, q, sl, sr);input d15, d0, cout;input sl, sr;output q;reg q;always (*)begincase (sl, sr)3b01: q = d0;3b10: q = d15;default:q = cout;endcaseendendmodule3、ir_decode模块设计(自己增加修改的设计部分) 2b00: bm4_ua= 5b01001,ir7:5,1b0;4、顶层模块设计(增加自己修改的设计部分)wire cf;cf_mux cfm(.d15(alu_outdatawidth-1),.d0(alu_out0),.cout(cout),.q(cf),.sl(sl),.sr(sr);三、移位指令微程序的设计微地址(h)微指令(h)微指令字段(h)微命令f0f1f2f3f4f5f6f7f8f9092sar06010000006f1810 006f094shl06020000006f1820 006f096shr06010000006f1810 006f098rol06020000006f1820 006f09aror06010000006f1810 006f09crcl06020000006f1820 006f09ercr06010000006f1810 006f四、测试程序、数据及运行结果1、测试内容:测试7中移位指令是否能正确执行。运行数据:0761 0011 mov #0011,r1; 0021 sar r1; 0761 0011 mov #0011,r1;0041 shl r1; 0761 0011 mov #0011,r1;0061 shr r1; 0761 0011 mov #0011,r1;0081 rol r1; 0761 0011 mov #0011,r1;00a1 ror r1; 0761 0011 mov #0011,r1;023b ffff inc #ffff;00c1 rcl r1; 运行结果及分析:由于验证过程比较顺利,没有出现严重的错误,移位指令的执行结果也正确。这里只列出算术右移指令和带进位循环右移指令的验证结果。先分析sar:显然,mov指令执行结果是正确的。现在分析sar指令。首先通过查看微指令流程判断bm和nc是设置是否正确。首先,sar执行的微指令依次是:00100200300601800709206f070000根据执行结果看:alu中运行结果是0008,符合算术右移指令的规则。在分析rcr:在这个程序中,先执行mov指令,再执行加一指令,最后执行带进位循环右移指令。显然,mov指令的执行结果是正确的,加一指令也能按照其正确流程执行。对于rcr指令,首先通过查看微指令流程判断bm和nc是设置是否正确。首先,rcr执行的微指令依次是:00100200300601800709e06f070000,从指令执行流程来看,rcr指令时正确的。从指令运行结果来看,rcr由0000 0000 0001 0001变成了1000 0000 0000 1000,可见运行结果也是正确的。四、设计中遇到的问题及解决办法今天这次课设,主要问题出现在cpu的设计上。由于对verilog的掌握还不是太熟悉,编写代码的时候还是会出现一些小问题。如实例化。而且在移位指令的编码上,我的想法还是和老师的有点不同。在我看来,移位指令的编码应该仅需要2个流程分支,即左移与右移,然后具体是逻辑左移还是算术左移,在shifter.v中已经用多路选择器来判断了,然而,最后还是为转移指令准备了7个分支,下次课设的时候若时间有剩余的话,我会验证用2个流程分支来实现7个转移指令的正确性。第六天 为cpu扩充堆栈类指令一、设计目标 在前面cpu的基础上增加堆栈,使其支持与堆栈有关的push,pop,call,ret指令。二、硬件设计1、sp模块设计(加上适当注释)timescale 1ns / 1psmodule sp(q,d,clk,ce,n_reset); parameter datawidth=16; output datawidth-1:0 q; input datawidth-1:0 d; input clk,ce,n_reset;reg datawidth-1:0 q;always (posedge clk or negedge n_reset)beginif (!n_reset) /复位信号有效时,堆栈sp为03fq = h03f;else if (ce) /ce有效时,将输入送给输出q = d;endendmodule2、顶层模块设计(自己增加修改的设计部分)sp #(datawidth) sp1(.q(sp_out), .d(ib), .clk(clock), .ce(spce), .n_reset(n_reset); buffer #(addrwidth) sp_buf(.q(ib), .d(sp_out), .oe(spoe);三、push、pop、call、ret指令微程序的设计push指令微程序的设计:微地址(h)微指令(h)微指令字段(h)微命令f0f1f2f3f4f5f6f7f8f90c0f400 001spoe,ace0c102b0 00c200a3000000c2dec,sv0c27c08 00c33700200000c3soe,arce,spce0c30005 2000000011020000aroe,droe,wrpop指令微程序的设计:微地址(h)微指令(h)微指令字段(h)微命令f0f1f2f3f4f5f6f7f8f90c8b000 00c95400000000c9aroe,trce0c9e008 00ca7000200000caspoe,arce0ca0006 10cb0000110100cbaroe,rd,drce0cb1008 00cc0400200000cctrce,arce0cc0005 20cd0000110200cdaroe,droe,wr,0cdf400 00ce7500000000cespoe,ace0ce0270 00cf0093000000cfinc,sv0cf7c00 0000370000000000soe,spcecall指令的微命令设计:微地址(h)微指令(h)微指令字段(h)微命令f0f1f2f3f4f5f6f7f8f90d0f400 001spoe,ace0d1b2b0 00d254a3000000d2dec,sv,aroe,trce0d27c08 00d43700200000d3soe,arce,spce0d32003 00d41000300000d4pcoe,drce0d48405 2000410011020000aroe,droe,wr,troe,pcce ret指令的微命令设计:微地址(h)微指令(h)微指令字段(h)微命令f0f1f2f3f4f5f6f7f8f903ce008 003d70002000003dspoe,arce03d0006 103e00001301003earoe,rd,drce03ec400 003f61000000003fdroe,pcce03ff400 0040750000000040spoe,ace0400270 004100930000041inc,sv0417c00 0000370000000000soe,spce四、测试程序、数据及运行结果1、测试内容(1):call 0008h;mov #1234,r1;ret;mov #1111,r2;运行数据:运行结果及分析:结果分析:在这个程序中,先执行call指令,再执行mov指令,接着执行ret指令,最后执行mov指令。对于call指令,首先通过查看微指令流程判断bm和nc是设置是否正确。首先,call执行的微指令依次是:00100200300601b01f0240250260070d00d10d20d30d4000,从指令执行流程来看,call指令时正确的。从指令运行结果来看,跳转到0008h单元执行mov指令,可见运行结果也是正确的。对于mov指令,这里就不再重复分析了。对于ret指令,首先通过查看微指令流程判断bm和nc是设置是否正确。首先,ret执行的微指令依次是:00100200300703c03d03e03f040041000,从指令执行流程来看,ret指令时正确的。从指令运行结果来看,跳转到0002h单元执行mov指令,可见运行结果也是正确的。测试内容(2):push 0008h;pop 0008h;运行数据:运行结果及分析:结果分析:在这个程序中,先执行push指令,再执行pop指令。对于push指令,通过查看微指令流程判断bm和nc是设置是否正确。首先,call执行的微指令依次是:00100200300601b01f0240250260070c00c10c20c3000,从指令执行流程来看,pop指令时正确的。从指令运行结果来看,dr中保存了fdda,且sp自减一,可见运行结果也是正确的。对于pop指令,首先通过查看微指令流程判断bm和nc是设置是否正确。首先,pop执行的微指令依次是:00100200300601b01f0240250260070c80c90ca0cb0cc0ce0cf000,从指令执行流程来看,call指令时正确的。从指令运行结果来看,dr中保存了fdda,且sp自增一,可见运行结果也是正确的。四、设计中遇到的问题及解决办法这一天课设,cpu的设计很顺利。但是push、pop、call、ret指令的微程序出现了一点问题。对于指令的思想而言,没出现过问题,但是在考虑微程序的优化时,把不应该合并的微命令也合并在了一起。比如将spoe,ace,inc,sv合并在了一起。运行结果和我想象的完全不一致。仔细观察出现问题的地方后,发现:此时的sp没有正常的自减或自增,而是dr中的内容在自减,原因就在于将inc指令和ace指令一起使用导致的。经过几次尝试后,我将这四个微命令分成了两组,这时候,堆栈指针sp就能正常地自减和自增了。知道了问题所在后,我便仔细检查push,pop,call,ret四个指令,将经过优化的微程序再次修改,问题也就迎刃而解了。第七天 为cpu扩充中断系统一、 设计目标在前面cpu的基础上增加中断系统,使其支持键盘中断。二、硬件设计1、intc.v文件(可只写自己增加修改部分。并加上适当注释)if(kr) va_out=h0020; /对于键盘中断,中断向量的入口地址为0020h2、if.v文件if(!n_reset) if=1; /复位后允许中断 else if(cli) if=0; / cli信号关中断else if(sti) if=1b1; /sti信号开中断二、 中断响应隐指令的微程序设计中断隐指令微地址(h)微指令(h)微指令字段(h)微命令f0f1f2f3f4f5f6f7f8f9081f400 5082750000050082cli,spoe,ace08202b0 008300a300000083dec,sv0837c08 0084370020000084soe,arce,spce0842003 0085100003000085pcoe,drce0850005 2086000011020086aroe,droe,wr086f400 0087750000000087spoe,ace08702b0 0088 00a300000088dec,sv0887c08 0089370020000089soe,arce,spce0890003 308a00000303008apswoe,drce08a0005 208b00001102008baroe,droe,wr08b0002 608c00000206008cinta,drce08cc008 008d60002000008ddroe,arce08d0006 108e0006108e008earoe,rd,drce08ec400 0000610000000000droe,pcce中断服务返回指令微地址(h)微指令(h)微指令字段(h)微命令f0f1f2f3f4f5f6f7f8f903ef408 003f75002000003fspow,arce,ace03f0276 1040009312010040aroe,rd,drce,inc,sv040d800 0041660000000041droe,pswce0417c00 0042370000000042soe,spce042f408 0043750020000043spoe,arce,ace0430276 102e00931201002earoe,rd,drce,inc,sv02ec400 002f61000000002fdroe,pcce02f7c00 4000370000040000soe,spce,sti四、测试程序、数据及运行结果1、(1)测试内容:023a 000ainc 000a;产生中断(中断服务程序)0741 8000mov 8000h,r1;1f61 000fand #000f,r1;0003reti运行数据:运行结果:从图片中看出:这是在执行inc指令和微程序隐指令。对于inc指令,通过查看微指令流程判断bm和nc是设置是否正确。首先,inc执行的微指令依次是:00100200300601b01f0240250260070a406f071072000,从指令执行流程来看,inc指令是正确的。从指令运行结果来看,alu从ff34变成了ff35,可见运行结果也是正确的。对于中断隐指令,通过查看微指令流程判断bm和nc是设置是否正确。首先,隐指令执行的微指令依次是:08108208308408508608708808908a08b08c08d08e000,从指令执行流程来看,隐指令是正确的。从指令运行结果来看,指令成功跳转到000c单元执行中断服务程序,可见运行结果也是正确的。从图片中看出:这是在执行中断服务程序和and指令。对于中断服务指令(mov),通过查看微指令流程判断bm和nc是设置是否正确。首先,inc执行的微指令依次是:00100200300400b00f01600601800705c06f007044046000,从指令执行流程来看,inc指令是正确的。从指令运行结果来看,grs中的内容为000e,由于从键盘上输入的值为e,可见运行结果也是正确的。对于and指令,通过查看微指令流程判断bm和nc是设置是否正确。首先,and执行的微指令依次是:00100200300400b00f01600601800705c06f070000,从指令执行流程来看,and指令是正确的。从指令运行结果来看,grs中的内容为000e,由于按键的值只存储在低4位,所以为了正确取出按键的值,必须执行and指令,由运行结果可见,and指令运行也是正确的。从图片中看出:这是在执行中断返回指令和返回后执行的mov指令。对于中断返回指令,通过查看微指令
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农村互助性养老服务的资金筹集与使用策略
- 2025至2030年中国电分上稿油行业投资前景及策略咨询报告
- 2025至2030年中国环型工装板输送线行业投资前景及策略咨询报告
- 2025至2030年中国煤矿用局部通风机行业投资前景及策略咨询报告
- 体育教育毕业后干什么
- 2025至2030年中国滑动鼠标行业投资前景及策略咨询报告
- 2025至2030年中国涂料油漆新型添加剂行业投资前景及策略咨询报告
- 2025至2030年中国沥青罐车行业投资前景及策略咨询报告
- 2025至2030年中国水性防腐装饰面漆行业投资前景及策略咨询报告
- 2025至2030年中国椭圆型管行业投资前景及策略咨询报告
- smt首件检验记录表
- QJLYJ7110204A-2022年车身油漆涂层技术要求
- 建档立卡贫困学生证明(模板)
- 一年级下册音乐教案 (简谱) (演唱)同坐小竹排(7) 湘艺版
- 砂石料加工厂劳务外包服务采购项目
- 小学教育中数学与语文教学的融合实施
- Axsym(雅培化学发光仪)简易维修手册第10单元 故障操作
- 临床常见检验指标
- 面试成绩通知单(上下联式)
- 2009吉林省职称评审表(共4页)
- 流动式式起重机司机实操考核评分表
评论
0/150
提交评论