mips时钟周期数以及如何改进代码

时间:2013-06-29 17:50:34

标签: assembly mips cycle clock mips32

我是MIPS的新手,我有这些问题,我为他们找到了许多不同的答案......如果有人可以提供帮助,那就太棒了。感谢

此代码需要多少个时钟周期?

#Macro Instructions
li  $t0, 32         #  1 or 2 cycles ?      
                    #                lui $at, Upper 16-bits of value 
                    #                ori Rd, $at, Lower 16-bits of value
                    #                -----------------------------------
                    #                ori Rt, $0, value
                    #
                    #  Which set of instructions will be executed?


div $t2, $t2, $t0   #  41 cycles?          
                    #                bne Rt, $0,
                    #                break $0
                    #                ok: div Rs, Rt
                    #                mflo Rd

#Integer Instruction

lw  $t2, 0($t13)    #  1  cycles?
sw  $t2, 0($t3)     #  1  cycles?

这4行代码如何得到显着改善?通过避免使用宏或......?

1 个答案:

答案 0 :(得分:2)

  • li $t0, 32

您可以通过反汇编可执行文件或目标文件轻松检查。使用objdump-d选项从MIPS工具链中使用-D。我猜想汇编程序足够聪明,不能为这么小的值生成lui


  • div $t2, $t2, $t0

由于你要除以2的幂(32),所以有一种更快的方法:向右移log2(divisor)位(即5位):

srl $t2, $t2, 5   # if $t2 is unsigned


sra $t2, $t2, 5   # if $t2 is signed