简化的8088CPU逻辑功能的仿真实现毕业设计论文_第1页
简化的8088CPU逻辑功能的仿真实现毕业设计论文_第2页
简化的8088CPU逻辑功能的仿真实现毕业设计论文_第3页
简化的8088CPU逻辑功能的仿真实现毕业设计论文_第4页
简化的8088CPU逻辑功能的仿真实现毕业设计论文_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、毕业设计(论文)简化的8088cpu逻辑功能的仿真实现论文作者姓名:申请学位专业:申请学位类别:指导教师姓名(职称):论文提交日期: 简化的8088cpu逻辑功能的仿真实现摘 要 “虚拟实验平台”主要采用以“软”代“硬”和“虚”、“实”结合的设计思路,强调实用性,以最大限度地仿真真实的实验环境。主要实现了“专用实验台”的虚拟化,将它“搬”到了“微机”的显示器上,而原有在微机上的实验操作环境和方法仍然保持不变。系统还提供必要的测试仪器和工具(如示波器等),以便在实验调试时能够对运行结果进行监视或测量,如输出电平或波形,这种虚拟的测试仪器和工具也在界面和操作方面做到了尽可能的逼真。本文介绍了该虚拟

2、试验平台的整体功能特点,主要介绍了8088cpu的结构,工作方式,以及如何用vc实现这些具体功能的编程方法。并加入了一些程序片段,对完成工作中遇到的困难也做了些总结。关键词:仿真试验平台;8088cpu;vc;封装;寄存器;移植 implementation of simplified model 8088 cpus logic functionabstractvirtual platform principal use soft to instead of hard and superficial, real combination of design ideas, emphasize pr

3、acticality, to maximize the simulation of the real environment. major implementation of the exclusive experimental station, the virtual, it will be moved to the pc display, the original pc in the lab environment and methods remain unchanged. the system also provides the necessary test equipment and

4、tools (such as oscilloscopes, etc.) experimental testing in order to be able to run when the results of surveillance or measurements, such as the output level or waveform, this virtual testing equipment and tools also interface and the operation done in a realistic as possible. this paper introduces

5、 the virtual test platform overall features, mainly on the structure of the 8088 cpu, work methods, and how to use vc these specific functional programming method. and the inclusion of some procedures footage completed work on the difficulties encountered also made some conclusion.key words: virtual

6、 experement platform;8088cpu8; vc; encapsulation;register;port目录论文总页数:581页1 概述11.1课题背景及意义11.2项目介绍11.2.1虚拟化技术简介11.2.2 cpu虚拟化技术简介21.3项目要求22 vc+6.0的编程22.1 mfc编程22.2 dll相关知识23 8088cpu介绍33.1. 概述33.2 8088cpu引线及其功能33.3 8088cpu的内部结构43.4 时序53.5 简化的8088cpu模型概述53.6移植bochs仿真实现8088cpu功能的基本思路74 bochs介绍74.1 bochs概

7、述74.2 类 bx_cpu_c 介绍74.2.1 主要的数据成员74.2.2 主要的成员函数84.3 bx_cpu_c 类对cpu工作流程的简易描述94.4 基本内存系统114.4内存的访问124.5 bochs 时钟系统144.6 bochs中断系统155 具体移植实现175.1 虚拟实验平台统一的器件模型175.2 cpu类的主要功能及实现方法175.2.1 修改cpu loop185.2.2 修改插库18结 论18参考文献19致 谢20声 明21简化的8088cpu逻辑功能的仿真实现1 概述1.1课题背景及意义过去当人们在开发一个项目时可能会遇到以下问题(1)经常苦于经费不足,缺少足够

8、的硬件开发板和完善的软件开发环境,相关的书籍对一些最新软件的分析还不够全面(2)高层次的软件设计和开发一般不用过多考虑底层硬件的实现细节,如果直接处于一具体的硬件环境下,在开发和研究中可能会陷入硬件的具体细节中不能自拔,而不能把精力放到高层次的软件设计和开发上。(3)如果硬件开发环境不太稳定(这种情况经常见到),且对身体的硬件不是很了解,则可能在排除问题上花费大量不必要的时间,所以人们利用仿真技术来解决这些问题以到达节约人力物力的目的。1.2项目介绍1.2.1虚拟化技术简介从1965年ibm在7044机上首次实现虚拟技术以来,这一名词对于计算机世界来说已经不是一个新名词。虚拟化是一个广义的术语

