计算机毕业论文,毕业论文,毕业设计 毕业论文免费检测 知网论文检测
当前位置: 骆驼论文网 > 信息安全 >

简化的8088CPU逻辑功能的仿真

时间:2011-04-11 11:47来源: 骆驼毕业论文网 作者:admin
简化的8088CPU逻辑功能的仿真实现 摘 要 虚拟实验平台主要采用以软代硬和虚、实结合的设计思路,强调实用性,以最大限度地仿真真实的实验环境。主要实现了专用实验台的虚拟化,将它搬到了微机的显示器上,而原有在微机上的实验操作环境和方法仍然保持不变。

QQ交谈计算机毕业设计,毕业设计,毕业论文,计算机毕业论文

简化的8088CPU逻辑功能的仿真实现

摘    要
 “虚拟实验平台”主要采用以“软”代“硬”和“虚”、“实”结合的设计思路,强调实用性,以最大限度地仿真真实的实验环境。主要实现了“专用实验台”的虚拟化,将它“搬”到了“微机”的显示器上,而原有在微机上的实验操作环境和方法仍然保持不变。系统还提供必要的测试仪器和工具(如示波器等),以便在实验调试时能够对运行结果进行监视或测量,如输出电平或波形,这种虚拟的测试仪器和工具也在界面和操作方面做到了尽可能的逼真。本文介绍了该虚拟试验平台的整体功能特点,主要介绍了8088CPU的结构,工作方式,以及如何用VC实现这些具体功能的编程方法。并加入了一些程序片段,对完成工作中遇到的困难也做了些总结。

关键词:仿真试验平台;8088CPU;VC;封装;寄存器;移植
目录
论文总页数:21页
1 概述 1
1.1课题背景及意义 1
1.2项目介绍 1
1.2.1虚拟化技术简介 1
1.2.2 CPU虚拟化技术简介 2
1.3项目要求 2
2 VC++6.0的编程 2
2.1 MFC编程 2
2.2 DLL相关知识 2
3 8088CPU介绍 3
3.1. 概述 3
3.2 8088CPU引线及其功能 3
3.3 8088CPU的内部结构 4
3.4 时序 5
3.5 简化的8088CPU模型概述 5
3.6移植bochs仿真实现8088CPU功能的基本思路 7
4 Bochs介绍 7
4.1 Bochs概述 7
4.2 类 BX_CPU_C 介绍 7
4.2.1 主要的数据成员 7
4.2.2 主要的成员函数 8
4.3 BX_CPU_C 类对CPU工作流程的简易描述 9
4.4 基本内存系统 11
4.4内存的访问 12
4.5 Bochs 时钟系统 14
4.6 Bochs中断系统 15
5 具体移植实现 17
5.1  虚拟实验平台统一的器件模型 17
5.2 CPU类的主要功能及实现方法 17
5.2.1 修改cpu loop 18
5.2.2 修改插库 18
结    论 18
参考文献 19
致    谢 20
声    明 21
 
1.2项目介绍
1.2.1虚拟化技术简介
从1965年IBM在7044机上首次实现虚拟技术以来,这一名词对于计算机世界来说已经不是一个新名词。虚拟化是一个广义的术语,在计算机方面通常是指计算元件在虚拟的基础上而不是真实的基础上运行。虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。虚拟化技术与多任务以及超线程技术是完全不同的。多任务是指在一个操作系统中多个程序同时并行运行,而在虚拟化技术中,则可以同时运行多个操作系统,而且每一个操作系统中都有多个程序运行,每一个操作系统都运行在一个虚拟的CPU或者是虚拟主机上。
当我们尝试着理解虚拟技术时,首先必须要理解“虚拟”的概念。“虚拟”这个词最早来源于光学,用于理解镜子里的物体。现在,“虚拟”这个词已经经过演化,用来描述任何真实物体的模拟了,例如分区、虚拟机、虚拟内存、虚拟磁盘和虚拟现实。在讨论虚拟技术的时候,使用“虚拟”这个词,是因为我们希望虚拟机看起来和工作起来都和真正的机器一模一样。这意味着,虚拟机并不是真正的机器,但是它能像真正的机器一模一样地工作。
实际上,从原理上看,所有虚拟技术虚拟的是指令集。所有的IT设备,不管是PC、服务器还是存储,都有一个共同点:它们被设计用来完成一组特定的指令。这些指令组成一个指令集。对于虚拟技术而言,“虚拟”实际上就是指的这些指令集。虚拟机有许多不同的类型,但是它们有一个共同的主题就是模拟一个指令集的概念。每个虚拟机都有一个用户可以访问的指令集。虚拟机把这些虚拟指令“映射”到计算机的实际指令集。
虚拟化技术也与目前VMware Workstation等同样能达到虚拟效果的软件不同,是一个巨大的技术进步,具体表现在减少软件虚拟机相关开销和支持更广泛的操作系统方面。
按照虚拟层所处位置的不同,目前所有的虚拟技术大致可以分为硬件虚拟、逻辑虚拟、软件虚拟和应用虚拟四种类型。
1.2.2 CPU虚拟化技术简介
   CPU的虚拟化技术是一种硬件方案,支持虚拟技术的CPU带有特别优化过的指令集来控制虚拟过程,通过这些指令集,VMM会很容易提高性能,相比软件的虚拟实现方式会很大程度上提高性能。虚拟化技术可提供基于芯片的功能,借助兼容VMM软件能够改进纯软件解决方案。由于虚拟化硬件可提供全新的架构,支持操作系统直接在上面运行,从而无需进行二进制转换,减少了相关的性能开销,极大简化了VMM设计,进而使VMM能够按通用标准进行编写,性能更加强大。另外,在纯软件VMM中,目前缺少对64位客户操作系统的支持,而随着64位处理器的不断普及,这一严重缺点也日益突出。而CPU的虚拟化技术除支持广泛的传统操作系统之外,还支持64位客户操作系统。
   虚拟化技术是一套解决方案。完整的情况需要CPU、主板芯片组、BIOS和软件的支持,例如VMM软件或者某些操作系统本身。即使只是CPU支持虚拟化技术,在配合VMM的软件情况下,也会比完全不支持虚拟化技术的系统有更好的性能。

