Lab 03
Exercise 1
本题让我们熟悉了 venus 的用法,这是一个可以模拟 riscv 代码的一个编辑器。
.data表示数据段的开始,用于定义已初始化的全局或静态变量。.word初始化一个变量。.text表示代码段的开始。- 34 这是第九个斐波那契数
- t3
Exercise 2
t0s0s2loop下面部分的代码- 使用
sp寄存器
Exercise 3
本题需要我们使用 riscv 语法完成阶乘函数,题目在 main 函数中已经告诉我们将 a0 作为参数 n 传递给函数,我们只需要完成函数内部实现即可。
需要注意的是,根据Calling Convention,factorial 作为 callee,是要在其函数内部分配栈空间的,这样才能将通过函数调用后的参数返回给 main 函数
| |
Exercise 4
本题需要我们修改若干个关于Calling Convention的问题,其中大部分都是关于栈内存的问题,总体来说并不难,只需要注意哪个寄存器是要在被调用后还需要保存的,就将这个寄存器分配一块属于它的栈空间即可。
需要注意的是,其中 inc_arr 函数中还调用了一个函数,在这里还需要分配一块空间。
| |
Exercise 5
本题需要我们完成一个 map 函数,其中参数 1 给定一个列表,参数 2 给定一个函数。先打印原列表,再打印经过函数处理后的列表。
题目要求在注释里面都给定了,讲的也很清楚。
| |
Lab 04
Exercise 1
本题需要我们找出代码中的错误,具体错误如下
- 在加载字的时候应使用
lw
| |
- 对于一个数组来说,每到下一个数组内容,需要增加 4 字节,故要注意偏移量的问题
| |
- 每当我们调用一个函数时,要先对这个返回值分配内存,随后再释放内存
| |
- 加载数组的值到寄存器中应使用
lw
| |
- 递归调用函数时
| |
Exercise 2
本题向我们介绍了如何使用动态地址加载一个字
动态索引通常需要我们将索引转换为字节偏移量,也就是乘 4
| |