首页 > 代码库 > 自己动手写CPU之第六阶段(4)——验证移动操作指令实现效果

自己动手写CPU之第六阶段(4)——验证移动操作指令实现效果

将陆续上传本人写的新书《自己动手写CPU》(尚未出版),今天是第23篇,我尽量每周四篇


6.4 测试程序

      本节将通过一个测试程序验证为OpenMIPS处理器添加的移动操作指令是否实现正确,测试程序如下,对应本书附带光盘Code\Chapter6\AsmTest目录下的inst_rom.S文件。

.org 0x0
.set noat
.global _start
_start:
   // 给寄存器$1、$2、$3、$4赋初值
   lui $1,0x0000          # $1 = 0x00000000
   lui $2,0xffff          # $2 = 0xffff0000
   lui $3,0x0505          # $3 = 0x05050000
   lui $4,0x0000          # $4 = 0x00000000 

   // 对于movz指令而言,由于寄存器$1为0,所以将$2的值赋给$4
   movz $4,$2,$1          # $4 = 0xffff0000
   
   // 对于movn指令而言,由于寄存器$1为0,所以不赋值,$4保持不变
   movn $4,$3,$1          # $4 = 0xffff0000

   // 对于movn指令而言,由于寄存器$2不为0,所以将$3的值赋给$4
   movn $4,$3,$2          # $4 = 0x05050000

   // 对于movz指令而言,由于寄存器$3不为0,所以不赋值,$4的值保持不变
   movz $4,$2,$3          # $4 = 0x05050000

   // 连续三条mthi指令,分别将寄存器$0、$2、$3的值保存到HI寄存器
   mthi $0                # hi = 0x00000000
   mthi $2                # hi = 0xffff0000
   mthi $3                # hi = 0x05050000

   // 读取HI寄存器的值到$4,同时可验证HI、LO寄存器带来的数据相关问题是否处理正确
   mfhi $4                # $4 = 0x05050000

   // 连续三条指令mtlo,分别将寄存器$3、$2、$1的值保存到LO寄存器
   mtlo $3                # lo = 0x05050000
   mtlo $2                # lo = 0xffff0000
   mtlo $1                # lo = 0x00000000

// 读取LO寄存器的值到$4,同时可验证HI、LO寄存器带来的数据相关问题是否处理正确
   mflo $4                # $4 = 0x00000000        

      程序的注释给出了预期效果,将上述inst_rom.S文件,与第4章建立的Bin2Mem.exeMakefileram.ld这三个文件拷贝到Ubuntu虚拟机中的同一个目录下,打开终端,使用cd命令进入该目录,然后输入make  all,即可得到用于ModelSim仿真的指令存储器初始化文件inst_rom.data

      在ModelSim中新建一个工程,添加本书附带光盘Code\Chapter6目录下的所有.v文件,然后可以编译。再复制上面的inst_rom.data文件到ModelSim工程的目录下,就可以进行仿真了。

      ModelSim仿真输出如图6-76-8所示,观察$4HILO寄存器值的变化可以知道OpenMIPS正确实现了移动操作指令。




好了,移动操作指令至此就已经实现了,也验证通过了,下一步将实现算术操作指令,敬请关注!