计算机组成与结构——CPU课程的设计的报告.docx

计算机组成与结构——CPU课程的设计的报告.docx

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机组成与结构——CPU课程的设计的报告

《CPU设计与仿真》课程设计报告学号:2012班级序号:姓名:指导教师:成绩:dida信息工程学院2012年 6月实习题目一【需求规格说明】一、题目:以下文件:sim.cpp,?computer.h,?computer.cpp,?proj1.cpp?and?proj1.h?组成了MIPS仿真器的一个框架.?通过在文件proj1.cpp中增加代码来完成整个程序。你的仿真器必须能仿真以下MIPS机器指令:???????addu??? Rdest, Rsrc1, Rsrc2??????? addiu?? Rdest, Rsrc1, imm??????? subu??? Rdest, Rsrc1, Rsrc2??????? sll???? Rdest, Rsrc, shamt??????? srl???? Rdest, Rsrc, shamt??????? and???? Rdest, Rsrc1, Rsrc2??????? andi??? Rdest, Rsrc, imm??????? or????? Rdest, Rsrc1, Rsrc2??????? ori???? Rdest, Rsrc, imm??????? lui???? Rdest, imm??????? slt???? Rdest, Rsrc1, Rsrc2??????? beq???? Rsrc1, Rsrc2, raddr??????? bne???? Rsrc1, Rsrc2, raddr??????? j?????? address??????? jal???? address??????? jr????? Rsrc??????? lw????? Rdest, offset (Radd)二、问题描述:题目已经给出程序代码的基本框架,我们只需要在proj1.cpp中实现反汇编函数和指令仿真函数,在两个函数中完成以上指令。我们需要参考opcode和func的值对应表,通过分情况讨论,区分并实现指令。三、问题分析:我们要真正理解并解决问题,我们必须大概看懂现成的代码框架,参考opcode与func和指令的对应表,根据对应数值使用if,else语句和switch分支实现区分实现指令。【算法设计】(1)设计思想:1、分割指令:使用移位运算的方法实现分割指令,如:opcode=instr26;rs=(instr6)27;2、提取符号位:也是使用移位运算取立即数的最高位,若s=1,则执行“immediate-=65536;”2^16 = 65536。当最高位为1时,即立即数为负,可是此时立即数由补码转化成十进制数并不是负数,所以需要执行此立即数减2的16次方得到一个正确的负数。3、反汇编显示转化后指令:使用C语言的表示法sprintf_s(ch, addu $%d ,$%d,$%d,rd,rs,rt );printf(ch);4、指令仿真实现:一方面是pc的变化,另一方面是寄存器和内存的值变化,另外由*changedReg和*changedMem记录变化情况。若无变化,则赋(-1)值如下:(1)mips-pc=mips-pc+4;(2)mips-registers[rd]=mips-registers[rt]+mips-registers[rs];(3)if (rd==0)*changedReg=-1;else*changedReg=rd;*changedMem=-1;(2)设计表示:1、分割指令://从底层数据分割指令opcode=instr26;rs=(instr6)27;rt=(instr11)27;rd=(instr16)27;shamt=(instr21)27;funct=(instr26)26;immediate=(instr16)16;target_addr=(instr6)6;2、立即数处理:s=immediate15;//s=1,即符号位为1,立即数为负数if (s==1){immediate-=65536;}3、指令分情况实现,使用do_instruction()包含反汇编函数实现和指令仿真函数内容。利用 pc 是否为零判断情况//比较指令charch[50];//R格式if (opcode==0){switch(funct){case 33: //addu//pc !=0-被反汇编函数调用if (pc!=0){sprintf_s(ch, addu $%d ,$%d,$%d,rd,rs,rt );printf(ch);}//pc =0-被指令仿真函数调用else{mips-pc=mips-pc+4;mips-registers[rd]=mips-registers[rt]+mips-registers[rs];if (rd==0)*changed

您可能关注的文档

文档评论(0)

317960162 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档