引言
在进行嵌入式系统开发时,通常是在宿主机上通过交叉编译方式生成目标机平台的二进制代码,然后将其写入目标机中运行,这种开发方法的一个缺点是不易调试生成的目标代码逻辑,因此,目前许多交叉编译工具都具有在宿主机上调试源代码的功能。要让目标机平台的二进制代码能够在宿主机上运行,必须提供一个虚拟的能够执行目标机指令的系统。本文以80C51单片机为目标机,基于X86平台的PC机为宿主机,给出了一种在宿主机上构造虚拟目标机指令执行系统的方法。
1 虚拟指令执行系统简介
本文所述的80C51虚拟指令执行系统是指用软件来模拟80C51指令的执行过程和执行效果,它主要由虚拟指令执行器和虚拟存储器组成。虚拟指令执行器是虚拟指令执行系统的核心模块,它将指令的执行过程分为取指令、分析指令和执行指令三个阶段,模拟这三个阶段的 *** 作并虚拟出指令的执行效果。虚拟存储系统是虚拟指令执行系统必不可少的模块,它反映着虚拟指令执行器执行指令的效果,本文以80C51体系中存储器的结构为依据,虚拟出存储器空间和寄存器,并提供了虚拟指令执行器访问虚拟存储器的接口。
图1是虚拟80C51指令执行系统的总体结构图,同时图1也显示了系统运行的三个基本过程:
(1)加载二进制文件到虚拟存储器的ROM中
(2)虚拟指令执行器周期性地从虚拟存储器的ROM中取指令、分析指令并且执行指令
(3)指令在执行过程中通过读写虚拟存储器中的内存和寄存器来反映指令执行效果
显然,上述过程是围绕着虚拟指令执行器和虚拟存储器进行的。
2 虚拟存储器的设计与实现
加载过程和虚拟指令执行器都依赖于虚拟存储器,因此先介绍虚拟存储器的实现是必要的。从访问的角度分析,寄存器和存储器具有同样的属性,可以使用类似的实现方法虚拟它们。本文虚拟存储器的范围包括虚拟的存储空间和寄存器。
2.1 虚拟80C51存储空间
80C51的存储空间除了有ROM和RAM之分,还有片内和片外之分。80C51指令在执行的时候访问的数据可以存在于以下四种类型的存储单元中:片内ROM,片外ROM,片内RAM,片外RAM,它们的地址空间见表1。
各个存储空间的容量都较小,可以通过开辟相应大小的不同数组来虚拟存储空间:
虚拟存储器除了要虚拟出存储空间,还要提供访问的接口:读存储单元和写存储单元。在读写存储单元时需要指出存储单元的类型。
使用这两个接口,虚拟指令执行器在执行指令时可以方便地访问虚拟存储器。
2.2 虚拟80C51寄存器
80C51的寄存器可以分为三类:特殊寄存器(SFR),工作寄存器(R0~R7),程序计数器(PC),虚拟系统对这三种寄存器有不同的虚拟方式和访问方式。
1)特殊寄存器的虚拟和访问
80C51的特殊寄存器的地址空间范围是0x80~0xFF,每一个特殊寄存器在这个地址空间中有一个确定的地址,从虚拟角度可以认为特殊寄存器和RAM具有类似的访问特点,因此可以使用虚拟存储器的方法来虚拟特殊寄存器:
这样,可以使用虚拟存储器提供的读写接口来访问特殊寄存器。
2)工作寄存器的虚拟和访问
不同于特殊寄存器,工作寄存器R0~R7的地址在指令执行过程是不确定的。它们的地址由特殊寄存器PSW中的RS1位和RS0位的值决定,其物理地址占用片内RAM的地址空间,见表2。图2给出了访问工作寄存器Rn的流程。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)