南大 pa2
本文最后更新于:2023年12月4日 晚上
理解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
这个原因是因为版本库更新,数组中的数字不再是常量。
解决方法,手动改为8192
1 |
|