while循环翻译为mips

时间:2016-03-07 18:59:18

标签: assembly mips

所以,我有一个练习,我必须在代码

时翻译它

" 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或只跳?只是因为我想更快地成为我的程序!

2 个答案:

答案 0 :(得分:1)

是。如果您将“i”初始化为-1,请在Loop之后但在测试之前增加“i”,并使用bneLoop进行测试,您可以进行单次跳转/分支。

答案 1 :(得分:0)

每次迭代只能动态执行一个分支(加上常量开销),但程序中仍然有两个控制流指令。

在汇编中,有一条快捷方式可以在不重复条件的情况下执行loop inversion

    j loop_test
loop_body:
    ...
loop_test:
    ...
    bcond loop_body