5.2 CPU类的主要功能及实现方法 虚拟机bochs是一个庞大的工程,它包含了许多库,例如汇编库,反汇编库,CPU库,插槽库等许多库,而我们所以要关心就是CPU库,而CPU库又是一个复杂的工程,它具备了8088CPU的功能,在熟悉了解它后,决定通过修改插槽库来调用CPU库,这样既能达到8088CPU的功能又能是工作量减少。 5.2.1 修改cpu loop修改CPU loop首要的工作是要熟悉这个库的内容,通过一段时间的分析,熟悉了重要功能部分实现的代码。 prefetch(); eipBiased = RIP + BX_CPU_THIS_PTR eipPageBias; } bxInstruction_c *i = fetchInstruction(&iStorage, eipBiased); BxExecutePtr_tR resolveModRM = i->ResolveModrm; // Get as soon as possible for speculation BxExecutePtr_t execute = i->execute; // fetch as soon as possible for speculation 该部分实现了CPU与寄存器之间的取指令,译码指令,以及指令执行的功能。 5.2.2 修改插库插槽库的修改主要通过修改以下函数完成: void bx_instr_init(unsigned cpu) void bx_instr_shutdown(unsigned cpu) void bx_instr_reset(unsigned cpu) void bx_instr_hlt(unsigned cpu) void bx_instr_new_instruction(unsigned cpu) void bx_instr_inp(Bit16u addr, unsigned len) void bx_instr_outp(Bit16u addr, unsigned len) 其中,bx_instr_inp和bx_instr_outp两上插槽函数是CPU执行IN和OUT指令时将会调用的函数,他在实验台演示中有重要作用。 结 论此8088CPU逻辑功能的仿真减少CPU里的一些细节特征,例如CPU与寄存器之间取指令,译指令等一系列流水线过程都简化了,使CPU和寄存器整和在了一起,实现了其主要功能,当用户使用此仿真时容易理解,使得仿真时更加突出重点,减轻了仿真的设计实现难度。 在工作的前期首先要了解bochs,由于bochs是一个巨大的工程,它由汇编库,反汇编库,CPU库,插槽库等许多库组成。在前面花了大量时间来研究研究后,使我们在后期的工作中有了明确的方向,主要通过修改boshs中的CPU_loop和插槽库。但是在后期工作遇到了很多困难,例如最难的是CPU的功能实现,CPU功能复杂,它包含函数相当多,各函数之间的调很多都不能很好的实现。在设计设计过程中还暴露出很多基础问题,例如对工具不能熟练的掌握。 通过这次毕业设计的编程,使我对bochs和8088COU有了新的认识,同时我也对VC++这一编程语言有了更深的了解,对以后的学习和工作都有很大的帮助。 参考文献[1] Peter Abel,IBM PC 汇编语言程序设计(第五版),人民邮电出版社发行,2002.9.1 [2] 孙鑫,余安萍,vc++深入详解,电子工业出版社,2006.06 [3] Stephen Prata,《C++ Primer Plus》(第四版)中文版,人民邮电出版社,2005 [4] Steven Holzner.Visual C++ 6.0轻松进阶[M].北京:电子工业出版社,2005。 [5] John E.Swanke.Visual C++MFC编程实例[M].北京:机械工业出版社,2005。 [6] 张海棠.Visual C++ 6.0编程指南[M].北京:航空工业出版社,2002。 [7] 马群生等 微计算机技术 清华大学出版社 2006.1 [8] 潘爱民等 Visual C++ 技术内幕 清华大学出版社 2001.4
|