天天看點

自己動手寫CPU之第七階段(12)——檢驗除法指令實作效果

将陸續上傳本人寫的新書《自己動手寫CPU》,今天是第33篇,我盡量每周四篇

感興趣的朋友可以在亞馬遜、當當、京東等查找。

7.13 測試除法指令實作效果

      本節将通過一個測試程式驗證為OpenMIPS添加的除法指令是否實作正确,測試程式如下,源檔案是本書附帶CD光牒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正确實作了除法指令,并且可以觀察到,除法指令需要多個時鐘周期才能完成。

自己動手寫CPU之第七階段(12)——檢驗除法指令實作效果

7.14 資料流圖的修改

      通過本章的工作,我們的OpenMIPS處理器可以執行所有的算術操作指令了,此時的資料流圖如圖7-21所示。

自己動手寫CPU之第七階段(12)——檢驗除法指令實作效果

      相比第6章的圖6-4,主要變化是:增加了一個選擇器,用來确定PC的值。PC在下一個時鐘周期的值可以是PC+4,也可以保持目前的值不變,後者對應的就是流水線暫停時的情況。

可以在下面的位址下載下傳添加實作了除法指令的OpenMIPS代碼

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

好了,MIPS32指令集中的算術操作指令已經全部實作了,下一次将開始實作轉移指令了,敬請關注!

繼續閱讀