本文主要为广大网友提供“IA32的逻辑功能仿真实现”,希望对需要IA32的逻辑功能仿真实现网友有所帮助,学习一下!
客服咨询,网学网竭诚为您服务,本站永久域名:myeducs.cn |
3 相关知识介绍 3.1 CPU虚拟化技术 3.2 VC++6.0及MFC介绍 3.3 动态连接库 DLL 3.4 bochs介绍 3.4.1 BX_CPU_C的数据成员 3.4.2 BX_CPU_C 类对CPU工作流程的简易描述 3.4.3 基本内存系统 3.4.4 内存的访问 3.4.5 Bochs 时钟系统 4 具体移植实现 4.1虚拟实验平台统一的器件模型 4.2 CPU中可视化器件的设计 4.2.1 运算部件 4.2.2 寄存器组 4.3 CPU类的主要功能及实现方法 4.3.1 CPU核心功能采用调用bochs里的相关库来实现 4.3.2 修改cpu_loop 4.3.3 修改插槽库stubs 5 仿真效果 5.1 测试平台的外观 5.2 器件的显示 5.3 对器件引脚输入信号 fetchDecode()函数(指令译码): 指令的结构用一个类指令结构bxInstruction_c 来表示,它的两个主要成员函数下: void (BX_CPU_C::*ResolveModrm) (bxInstruction_c *) BX_CPP_AttrRegparmN(1); //获取指令的类型,类型是由bochs定义的 void (BX_CPU_C::*execute)(bxInstruction_c *); //指令对应的执行函数指针 基本指令放在一个数组中: static BxOpcodeInfo_t BxOpcodeInfo[512*2] 第0~511项: 16bit mode 第512~1023项: 32bit mode (其中包括了fpu,x86-64,3DNOW,SSE等指令入口)
boundaryFetch()函数(跨页边界取指) void boundaryFetch(Bit8u *fetchPtr, unsigned remainingInPage, bxInstruction_c *i)因为指令跨页,不能将指令的首地址作为参数传给fetchDecode()/fetchDecode64(),因此设立临时变量fetchBuffer,用以保存在两页中取出的共15个字节,并将fetchBuffer作为译码的参数。指令的最大长度为15字节,但具体每条指令的长度是不定的,在本次取指过程中为了实现跨页移动了RIP,因此返回之前必须将其复原,函数返回以后,在cpu_loop()里面,会根据实际的指令长度移动RIP。 Bit32u dtranslate_linear(bx_address laddr, unsigned pl, unsigned rw) Bit32u itranslate_linear(bx_address laddr, unsigned pl) 在translate_linear中,参数的意义分别是线性地址值,特权级别,当前操作的访问方式(读、写),操作类型(数据,指令),返回值是翻译后的物理地址。dtranslate_linear和itranslate_linear分别实现数据地址和指令地址的翻译,都是通过调用translate_linear实现的。 Bit32u用到的局部变量: bx_address pte, pde, pdp, pml4; 分别表示页表项,页目录表项,页目录指针表项和PML4表项,这些表项分别包含了本次翻译的页,页表,页目录表,页目录指针表在内存中的基地址。 Bit32u pte_addr, pde_addr, pdp_addr, pml4_addr; 分别表示本次翻译中页表项,页目录表项,页目录指针表项以及PML4表项自身所在的绝对地址(物理地址)。 Bit32u ppf, poffset, paddress; 分别表示物理页框地址(物理页的基地址),页内偏移和经过翻译后的物理地址。
|
本站发布的计算机毕业设计均是完整无错的全套作品,包含开题报告+程序+论文+源代码+翻译+答辩稿PPT |
本文选自计算机毕业设计http://myeducs.cn |