CO_P2 MIPS

主要列一点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来跳过这段操作

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值