所以,我有一个练习,我必须在代码
时翻译它" I = 0; while(table [i]!= value){i = i + 1; }"
关于mips语言!这就是我到目前为止所做的:
add $s3, $0, $0 # i=0;
Loop: sll $t1, $s3, 2 # t1 = 4 * i
add $t1, $t1, $s6 # t1 = addres of table[i]
lw $t0, 0($t1) # t0 = table[i]
beq $t0, $s5, Exit # if table[i] == value goto Exit
addi $s3, $s3, 1 # i = i+1
j Loop # repeat: goto Loop
Exit: .... # the rest of the code "
我刚才有一个问题!只有一次bra或只有一次跳跃是否可行?例如只有beq或只跳?只是因为我想更快地成为我的程序!
答案 0 :(得分:1)
是。如果您将“i”初始化为-1,请在Loop
之后但在测试之前增加“i”,并使用bne
至Loop
进行测试,您可以进行单次跳转/分支。
答案 1 :(得分:0)
每次迭代只能动态执行一个分支(加上常量开销),但程序中仍然有两个控制流指令。
在汇编中,有一条快捷方式可以在不重复条件的情况下执行loop inversion:
j loop_test
loop_body:
...
loop_test:
...
bcond loop_body