9、,在计算机方面通常是指计算元件在虚拟的基础上而不是真实的基础上运行。虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。虚拟化技术与多任务以及超线程技术是完全不同的。多任务是指在一个操作系统中多个程序同时并行运行,而在虚拟化技术中,则可以同时运行多个操作系统,而且每一个操作系统中都有多个程序运行,每一个操作系统都运行在一个虚拟的cpu或者是虚拟主机上。当我们尝试着理解虚拟技术时,首先必须要理解“虚拟”的概念。“虚拟”这个词最早来源于光学,用于理解镜子里的物体。现在,“虚拟”这个词已经经过演化,用来描述任何真实物体的模拟了,例如分区、虚拟机、虚拟内存、虚拟磁盘和虚拟现实。在讨论虚拟技术的时候,

10、使用“虚拟”这个词,是因为我们希望虚拟机看起来和工作起来都和真正的机器一模一样。这意味着,虚拟机并不是真正的机器,但是它能像真正的机器一模一样地工作。实际上,从原理上看,所有虚拟技术虚拟的是指令集。所有的it设备,不管是pc、服务器还是存储,都有一个共同点:它们被设计用来完成一组特定的指令。这些指令组成一个指令集。对于虚拟技术而言,“虚拟”实际上就是指的这些指令集。虚拟机有许多不同的类型,但是它们有一个共同的主题就是模拟一个指令集的概念。每个虚拟机都有一个用户可以访问的指令集。虚拟机把这些虚拟指令“映射”到计算机的实际指令集。虚拟化技术也与目前vmware workstation等同样能达到虚

11、拟效果的软件不同,是一个巨大的技术进步,具体表现在减少软件虚拟机相关开销和支持更广泛的操作系统方面。按照虚拟层所处位置的不同,目前所有的虚拟技术大致可以分为硬件虚拟、逻辑虚拟、软件虚拟和应用虚拟四种类型。1.2.2 cpu虚拟化技术简介 cpu的虚拟化技术是一种硬件方案,支持虚拟技术的cpu带有特别优化过的指令集来控制虚拟过程,通过这些指令集,vmm会很容易提高性能,相比软件的虚拟实现方式会很大程度上提高性能。虚拟化技术可提供基于芯片的功能,借助兼容vmm软件能够改进纯软件解决方案。由于虚拟化硬件可提供全新的架构,支持操作系统直接在上面运行,从而无需进行二进制转换,减少了相关的性能开销,极大简

12、化了vmm设计,进而使vmm能够按通用标准进行编写,性能更加强大。另外,在纯软件vmm中,目前缺少对64位客户操作系统的支持,而随着64位处理器的不断普及,这一严重缺点也日益突出。而cpu的虚拟化技术除支持广泛的传统操作系统之外,还支持64位客户操作系统。 虚拟化技术是一套解决方案。完整的情况需要cpu、主板芯片组、bios和软件的支持,例如vmm软件或者某些操作系统本身。即使只是cpu支持虚拟化技术,在配合vmm的软件情况下,也会比完全不支持虚拟化技术的系统有更好的性能。1.3项目要求综合运用以前所学的专业知识,设计开发一个简化的8088cpu功能模拟的演示软件;在设计与开发中,将cpu与存

13、储器整合在一起的模型,1.实现cpu的指令系统 2. 实现cpu的时序逻辑 2 vc+6.0的编程2.1 mfc编程mfc用类编写windows应用程序的c+类集,以层次结构组织起来,其中封装了大部分windows api函数和 windows控件,而基础的虚拟平台就是在次基础之上而开发出的。使用mfc类库和visual c+提供的高度可视的应用程序开发工具,可是应用程序开发变的更简单,开发周期极大地缩短,提高代码的可靠性和可重用性。它提供的类库对程序设计的高度抽象,使得程序员不用放在程序设计的具体细节上,而是对功能的扩展上,大大简化了开发工作。在开发过程中,我们所做的就是编写封装器件的程序,

14、由平台调用之来显示出控件,除了编写一些相关消息响应函数外,大部分工作由系统完成。2.2 dll相关知识比较大的应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作。可能存在一些模块的功能较为通用,在构造其它软件系统时仍会被使用。在构造软件系统时,如果将所有模块的源代码都静态编译到整个应用程序 exe 文件中,会产生一些问题:一个缺点是增加了应用程序的大小,它会占用更多的磁盘空间,程序运行时也会消耗较大的内存空间,造成系统资源的浪费;另一个缺点是,在编写大的 exe 程序时,在每次修改重建时都必须调整编译所有源代码,增加了编译过程的复杂性,也不利于阶段性

