簡體   English   中英

如何為匯編MIPS指令使用for循環?

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

因此,我最近一直在忙於匯編,而我一直堅持使用for循環。 我已經在互聯網上進行搜索,但我一無所知。 我必須循環SLL $1,$1,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     , 1          # storing numeric into reg
    ORI     $1     , $1     , 0   
    SW      $1     , a      , $0        # assignment of var
    # expr;
    LUI     $1     , 0          # storing numeric into reg
    ORI     $1     , $1     , 1000      
    SW      $1     , b      , $0        # assignment of var
    # expr;
    LW      $1     , b      , $0        # storing var into reg
    LW      $2     , b      , $0        # storing var into reg
    SLL     $1     , $1     , 4         # sll operation
    SW      $1     , result , $0        # assignment of var
    # expr;
    LUI     $1     , 0          # storing numeric into reg
    ORI     $1     , $1     , 1      
    #return int value   # stack ret value
    JR      $31     # 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”:

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

其他執行實際工作的代碼MIPS代碼(將出現在C括號中的代碼)將位於loop:標簽和addi指令之間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM