我是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行代码如何得到显着改善?通过避免使用宏或......?
答案 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