15、的单元测试。windows 系统平台上提供了一种完全不同的较有效的编程和运行环境,你可以将独立的程序模块创建为较小的 dll (dynamic linkable library) 文件,并可对它们单独编译和测试。在运行时,只有当 exe 程序确实要调用这些 dll 模块的情况下,系统才会将它们装载到内存空间中。这种方式不仅减少了 exe 文件的大小和对内存空间的需求,而且使这些 dll 模块可以同时被多个应用程序使用。windows 自己就将一些主要的系统功能以 dll 模块的形式实现。3 8088cpu介绍3.1. 概述 8088是8080和8085的改进型,像8080和8085一样,它的指

16、令是以字节为基础构成的。它的性能的提高,主要依赖于采取了以下一些特殊措施。 1. 建立4字节的指令预取队列 2. 设立地址段寄存器 3. 在结构上和指令设置方面支持多微处理器系统 一般处理器与8088cpu处理器指令过程见图表1 图表 1 一般处理器与8088处理器指令执行过程对比(a)一般处理器指令执行过程;(b)8088处理器指令执行过程3.2 8088cpu引线及其功能 8088cpu是一块具有40条引出线的集成电路芯片,其各引出线的定义如图22所示。为了减少芯片的引线,有许多引线具有双重定义和功能,采用分时复用方式工作,即在不同时刻,这些引线上的信号是不相同的,其管脚引线如图表2。 图

17、表 2 8088处理器芯片引线图3.3 8088cpu的内部结构8088微处理器内部分为两个部分:执行单元(eu)和总线接口单元(biu),如图表3所示。 图表 3 8088cpu的内部结构 8088处理器中的内部寄存器用户能用指令改变其内容的,主要是一组内部寄存器,其结构如图表4所示。 1)数据寄存器 8088有4个16位的数据寄存器,可以存放16位的操作数。 2) 指针寄存器 8088的指针寄存器有两个:sp和bp。sp是堆栈指针寄存器,由它和堆栈段寄存器一起来确定堆栈在内存中的位置。bp是基数指针寄存器,通常用于存放基地址,以使8088的寻址更加灵活。 3)变址寄存器si是源变址寄存器,

18、di是目的变址寄存器,都用于指令的变址寻址。 4)控制寄存器8088的控制寄存器有两个:ip,psw。ip是指令指针寄存器,用来控制cpu的指令执行顺序。 图表 4 8088cpu的内部结构3.4 时序 在8088cpu中,cpu与内存或接口间进行通信,如将一个字节写入内存一个单元(或接口),或者从内存某单元(或某接口)读一个字节到cpu,这种读(或)写的过程称为一个总线周期。3.5 简化的8088cpu模型概述 本设计的设计目标是设计一个简化的8088cpu模型,要求模型体现8088cpu的主要功能,省略掉其很多繁琐的细节。基于此考虑,简化模型主要从如下几个方面对8088cpu作了简化:1

19、取消8088里的取指令、执行指令流水线2 取消8088里的指令预取对列3 取消8088里管脚的分时复用功能4 将存储器与cpu融合,简化存储器读写总线周期5 对8088的管脚也重新进行了设置。管脚设置如图表5所示,cpu内部功能结构如图表6所示: 图表 4简化8088cpu管脚分布 图表 5 简化8088cpu内部功能结构 3.6移植bochs仿真实现8088cpu功能的基本思路cpu指令系统和时序逻辑是本设计难点,而我们解决难点采取的办法是移植虚拟机bochs,它包含了8088下所有cpu指令的仿真函数实现。而且还专门预留了一个插槽库供扩展bochs使用。bochs很庞杂,也很少文献资料,了

20、解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 name64,代表cpu的名字。unsigned bx_c

21、puid,cpu的id号,用于smp(对称多处理)的机器。bx_gen_reg_t gen_regbx_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是寄存器

22、的个数,如果模拟的是64位处理器,那么bx_general_registers值为16,否则值为8。64位时通用寄存器分别是rax、rcx、rdx、rbx、rsp、rbp、rsi、rdi、r8r15;32位时没有r8r15 。bit64u rip; bit32u eip;分别是64位模式和32位模式下的指令指示器。bx_segment_reg_t sregs6;bx_segment_reg_t是表示段寄存器的结构,sregs6是表示了6个段寄存器的数组。分别是es、cs、ss、ds、fs和gs。bx_mem_c *mem;mem是指向这个cpu所使用的内存的指针 。bx_local_apic_

