BUAA-CO-p2-课下
T1 矩阵乘法
T3 卷积计算
这俩题都是矩阵计算,纯粹的for
循环加上一点累加。写的时候最重要的是搞清楚每个for
要循环几次,用哪个变量控制总次数,尤其这个卷积,要不然怎么死的都不知道
为了避免直接直接抄代码,我把宏定义和.data去掉了(
1 |
|
1 |
|
T2 回文串判断
一维数组跟二维比起来真是小巫见大巫了…
从两头开始判断,如果碰到a[i] != a[n-1-i]
就把output
置0
1 |
|
T4 全排列
经典的递归,正好借此题复习一下汇编中递归的写法。
个人非常不喜欢类似以下的写法,感觉非常抽象
1 | lw $a3, 4($sp) |
为避免此类写法,可以添加宏定义:
1 | push(%src) |
另外,如何判断哪些函数需要入栈,哪些不需要呢?如果在递归前与递归后,某一变量均需要被使用,那么需要将其入栈以免被破坏。
1 |
|
Others
多说几句:
-
就个人的debug经验来说,循环末尾的j和函数末尾的jr比较容易忘;
如果是改c语言代码,在所有
return
和函数末尾,都需要jr
和pop
-
如果输出了异常大的数(类似地址),检查
move $a0, $xx
是否写对了; -
注释一定要写,要不然明天就看不懂自己写了什么
-
对于
for
或者while
循环,建议先把循环体写了,避免后面写晕了
1 | getInt($s0) # s0 = n |
1 | getInt($s0) # s0 = n |
- 如果要打印存储内存中的字符,可以按如下操作
1 |
|
Hanoi
C语言样例:
1 |
|
改编时可以将字符串打印和函数传参的过程写成宏,让你的主函数看起来规整一些
另外,传参传参,$a0-$a3
寄存器中的数值在函数体里还是放到$t0
等寄存器中,并且入栈出栈只需要操作临时寄存器即可
1 | init |
BUAA-CO-p2-课下