3.5 简化的8088CPU模型概述
      本设计的设计目标是设计一个简化的8088CPU模型,要求模型体现8088CPU的主要功能,省略掉其很多繁琐的细节。基于此考虑,简化模型主要从如下几个方面对8088CPU作了简化:
1 取消8088里的取指令、执行指令流水线
2 取消8088里的指令预取对列
3 取消8088里管脚的分时复用功能
4 将存储器与CPU融合,简化存储器读写总线周期
5 对8088的管脚也重新进行了设置。
管脚设置如图表5所示,CPU内部功能结构如图表6所示:
             
              
 图表 5简化8088CPU管脚分布

                       
  图表 6 简化8088CPU内部功能结构                         
3.6移植bochs仿真实现8088CPU功能的基本思路
CPU指令系统和时序逻辑是本设计难点,而我们解决难点采取的办法是移植虚拟机bochs,它包含了8088下所有CPU指令的仿真函数实现。而且还专门预留了一个插槽库供扩展Bochs使用。Bochs很庞杂,也很少文献资料,了解Bochs成为我们前期的工作。

4 Bochs介绍
4.1 Bochs概述
Bochs是一个X86的模拟器,它可以模拟几乎所有类型的X86 CPU,包括16位,32位和64位(X86_64)。一个64位的X86可以看作是32位和16位X86的超集。X86_64的工作方式包括以下两类:
1,IA-32模式:包括实模式,保护模式和虚拟8086模式三个子模式。
2,IA-32e模式:包括长模式和兼容模式。
在Bochs中,用BX_CPU_C类来模拟CPU,它支持上面提到的每一种模式。
4.2 类 BX_CPU_C 介绍
4.2.1 主要的数据成员
char name[64],代表CPU的名字。
unsigned bx_cpuid,CPU的ID号,用于SMP(对称多处理)的机器。
bx_gen_reg_t  gen_reg[BX_GENERAL_REGISTERS],bx_gen_reg_t是一个复杂的结构体,它表示一个64位的通用寄存器,其主要成员有:rrx:表示一个完整的64位寄存器。hrx、erx:分别表示64位寄存器的高32位与低32位,这时候64位的寄存器被分割成2个32位寄存器使用。
rx:表示erx的低16位,此时寄存器被当作16位寄存器使用。
rh、rl:分别表示rx的高8位与低8位,此时rx被分割成2个8位寄存器。
gen_reg就是一个代表通用寄存器的数组,BX_GENERAL_REGISTERS是寄存器的个数,如果模拟的是64位处理器,那么BX_GENERAL_REGISTERS值为16,否则值为8。64位时通用寄存器分别是RAX、RCX、RDX、RBX、RSP、RBP、RSI、RDI、R8~R15;32位时没有R8~R15 。
Bit64u rip; Bit32u eip;
分别是64位模式和32位模式下的指令指示器。
bx_segment_reg_t  sregs[6];
bx_segment_reg_t是表示段寄存器的结构,sregs[6]是表示了6个段寄存器的数组。分别是ES、CS、SS、DS、FS和GS。

BX_MEM_C *mem;
mem是指向这个CPU所使用的内存的指针 。
bx_local_apic_c  local_apic;
bx_local_apic是模拟本地APIC的类,用于SMP系统。
unsigned  cpu_mode;
就是前面提到的CPU的工作模式,主要有5种,分别是实模式(16位模式)、8086虚拟模式(32位模式下的虚拟16位模式)、保护模式(32位模式)、兼容模式(64位模式下的虚拟32位,16位模式)和长模式(64位模式)。分别使用宏BX_MODE_IA32_REAL、BX_MODE_IA32_V8086、BX_MODE_IA32_PROTECTED、BX_MODE_LONG_COMPAT和BX_MODE_LONG_64表示。
4.2.2 主要的成员函数
void cpu_loop(Bit32s max_instr_count)
cpu_loop是一个非常重要的函数,所有的指令函数都在这里执行。参数max_instr_count表示cpu_loop执行的最大指令数。

void prefetch(void)预取指令函数,计算指令的物理地址和其他相关信息,为后面的指令译码作准备。
unsigned fetchDecode(Bit8u *iptr, bxInstruction_c *instruction,unsigned remain)
unsigned fetchDecode64(Bit8u *iptr, bxInstruction_c *instruction,unsigned remain)
这两个函数用于对指令进行译码,前者按指令长度32位译码,后者按64位译码,参数意义分别是指令的物理地址,空白指令结构和指令长度的最大字节数

void boundaryFetch(Bit8u *fetchPtr, unsigned remainingInPage, bxInstruction_c *i)
X86的最长指令可以达到15个字节,因此指令可能出现跨页,此时prefetch()+ fetchDecode()/fetchDecode64()失败,必须调用boundaryFetch()函数进行跨页取指译码。

参考文献
[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。
 

本文内容只是论文部分简介,如需了解更多详情请咨询本站客服! QQ交谈计算机毕业设计,毕业设计,工程硕士论文,计算机毕业论文
毕业论文搜集整理:毕业论文网 计算机毕业设计 计算机毕业论文 毕业设计


顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
计算机毕业设计
计算机毕业论文
论文发表