23、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_l

24、oop(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,unsi

25、gned remain)这两个函数用于对指令进行译码,前者按指令长度32位译码,后者按64位译码,参数意义分别是指令的物理地址,空白指令结构和指令长度的最大字节数void boundaryfetch(bit8u *fetchptr, unsigned remaininginpage, bxinstruction_c *i)x86的最长指令可以达到15个字节,因此指令可能出现跨页,此时prefetch()+ fetchdecode()/fetchdecode64()失败,必须调用boundaryfetch()函数进行跨页取指译码。4.3 bx_cpu_c 类对cpu工作流程的简易描述cpu工作流

26、程见图表7 图表 6 cpu工作流程示意图 prefetch()函数(指令预取)void bx_cpu_c:prefetch(void) 计算laddr /指令所在的线性地址 计算paddr /经过地址翻译得到的指令的物理地址 计算laddrpageoffset0 /指令所在的线性页(虚页)的基地址 计算eippageoffset0 /rip - (laddr - laddrpageoffset0),指令所在页基 地址相对于cs的偏移 计算eippagebias / - eippageoffset0 计算eippagewindowsize /页大小,值为4096; 计算paddra20page

27、 /paddr & 0xfffff000,指令所在的物理页的基地址 计算eipfetchptr /通过gethostmemaddr()计算得到的指令所在页在主机(真实机器)上的基地址所谓指令预取,就是计算指令的物理地址和其他相关信息,为后面的指令译码作准备。表8是其功能流程: 图表 7指令预取功能流程图fetchdecode()函数(指令译码):指令的结构用一个类指令结构bxinstruction_c 来表示,它的两个主要成员函数下:void (bx_cpu_c:*resolvemodrm) (bxinstruction_c *) bx_cpp_attrregparmn(1); /获取指令的类

28、型,类型是由bochs定义的void (bx_cpu_c:*execute)(bxinstruction_c *); /指令对应的执行函数指针基本指令放在一个数组中: static bxopcodeinfo_t bxopcodeinfo512*2 第0511项: 16bit mode 第5121023项: 32bit mode (其中包括了fpu,x86-64,3dnow,sse等指令入口)boundaryfetch()函数(跨页边界取指)void boundaryfetch(bit8u *fetchptr, unsigned remaininginpage, bxinstruction_c

29、*i)因为指令跨页,不能将指令的首地址作为参数传给fetchdecode()/fetchdecode64(),因此设立临时变量fetchbuffer,用以保存在两页中取出的共15个字节,并将fetchbuffer作为译码的参数。指令的最大长度为15字节,但具体每条指令的长度是不定的,在本次取指过程中为了实现跨页移动了rip,因此返回之前必须将其复原,函数返回以后,在cpu_loop()里面,会根据实际的指令长度移动rip。4.4 基本内存系统主要文件:memory.h, memory.cc,misc_mem.cc 主要类:bx_mem_c 内存块基指针:bit8u *actual_vector

30、;/实际分配的内存块指针 bit8u *vector; /经过对齐处理(4k大小整数倍 )内存大小size_t len; /以字节为单位size_t megabytes; /以兆字节为单位 内存空间的分配: alloc_vector_aligned (size_t bytes, size_t alignment) 图 4-3 内存空间分配图 图表 8内存空间分布图x86处理器的分页机制(相关寄器):cr0:当cr0pg(表示cr0寄存器的pg位,下同)1时,启用分页机制。cr3:x86处理器通常使用多级页表,cr3中存放着最高级页表的基地址。cr4:当cr4pse1时,使用4m/2m大小的页面

31、,否则使用4k大小的页面;cr4pae1时,启用pae模式(支持36位地址空间的物理内存)。4.4内存的访问 bochs中主要由下面三个函数处理内存的读写操作:void access_linear(bx_address laddr, unsigned length, unsigned pl, unsigned rw, void *data)void readphysicalpage(bx_cpu_c *cpu, bit32u addr, unsigned len, void *data)void writephysicalpage(bx_cpu_c *cpu, bit32u addr, uns

32、igned len, void *data)access_linear()函数的作用是在以指定的(线性)地址为起始地址处读/写一块数据。参数意义分别是,访问的起始线性地址,读或写的数据长度,特权级别,操作方式(读、写)和数据缓冲区。readphysicalpage() 和writephysicalpage()的功能是读/写主机上的内存页。access_linear()函数struct bx_address rm_addr; bit32u paddress1; /数据块在第一页的起始地址 bit32u paddress2; /数据块在第二页的起始地址 bit32u len1; /数据块在第一页的

