主要列一点MIPS里面运用到的一些知识和技巧
1.使用宏定义来使用二位数组
通常情况下只能用初始位置和下标来定位,那么对于二维数组就需要快速获取下标
.macro index(%rt, %i, %j)
sll %rt, %i, 3
add %rt, %rt, %j
sll %rt, %rt, 2
.end_macro
使用类似于这样的宏就可以快速得到一个index
2.递归
递归的过程中,递归的每一层在进入下一层的时候内容会发生变化,那么就需要我们把当前这一层的东西记录下来 可以使用$sp, 通过sw的方式将每一层的东西存入,例如$a0(函数传入的值)或者内部的循环变量(i,j)保存下来
sw $t3, 0($sp)
subi $sp, $sp, 4
sw $t0, 0($sp)
subi $sp, $sp, 4
sw $t1, 0($sp)
subi $sp, $sp, 4
jal dfs
addi $sp, $sp, 4
lw $t1, 0($sp)
addi $sp, $sp, 4
lw $t0, 0($sp)
addi $sp, $sp, 4
lw $t3, 0($sp)
sw $0, arr($t3)
addi $sp, $sp, 4
lw $ra, 0($sp)
可以这样每次将$sp指针的位置移动4格,存入后下次将指针放回原位之后就可以获取原值
3.通过label进行跳转
通常在执行的时候会遇到很多的if条件,有些是进入if才需要执行的,因此可以使用一些trick,例如continue之类的,不需要进行操作的时候就跳过
bne $a0, $s4 continue
bne $a1, $s5 continue
add $t9 , $t9, 1
jr $31
continue:
例如上面我需要在相等的时候进行操作,那么不相等的时候我就可以使用一个continue来跳过这段操作