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