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