33、长度 bit32u len2; /数据块在第二页的长度 bx_ptr_equiv_t pages; /数据块所跨越的页数(1或2) address_xlation;address_xlation是类bx_cpu_c的一个成员,包含了经过翻译的地址结构和相关信息,函数access_linear()中的参数length总是小于页面的大小,但是数据块的起始地址可能在页中的任意位置,所以数据块可能在一页内,也可能跨越两页,但不会更多access_linear()函数void access_linear(bx_address laddr, unsigned length, unsigned pl, un

34、signed rw, void *data) if (bx_cpu_this_ptr cr0.pg) /启用分页 if ( (pageoffset + length) 20; 如果是特殊内存段,用memory_handler完成读操作#if bx_support_apic local_apic-read (addr, data, len) / ioapic-read (addr, data, len); #endifread_one: if ( (a20addr & 0xfff80000) != 0x00080000 ) *data_ptr = vectora20addr;inc_one: i

35、f (len = 1) return; len-; a20addr+;#ifdef bx_little_endian data_ptr+;#else / bx_big_endian data_ptr-;#endif goto read_one; . writephysicalpage()void writephysicalpage(bx_cpu_c *cpu, bit32u addr, unsigned len, void *data) a20addr = a20addr(addr); struct memory_handler_struct *memory_handler = memory_

36、handlersa20addr 20; 如果是特殊内存段,用memory_handler完成读操作#if bx_support_apic local_apic-write (a20addr, (bit32u *)data, len); / ioapic-write (a20addr, (bit32u *)data, len);#endifwrite_one: if ( (a20addr & 0xfff80000) != 0x00080000 ) vectora20addr = *data_ptr;inc_one: if (len = 1) return; len-; a20addr+;#ifd

37、ef bx_little_endian data_ptr+;#else / bx_big_endian data_ptr-;#endif goto write_one; . 4.5 bochs 时钟系统bochs的时钟系统主要由pc_system.cc这个文件描述在bx_pc_system_c这个类中,定义了时钟系统的各种变量和功能函数。timerbx_max_timers宏:bx_max_timers 定义为 64,timer数组所能注册的最大计时器为64。这个数组注册了所有的外设,并且存储了当时间片到达时对应的处理函数。struct bx_bool inuse; / 计时器是否正在使用 b

38、it64u period; / 两次时钟中断的间隔指令数 bit64u timetofire; / .下一次产生时钟中断的指令数 bx_bool active; / 0=非运行状态, 1=正在运行状态. bx_bool continuous; / 0=非持续型计时器, 1=持续性计时器 bx_timer_handler_t funct; / 产生时钟中断时的回调(中断处理)函数 void *this_ptr; / 回调函数所属的类实例#define bxmaxtimeridlen 32 / 计时器最大命名长度 char idbxmaxtimeridlen; / 计时器命名 一些重要变量:uns

39、igned numtimers (计时器的当前数量)unsigned triggeredtimer (当前将要处理时钟中断的计时器编号)bit32u currcountdown (所有运行计时器中的最小中断间隔指令数)bit64u tickstotal (总共已执行的指令数 )double m_ips (每秒执行的百万条指令数)计时器的注册:register_timer (void *this_ptr, void (*funct) (void *),bit32u useconds, bx_bool continuous, bx_bool active, const char *id)所有的硬件

40、在初始化时都会调用这个函数,把自己注册到timer数组之中。4.6 bochs中断系统中断结构如图表10所示: 图表 9 中断结构 irq信号的获取如图表11所示: 图表 10 irq获取irq信号的传递 (pic)如图表: 图表 11中断过程中断向量的接收 (local apic): nt apic_bus_deliver_interrupt(bit8u vector, bit8u dest, bit8u delivery_mode, bit8u dest_mode, bx_bool level, bx_bool trig_mode)中断判断: void bx_cpu_c:cpu_loop(

41、bit32s max_instr_count)中断处理: unsigned bx_cpu_c:handleasyncevent(void) bit8u bx_local_apic_c:acknowledge_int(void) 图表 12 中断流程图5 具体移植实现5.1 虚拟实验平台统一的器件模型 图表 13 器件模型演示图通过对不同的管脚施加信号后,调用bochs中的cpu库的程序来完成8088的简单功能,为了能直观的显示出来,加入了一个drawobject函数。5.2 cpu类的主要功能及实现方法 虚拟机bochs是一个庞大的工程,它包含了许多库,例如汇编库,反汇编库,cpu库,插槽库等

42、许多库,而我们所以要关心就是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_t

43、r 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_ins

44、tr_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与寄

45、存器之间取指令,译指令等一系列流水线过程都简化了,使cpu和寄存器整和在了一起,实现了其主要功能,当用户使用此仿真时容易理解,使得仿真时更加突出重点,减轻了仿真的设计实现难度。在工作的前期首先要了解bochs,由于bochs是一个巨大的工程,它由汇编库,反汇编库,cpu库,插槽库等许多库组成。在前面花了大量时间来研究研究后,使我们在后期的工作中有了明确的方向,主要通过修改boshs中的cpu_loop和插槽库。但是在后期工作遇到了很多困难,例如最难的是cpu的功能实现,cpu功能复杂,它包含函数相当多,各函数之间的调很多都不能很好的实现。在设计设计过程中还暴露出很多基础问题,例如对工具不能熟练

46、的掌握。通过这次毕业设计的编程,使我对bochs和8088cou有了新的认识,同时我也对vc+这一编程语言有了更深的了解,对以后的学习和工作都有很大的帮助。参考文献1 peter abel,ibm pc 汇编语言程序设计(第五版),人民邮电出版社发行,2002.9.12 孙鑫,余安萍,vc+深入详解,电子工业出版社,2006.063 stephen prata,c+ primer plus(第四版)中文版,人民邮电出版社,20054 steven holzner.visual c+ 6.0轻松进阶m.北京:电子工业出版社,2005。5 john e.swanke.visual c+mfc编程实

47、例m.北京:机械工业出版社,2005。6 张海棠.visual c+ 6.0编程指南m.北京:航空工业出版社,2002。7 马群生等 微计算机技术 清华大学出版社 2006.18 潘爱民等 visual c+ 技术内幕 清华大学出版社 2001.49 10 11 /projects/bochs-rfb/致 谢在整个系统的开发过程中,同事、老师和同学给了我很大的帮助。感谢我的指导老师王中科老师他在毕业设计期间,细心为我指导,给了我许多宝贵的意见。使我的论文更加规范,更加流畅。真心谢谢!还有我要感谢全体同学,他们的鼓励和指导让我受益非浅。他们为我提供了太多的技

48、术指导和实践机会。还要感谢理解,帮助,支持过我的各位朋友。最后向在百忙之中评审本文的各位专家、老师表示衷心的感谢。作者简介姓 名:冯坷欣 性别:男出生年月:1983-08-19 民族:汉e-mail:wisely731声 明本论文的工作是2007年2月至2007年6月在成都信息工程学院网络工程系完成的。文中不包含他人已经发表或撰写过的研究成果,也不包含为获得成都信息工程学院或其他教学机构的学位或证书而使用过的材料。除非另有说明,本文的工作是原始性工作。关于学位论文使用权和研究成果知识产权的说明本人完全了解成都信息工程学院有关保管使用学位论文的规定,其中包括:(1)学校有权保管并向有关部门递交学

49、位论文的原件与复印件。(2)学校可以采用影印、缩印或其他复制方式保存学位论文。(3)学校可以学术交流为目的复制、赠送和交换学位论文。(4)学校可允许学位论文被查阅或借阅。(5)学校可以公布学位论文的全部或部分内容(保密学位论文在解密后遵守此规定)。除非另有科研合同和其他法律文书的制约,本论文的科研成果属于成都信息工程学院。特此声明! 毕业设计(论文)简化的8088cpu逻辑功能的仿真实现论文作者姓名:申请学位专业:申请学位类别:指导教师姓名(职称):论文提交日期: 简化的8088cpu逻辑功能的仿真实现摘 要 “虚拟实验平台”主要采用以“软”代“硬”和“虚”、“实”结合的设计思路,强调实用性,以最大限度地仿真真实的实验环境。主要实现了“专用实验台”的虚拟化,将它“搬”到了“微机”的显示器上,而原有在微机上的实验操作环境和方法仍然保持不变。系统还提供必要的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论