将陆续上传本人写的新书《自己动手写CPU》,今天是第33篇,我尽量每周四篇
感兴趣的朋友可以在亚马逊、当当、京东等查找。
.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正确实现了除法指令,并且可以观察到,除法指令需要多个时钟周期才能完成。
通过本章的工作,我们的OpenMIPS处理器可以执行所有的算术操作指令了,此时的数据流图如图7-21所示。
相比第6章的图6-4,主要变化是:增加了一个选择器,用来确定PC的值。PC在下一个时钟周期的值可以是PC+4,也可以保持当前的值不变,后者对应的就是流水线暂停时的情况。
可以在下面的地址下载添加实现了除法指令的OpenMIPS代码
http://download.csdn.net/detail/leishangwen/7902625
好了,MIPS32指令集中的算术操作指令已经全部实现了,下一次将开始实现转移指令了,敬请关注!
原文地址:http://blog.csdn.net/leishangwen/article/details/39228471