0

我对 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应该怎么做呢?应该如何处理这样的跳转指令,应该如何判断这是程序的结束?

提前致谢

4

1 回答 1

-1

您可以使用 RISC-V“wfi”指令(等待中断),它会暂停 CPU,直到发生 vlaid IRQ。

于 2022-01-17T15:20:17.273 回答