我尝试实现功能ISA模拟器:目标是RISC-V和MIPS.这是一步一步的指令翻译.
抽象步骤:
while(num_steps)
{
try
{
take_interrupt();// take pending interrupts
fetch(); // fetch instruction from memory
decode(); // find handler to instruction
execute(); // perform instruction
}
catch (Trap& e)
{
take_trap(e); //configure appropriate system registers and jump to trap vector.
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,C++异常用于传输控制流.也许有更帅气的设计?
问题:在功能性ISA模拟器上实现陷阱的最佳方法/实践是什么.我也对翻译模拟器的异常/陷阱实现感兴趣,比如QEMU.
注意:通过单词trap我的意思是ISA定义的陷阱,而不是应用程序错误:未对齐的内存访问,非法指令,系统寄存器访问错误,权限级别更改等.