【问题标题】:while loop translate on mipswhile循环在mips上翻译
【发布时间】:2016-03-07 18:59:17
【问题描述】:

所以,我有一个练习,我必须在代码中翻译它

"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 "

我只是有一个问题!是否可以只有一个分支或只有一个跳跃?例如仅 beq 或仅跳转?只是因为我想更快地成为我的程序!

【问题讨论】:

    标签: assembly mips


    【解决方案1】:

    是的。如果将“i”初始化为 -1,在 Loop 之后但在测试之前增加“i”,并使用 bne 到 Loop 进行测试,则可以有一个跳转/分支。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2011-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-29
        • 1970-01-01
        相关资源
        最近更新 更多