将陸續上傳本人寫的新書《自己動手寫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正确實作了除法指令,并且可以觀察到,除法指令需要多個時鐘周期才能完成。
7.14 資料流圖的修改
通過本章的工作,我們的OpenMIPS處理器可以執行所有的算術操作指令了,此時的資料流圖如圖7-21所示。
相比第6章的圖6-4,主要變化是:增加了一個選擇器,用來确定PC的值。PC在下一個時鐘周期的值可以是PC+4,也可以保持目前的值不變,後者對應的就是流水線暫停時的情況。
可以在下面的位址下載下傳添加實作了除法指令的OpenMIPS代碼
http://download.csdn.net/detail/leishangwen/7902625
好了,MIPS32指令集中的算術操作指令已經全部實作了,下一次将開始實作轉移指令了,敬請關注!