Lab 03
Exercise 1
本题让我们熟悉了 venus 的用法,这是一个可以模拟 riscv 代码的一个编辑器。
.data
表示数据段的开始,用于定义已初始化的全局或静态变量。.word
初始化一个变量。.text
表示代码段的开始。- 34 这是第九个斐波那契数
- t3
Exercise 2
t0
s0
s2
loop
下面部分的代码- 使用
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
|
|