如何将 for 循环用于汇编 MIPS 指令?

How can I use a for loop for an Assembly MIPS instruction?

所以最近忙于汇编,一直在使用for循环。我已经通过互联网搜索过,但我不明白任何内容。我必须循环 SLL ,,4 # sll operation X 次。我该怎么做?

#generated assembly code for SIMPL
@include "Mips.wasm"
.data   MyRegisters:    REGISTERS
0:  WORD    zero    0      
1:  WORD    temp    0      
2:  WORD     0      
3:  WORD     0      
4:  WORD     0      
5:  WORD     0      
6:  WORD     0      
7:  WORD     0      
8:  WORD     0      
9:  WORD     0      
10: WORD     0      
29: WORD    sp      0      
31: WORD    ra     
.data   MyMemory:   DATAMEM
50: WORD stack  # start of stack
0:  WORD    a       0      
1:  WORD    b       0      
2:  WORD    result  0      
.code   MyCode: MIPS,MyMemory
    J       INIT   
L1: # main
    LUI          , 1          # storing numeric into reg
    ORI          ,      , 0   
    SW           , a      , [=10=]        # assignment of var
    # expr;
    LUI          , 0          # storing numeric into reg
    ORI          ,      , 1000      
    SW           , b      , [=10=]        # assignment of var
    # expr;
    LW           , b      , [=10=]        # storing var into reg
    LW           , b      , [=10=]        # storing var into reg
    SLL          ,      , 4         # sll operation
    SW           , result , [=10=]        # assignment of var
    # expr;
    LUI          , 0          # storing numeric into reg
    ORI          ,      , 1      
    #return int value   # stack ret value
    JR           # return
INIT:   # Start of our program
    J       L1      # jump to the main code
END:

汇编程序中没有循环,这是 C(或类似语言)的概念。

相反,有条件分支指令用于根据测试跳转。

 li    $t0, 10
 li    $t1, 0
 loop:
 addi  $t1, $t1, 1
 bne   $t1, $t0, loop

这大致对应于 C "for" of:

for( int n = 0; n < 10; ++n ) {}

执行实际工作的其他代码 MIPS 代码(将出现在 C 中的括号中的代码)将位于循环:标签和 addi 指令之间。