我是RISC-V的新手,需要你的帮助。
我正在为裸金属环境的RV32I架构编写一个简单的RISC-V ISA模拟器。我知道我们可以在elf文件中获得入口点(程序的开始(,但没有关于程序结束的信息。
我看到了exit((函数的汇编代码,如下所示。
00010548 <_exit>:
10548: 05d00893 li a7,93
1054c: 00000073 ecall
10550: 00054463 bltz a0,10558 <_exit+0x10>
10554: 0000006f j 10554 <_exit+0xc>
10558: ff010113 addi sp,sp,-16
1055c: 00812423 sw s0,8(sp)
10560: 00050413 mv s0,a0
10564: 00112623 sw ra,12(sp)
10568: 40800433 neg s0,s0
1056c: 00c000ef jal ra,10578 <__errno>
10570: 00852023 sw s0,0(a0)
10574: 0000006f j 10574 <_exit+0x2c>
当程序到达exit((函数时,CPU将陷入无限循环(跳转到自身(,在这种情况下,CPU应该怎么办?应该如何处理这样的跳转指令,以及应该如何确定这就是程序的结束?
提前感谢
您可以使用RISC-V"wfi";指令(等待中断(,它会停止CPU直到出现vlaid IRQ。