南大 pa2

本文最后更新于:2023年4月25日 晚上

理解YEMU如何执行程序

YEMU可以看成是一个简化版的NEMU, 它们的原理是相通的, 因此你需要理解YEMU是如何执行程序的. 具体地, 你需要画出在YEMU上执行的加法程序的状态机
通过RTFSC理解YEMU如何执行一条指令
思考一下, 以上两者有什么联系?

YEMU执行指令通过 取值->译码->执行->更新pc操作. 首先从M(内存)中取出一条指令,通过操作码判断所属于的指令类型,然后读取指令内容并更新寄存器执行,最后更新pc指针+1,指向内存中的下1字节数据,通过while(true)指令来实现不断循环。

状态机不想画了()

RTFSC理解指令执行的过程

这一小节的细节非常多, 你可能需要多次阅读讲义和代码才能理解每一处细节. 根据往届学长学姐的反馈, 一种有效的理解方法是通过做笔记的方式来整理这些细节. 事实上, 配合GDB食用效果更佳.

为了避免你长时间对代码的理解没有任何进展, 我们就增加一道必答题吧:

请整理一条指令在NEMU中的执行过程.

除了nemu/src/device和nemu/src/isa/$ISA/system之外, NEMU的其它代码你都已经有能力理解了. 因此不要觉得讲义中没有提到的文件就不需要看, 尝试尽可能地理解每一处细节吧! 在你遇到bug的时候, 这些细节就会成为帮助你调试的线索.

指令执行过程类似于YEMU。首先NEMU从内存中读取一条指令数据,然后对对指令中的操作码和操作数依次进行译码。在指令译码阶段结束后,NEMU会执行代码,运用rtl语句,从而完成指令语义层面上的逻辑行为。最后,只需把下一条动态PC赋值给PC即可完成一次指令执行循环。

遇到的一些问题

在运行navtic时候报错
error: variably modified ‘sigstack’ at file scope

这个原因是因为版本库更新,数组中的数字不再是常量。

https://stackoverflow.com/questions/69719688/buildroot-error-when-building-with-ubuntu-21-10/69722830#69722830

解决方法,手动改为8192

1
uint8_t sigstack[8192];

南大 pa2
https://www.liahnu.top/2023/04/23/南大-pa2/
作者
liahnu
发布于
2023年4月23日
许可协议