主权项 |
一种动态二进制翻译指令集模拟器计时方法,其特征在于步骤如下:(1)初始化用于记录模拟器模拟执行时间的时间量SimTim为0、定义用于表示基本块内所有指令的周期数总和的计数量X、定义实时事件发生时刻Counter,所述的Counter表示从当前时刻开始,执行Counter个时钟周期后,模拟器开始执行需要处理的实时事件E;(2)定义翻译代码缓存区TC以及定义缓存区LC,所述的缓存区LC用于保存最近访问内存区域的读写延迟参数,通过查询该缓存区可快速获得所访问内存区的读写延迟参数;(3)定义用来保存不同内存区域的指令延迟周期数的内存延迟量、并根据等待状态配置寄存器的值对内存延迟量进行设置;(4)设置模拟器PC寄存器的值为目标程序起始地址;(5)查询缓存区TC,判断模拟器PC寄存器所指地址的指令是否已被翻译,若被翻译则进入步骤(13),否则进入步骤(6);(6)动态翻译基本块,动态翻译基本块具体步骤如下:a)记录当前时刻时间量SimTim的值S,并将计数量X设置为0,同时初始化指令翻译地址addr为PC寄存器的值;b)根据当前指令翻译地址addr对基本块内的指令取指,同时查询缓存区LC获取读写延迟参数,并将该延迟参数的值累加到时间量SimTim中;c)对取指指令进行动态翻译,并将该指令的周期数t累加到X中,即:X=X+t;d)判断当前取指指令是否为跳转或分支指令,若是则进入步骤e),若不是则判断当前指令是否为内存访问指令,若是内存访问指令则进入步骤e),若不是则将当前指令翻译地址addr更新为其后继地址并进入步骤a);e)记录当前时刻时间量SimTim的值TS;f)计算基本块每执行一次所占用的指令周期数NTC=(TS–S)+X,其中(TS–S)为基本块中指令取指需要的指令周期数;g)将SimTim的值恢复为S;7)判断实时事件发生时刻Counter是否大于等于基本块指令周期NTC,若大于等于则进入步骤(9),否则进入步骤(8);8)重新执行步骤(6),翻译一个指令周期数为Counter的基本块并进入步骤(9);9)记录当前时刻时间量SimTim的值PS,执行基本块的动态翻译代码,执行后更新时间量SimTim的值为SimTim=SimTim+NTC,同时更新Counter=Counter–(SimTim‑PS);10)根据基本块的执行结果更新PC值;11)判断Counter是否小于等于0或模拟器是否被停止运行,若是则退出基本块执行;否则,进入骤(5)。 |