CPU模拟器如何计算程序的结束



我是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。

相关内容

  • 没有找到相关文章

最新更新