Mit6.S081-实验4-Traps

Mit6.S081-实验4-Traps

一、RISC-V assembly

1,实验准备

1)阅读xv6 book章节4
2)从user space过渡到kernel space,kernel space返回到user space的汇编代码:kernel/trampoline.S
3)解决所有中断的代码:kernel/trap.c

2,实验要求

理解一些RISC-V汇编是很重要的,你已经在6.004中学过。有个文件user/call.c在xv6代码库中。执行make fs.img,编译call.c文件,并生成一个可读的汇编版本程序。阅读call.asm中函数g,f 和main的代码。risc-v的指令参考手册在[参考页](https://pdos.csail.mit.edu/6.828/2020/reference.html)。回答下面问题。

3,相关问题

1、哪些寄存器包含函数参数?例如哪个寄存器持有13(在main函数中的printf中)?

a0-a7包含函数参数;a2存储13。

2、在main汇编代码中哪里调用了函数f?哪里调用了函数g?

编译器优化后,无函数调用

3、函数printf位于哪个地址?

0x630

4、在main中jalr到printf后,ra寄存器的值多少?

0x30,执行auipc	ra,0x0,将PC寄存器值放到ra中
运行下面代码:
unsigned int i = 0x00646c72;
printf("H%x Wo%s", 57616, &i);
输出:HE110 WORLD
如果risc-v是大端序,i需要设置为0x726c64,57616不需要变
上一篇:吴裕雄 python 机器学习——Lasso回归


下一篇:实验七