首页 > 代码库 > 自己动手写CPU之第七阶段(12)——检验除法指令实现效果

自己动手写CPU之第七阶段(12)——检验除法指令实现效果

将陆续上传本人写的新书《自己动手写CPU》,今天是第33篇,我尽量每周四篇

感兴趣的朋友可以在亚马逊、当当、京东等查找。


7.13 测试除法指令实现效果

      本节将通过一个测试程序验证为OpenMIPS添加的除法指令是否实现正确,测试程序如下,源文件是本书附带光盘Code\Chapter7_3\AsmTest目录下的inst_rom.S文件。

 .org 0x0
   .global _start
_start:
   ori  $2,$0,0xffff                  
   sll  $2,$2,16
   ori  $2,$2,0xfff1           # $2 = -15    为寄存器$2赋初值
   ori  $3,$0,0x11             # $3 = 17     为寄存器$3赋初值

   div  $zero,$2,$3            # hi = 0xfffffff1            
                               # lo = 0x0

   divu $zero,$2,$3            # hi = 0x00000003
                               # lo = 0x0f0f0f0e

   div  $zero,$3,$2            # hi = 2
                               # lo = 0xffffffff

      给寄存器$2赋初值-15,寄存器$3赋初值17,然后分别使用div、divu、div指令进行运算,结果保存在HI、LO寄存器,程序的注释给出了预期执行结果。ModelSim仿真如图7-20所示,从中可知OpenMIPS正确实现了除法指令,并且可以观察到,除法指令需要多个时钟周期才能完成。


7.14 数据流图的修改

      通过本章的工作,我们的OpenMIPS处理器可以执行所有的算术操作指令了,此时的数据流图如图7-21所示。


      相比第6章的图6-4,主要变化是:增加了一个选择器,用来确定PC的值。PC在下一个时钟周期的值可以是PC+4,也可以保持当前的值不变,后者对应的就是流水线暂停时的情况。


可以在下面的地址下载添加实现了除法指令的OpenMIPS代码

http://download.csdn.net/detail/leishangwen/7902625


好了,MIPS32指令集中的算术操作指令已经全部实现了,下一次将开始实现转移指令了,敬请关注!


自己动手写CPU之第七阶段(12)——检验除法指令实现效果