comp1521-MIPS(三)结构总结

1 单层循环结构

li      $t0, 0                  # int i = 0;

bomb_loop0:
        bge     $t0, $t1, place_bombs__epilogue           # while (i < N_ROWS)

########do  some thing########

        addi    $t0, $t0, 1                                
        j       bomb_loop0

place_bombs__epilogue:
        jr      $ra

在for循环里调用函数,所以,要储存a0,a1,t0,t1的值。需要假设这些值会变化

li      $t0, 0                  # int i = 0;
        lw      $t1, total_bombs

bomb_loop0:
        bge     $t0, $t1, place_bombs__epilogue           # while (i < N_ROWS)
        addiu   $sp, $sp, -16
        sw      $a0, 0($sp)
        sw      $a1, 4($sp)
        sw      $t0, 8($sp)
        sw      $t1, 12($sp)

        jal     place_single_bomb

        lw      $a0, 0($sp)
        lw      $a1, 4($sp)
        lw      $t0, 8($sp)
        lw      $t1, 12($sp)
        addiu   $sp, $sp, 16

        addi    $t0, $t0, 1                                
        j       bomb_loop0

place_bombs__epilogue:
        # addiu   $sp, $sp, 8
        lw      $ra, 0($sp)
        addiu   $sp, $sp, 4

        jr      $ra



1 双层循环结构

       li      $t0, 0                  # int i = 0;
row_loop:
        bge     $t0, N_ROWS, row_loop_end           # while (i < N_ROWS)
                                        #
        li      $t1, 0                  # int j = 0;
col_loop:
        bge     $t1, N_COLS, col_loop_end           # while (j < N_ROWS)
                                        #
        mul     $t2, $t0, N_COLS        #
        add     $t2, $t2, $t1           #
        lb      $t3, grid($t2)          # $t3 = grid[i][j]

        or      $t4, $t3, IS_RVLD_MASK
        sb      $t4, grid($t2)          # grid[i][j] |= IS_RVLD_MASK
        addi    $t1, $t1, 1             # j++;
        j       col_loop
col_loop_end:
                                        #
        addi    $t0, $t0, 1             # i++;
        j       row_loop    #

row_loop_end:
        j       reveal_grid__epilogue
reveal_grid__epilogue:
        lw      $ra, 0($sp)
        addiu   $sp, $sp, 4

        jr      $ra

if-else结构

在第一个if后面,注意跳转,别把后面的else也执行了

if1:
        beq     $t3, 0, if1_else

        j       mark_cell__epilogue
        
if1_else:


        j       mark_cell__epilogue

mark_cell__epilogue:
        lw      $ra, 0($sp)
        addiu   $sp, $sp, 4

        jr      $ra

带参数的输出

获取数组,修改数组

Guess you like

Origin blog.csdn.net/weixin_42089190/article/details/121055370