一种51单片机处理器指令集虚拟化仿真方法转让专利

申请号 : CN202211114546.0

文献号 : CN115421862B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 贾张涛付修锋勉斌安恒李雅斯刘美佳孔祥炳金玉川安顺

申请人 : 北京计算机技术及应用研究所

摘要 :

本发明涉及一种51单片机处理器指令集虚拟化仿真方法,属于虚拟仿真领域。本发明通过对256条指令的仿真,提供51单片机嵌入式处理器软件的运行环境,为51单片机嵌入式处理器软件的开发提供支撑。本发明提出的方案,能够实现51单片机处理器的指令集仿真,仿真精度高,仿真执行效率高;本发明采用数组、链表等实现寄存器、内存的仿真,能够完成仿真51单片机处理器。

权利要求 :

1.一种51单片机处理器指令集虚拟化仿真方法,其特征在于,该方法包括如下步骤:S1、51单片机目标文件解析

打开51单片机编译后的可执行文件*.Hex,Hex文件的每一行中都包含了一个hex记录,这些记录是由一些代表机器语言代码和常量的16进制数据组成;解析Hex文件信息,获取可执行文件中的代码段;

S2、51单片机内存仿真及代码加载

采用数组的方式对51单片机内存进行仿真,记为C51‑Vmemory,并加载代码段;

S3、51单片机寄存器仿真

通过数组模拟寄存器,通过数组操作模拟寄存器读写操作,实现寄存器的模拟;

S4、51单片机指令描述

每条指令Instruction有一个唯一的表示,51单片机指令长度非固定长度,共计256条;

S5、51单片机读取指令

根据程序计数器PC(ProgramCount)的值,从51单片机仿真内存C51‑Vmemory中读取指令Instruction,获取当前PC对应的指令Instruction;

S6、51单片机指令译码

根据读取的指令Instruction,取Instruction的高8位,该高8位为指令的指令码Opcode,每个数值对应一条指令;

S7、51单片机指令翻译

对51单片机指令集进行功能翻译,并对每条指令的相应的地址、寄存器进行操作模拟,保证运行的内存、寄存器保持一致;并将每个指令对应的指令翻译函数名称存储到指令翻译译码数组中;

S8、51单片机指令执行

根据指令数量,进行循环取指、译码、指令翻译,并根据函数指针,执行指令操作;连续仿真,直到完成所有指令执行,实现针对51单片机的处理器指令集仿真。

2.如权利要求1所述的51单片机处理器指令集虚拟化仿真方法,其特征在于,所述步骤S1具体包括:S11、打开51单片机编译后的可执行文件*.Hex,读取文件信息;

S12、Hex文件的每一行中都包含了一个hex记录,这些记录是由一些代表机器语言代码和常量的16进制数据组成,解析可执行文件*.Hex中的文件信息,获取可执行文件中的代码段。

3.如权利要求2所述的51单片机处理器指令集虚拟化仿真方法,其特征在于,所述步骤S2具体包括:S21、51单片机RAM大小为256Byte、ROM大小为64KByte、XDATA大小为64KByte,采用数组的方式对51单片机内存进行仿真,记为C51‑Vmemory,包括RAM[256]、ROM[65536]和XDATA[65536],RAM[256]对应256Byte内存块大小,包含寄存器,ROM[65536]对应64KByte内存块大小,XDATA[65536]对应64KByte内存块大小;

S22、将S1获取的代码段,写入到51单片机芯片仿真内存C51‑Vmemory中,并根据代码段的大小,维护整个仿真内存结构。

4.如权利要求3所述的51单片机处理器指令集虚拟化仿真方法,其特征在于,所述步骤S3具体包括:S31、51单片机芯片RAM中包含256个可用寄存器,通过C51‑Vmemory中的RAM描述51单片机的256个寄存器,实现寄存器的模拟;

S32、通过访问C51‑Vmemory中的RAM数组,对相应的寄存器进行操作模拟51单片机的寄存器操作,实现对51单片机的寄存器仿真。

5.如权利要求4所述的51单片机处理器指令集虚拟化仿真方法,其特征在于,所述寄存器包括:B、ACC、PSW、TH2*、TL2*、RCAP2H*、RCAP2L*、T2CON*、IP、P3、IE、P2、SBUF、SCON、P1、TH1、TH0、TL1、TL0、TMOD、TCON、DPH、DPL、SP、P0和PCON。

6.如权利要求4所述的51单片机处理器指令集虚拟化仿真方法,其特征在于,所述步骤S5具体包括:根据程序计数器PC(ProgramCount)的值,从S2维护的C51‑Vmemory中ROM[65536]数组中读取指令Instruction。

7.如权利要求6所述的51单片机处理器指令集虚拟化仿真方法,其特征在于,所述步骤S4中,指令编码为0x00~0xFF,所述步骤S6中,Opcode取值范围为0~0xFF之间。

8.如权利要求1‑7任一项所述的51单片机处理器指令集虚拟化仿真方法,其特征在于,所述步骤S7具体包括:S71、对51单片机指令集进行功能翻译,并对相应的地址、寄存器进行操作模拟,保证硬件处理器和虚拟仿真处理器的内存、寄存器保持一致;

S72、定义翻译函数描述结构体Instruction‑desc‑to‑exec,实现指令码与指令翻译函数之间的关联;

S73、翻译51单片机的256条指令,并将函数指针存储到Instruction‑desc‑to‑execC51InstructionInterp[256]数组中;

S74、根据S6计算出的Opcode,获得该指令对应的函数中指针。

9.如权利要求8所述的51单片机处理器指令集虚拟化仿真方法,其特征在于,翻译函数描述结构体Instruction‑desc‑to‑exec包括指令码opcode、指令名称instruction_name、指令长度instruction_len和指令操作函数指针。

10.如权利要求8所述的51单片机处理器指令集虚拟化仿真方法,其特征在于,所述步骤S8具体包括:S81、构建51单片机的仿真框架,根据指令数量,进行循环取指、译码、指令翻译,并根据函数指针,执行指令操作;

S82、连续仿真,直到完成所有指令执行,实现针对51单片机的处理器指令集仿真。

说明书 :

一种51单片机处理器指令集虚拟化仿真方法

技术领域

[0001] 本发明属于虚拟仿真领域,具体涉及一种51单片机处理器指令集虚拟化仿真方法。

背景技术

[0002] 指令集仿真是处理器虚拟化技术最重要的支撑技术,指令集仿真允许特定指令集上的软件运行在另一类异构的指令集上。在指令集层次上实现虚拟化,实际上就是将某个硬件平台上的二进制代码转换为另一个硬件平台上的二进制代码,从而实现不同指令集间的兼容,这一技术也被称为二进制翻译。虚拟化技术实现有2种主要方式:解释执行、动态二进制翻译。
[0003] 解释器对源二进制代码逐条进行分析,根据译码结果即指令类型,分解相应的解释例程执行。解释例程在一个由软件维护的源体系结构(包括各种结构寄存器、内存状态等)上用等价的一条或多条目标指令来模拟源指令的执行,获得和源指令同样的执行效果。解释器工作过程主要包括“取指令—>分析指令—>完成指令所需的操作—>修改处理器状态”等步骤,如此循环。如图1所示。
[0004] 基于解释执行的仿真器在主机中维护一个精确的处理器数据结构,具有很高的仿真精度,可以实现精确的寄存器、存储器、流水线,除了模拟源程序的功能外,可以得到精确的性能指标,如每条指令在流水线中的时钟周期,堆栈模拟等。
[0005] 但是精确的解释执行方案存在仿真效率低下的问题,本发明基于解释执行技术方案,提出了快速解释执行的仿真方案,实现仿真效率的提升。

发明内容

[0006] (一)要解决的技术问题
[0007] 本发明要解决的技术问题是如何提供一种51单片机处理器指令集虚拟化仿真方法,以解决精确的解释执行方案存在仿真效率低下的问题。
[0008] (二)技术方案
[0009] 为了解决上述技术问题,本发明提出一种51单片机处理器指令集虚拟化仿真方法,该方法包括如下步骤:
[0010] S1、51单片机目标文件解析
[0011] 打开51单片机编译后的可执行文件*.Hex,Hex文件的每一行中都包含了一个hex记录,这些记录是由一些代表机器语言代码和常量的16进制数据组成;解析Hex文件信息,获取可执行文件中的代码段;
[0012] S2、51单片机内存仿真及代码加载
[0013] 采用数组的方式对51单片机内存进行仿真,记为C51‑Vmemory,并加载代码段;
[0014] S3、51单片机寄存器仿真
[0015] 通过数组模拟寄存器,通过数组操作模拟寄存器读写操作,实现寄存器的模拟;
[0016] S4、51单片机指令描述
[0017] 每条指令Instruction有一个唯一的表示,51单片机指令长度非固定长度,共计256条;
[0018] S5、51单片机读取指令
[0019] 根据程序计数器PC(Program Count)的值,从51单片机仿真内存C51‑Vmemory中读取指令Instruction,获取当前PC对应的指令Instruction;
[0020] S6、51单片机指令译码
[0021] 根据读取的指令Instruction,取Instruction的高8位,该字段为指令的指令码Opcode,每个数值对应一条指令;
[0022] S7、51单片机指令翻译
[0023] 对51单片机指令集进行功能翻译,并对每条指令的进行操作模拟,保证运行的内存、寄存器保持一致;并将每个指令对应的函数名称存储到指令翻译译码数组中,存储顺序与指令译码数组顺序保持一致;
[0024] S8、51单片机指令执行
[0025] 根据指令数量,进行循环取指、译码、指令翻译,并根据函数指针,执行指令操作;连续仿真,直到完成所有指令执行,实现针对51单片机的处理器指令集仿真。
[0026] 进一步地,所述步骤S1具体包括:
[0027] S11、打开51单片机编译后的可执行文件*.Hex,读取文件信息;
[0028] S12、Hex文件的每一行中都包含了一个hex记录,这些记录是由一些代表机器语言代码和常量的16进制数据组成。解析可执行文件*.Hex中的文件信息,获取可执行文件中的代码段。
[0029] 进一步地,所述步骤S2具体包括:
[0030] S21、51单片机RAM大小为256Byte、ROM大小为64K Byte、XDATA大小为64KByte,采用数组的方式对51单片机内存进行仿真,记为C51‑Vmemory,包括RAM[256]、ROM[65536]和XDATA[65536],RAM[256]对应256Byte内存块大小,包含寄存器,ROM[65536]对应64KByte内存块大小,XDATA[65536]对应64KByte内存块大小;
[0031] S22、将S1获取的代码段,写入到51单片机芯片仿真内存C51‑Vmemory中,并根据代码段的大小,维护整个仿真内存结构。
[0032] 进一步地,所述步骤S3具体包括:
[0033] S31、51单片机芯片RAM中包含256个可用寄存器,通过C51‑Vmemory中的RAM描述51单片机的256个寄存器,实现寄存器的模拟;
[0034] S32、通过访问C51‑Vmemory中的RAM数组,对相应的寄存器进行操作模拟51单片机的寄存器操作,实现对51单片机的寄存器仿真。
[0035] 进一步地,所述寄存器包括:B、ACC、PSW、TH2*、TL2*、RCAP2H*、RCAP2L*、T2CON*、IP、P3、IE、P2、SBUF、SCON、P1、TH1、TH0、TL1、TL0、TMOD、TCON、DPH、DPL、SP、P0和PCON。
[0036] 进一步地,所述步骤S5具体包括:根据程序计数器PC(Program Count)的值,从S2维护的C51‑Vmemory中ROM[65536]数组中读取指令Instruction。
[0037] 进一步地,所述步骤S4中,指令编码为0x00~0xFF,所述步骤S6中,Opcode取值范围为0~0xFF之间。
[0038] 进一步地,所述步骤S7具体包括:
[0039] S71、对51单片机指令集进行功能翻译,并对相应的地址、寄存器进行操作模拟,保证硬件处理器和虚拟仿真处理器的内存、寄存器保持一致;
[0040] S72、定义翻译函数描述结构体Instruction‑desc‑to‑exec,实现指令码与指令翻译函数之间的关联;
[0041] S73、翻译51单片机的256条指令,并将函数指针存储到Instruction‑desc‑to‑exec C51InstructionInterp[256]数组中;
[0042] S74、根据S6计算出的Opcode,获得该指令对应的函数中指针。
[0043] 进一步地,翻译函数描述结构体Instruction‑desc‑to‑exec包括指令码opcode、指令名称instruction_name、指令长度instruction_len和指令操作函数指针。
[0044] 进一步地,所述步骤S8具体包括:
[0045] S81、构建51单片机的仿真框架,根据指令数量,进行循环取指、译码、指令翻译,并根据函数指针,执行指令操作;
[0046] S82、连续仿真,直到完成所有指令执行,实现针对51单片机的处理器指令集仿真。
[0047] (三)有益效果
[0048] 本发明提出一种51单片机处理器指令集虚拟化仿真方法,51单片机的指令集共计包含256条指令,本发明通过对256条指令的仿真,提供51单片机嵌入式处理器软件的运行环境,为51单片机嵌入式处理器软件的开发提供支撑。本发明提出的方案,能够实现51单片机处理器的指令集仿真,仿真精度高,仿真执行效率高;本发明采用数组、链表等实现寄存器、内存的仿真,能够完成仿真51单片机处理器。

附图说明

[0049] 图1为现有技术中的解释执行技术原理。

具体实施方式

[0050] 为使本发明的目的、内容和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
[0051] 为嵌入式处理软件提供虚拟化的运行环境,本发明提出一种基于解释执行的51单片机处理器指令集虚拟化仿真方法,51单片机的指令集共计包含256条指令,通过对256条指令的仿真,提供51单片机嵌入式处理器软件的运行环境,为51单片机嵌入式处理器软件的开发提供支撑。51单片机基本情况如下:
[0052] 51单片机,英文全称:Single Chip MicroComputer。又名:MCU,微控制单元。英文全称:Micro Controller Unit。51单片机是对所有兼容Intel8031指令系统的单片机的统称,该系列单片机的始祖是Intel的8004单片机。主要产品系列如下:
[0053] *Intel(英特尔)的:8031、8051、8751,8032、8052、8752等,前面带“MCS”,全称:Micro Controller System;*ATMEL(艾德梅尔)的:89C51、89C52、89C2051,89S51(RC),
89S52(RC)等,前面带“AT”;*Philips(飞利浦)、华邦、Dallas(达拉斯)、Siemens(西门子)等公司的许多产品;STC(国产宏晶)单片机:89C51、89C52、89C516、90C516等众多品牌,前面带“STC”,全称:SysTem Chip。
[0054] 本发明的方法包括如下步骤:
[0055] S1、51单片机目标文件解析
[0056] 打开51单片机编译后的可执行文件*.Hex,Hex文件格式是可以烧写到单片机中,被单片机执行的一种文件格式,Hex文件是遵循Hex文件格式的ASCII文本文件。Hex文件的每一行中都包含了一个hex记录。这些记录是由一些代表机器语言代码和常量的16进制数据组成。解析Hex文件信息,获取可执行文件中的代码段。
[0057] S2、51单片机内存仿真及代码加载
[0058] 51单片机RAM大小为256Byte、ROM大小为64KByte、XDATA大小为64KByte,由于51单片机内存较小,本发明采用数组的方式进行模拟,记为C51‑Vmemory,并加载代码段。
[0059] S3、51单片机寄存器仿真
[0060] 51单片机芯片RAM中包含256个可用寄存器,本发明通过数组模拟寄存器,通过数组操作模拟寄存器读写操作,实现寄存器的模拟,定义C51_RAM[256]数组描述C51寄存器,其中C51_RAM[87H]表示寄存器PCON、……、C51_RAM[F0H]表示寄存器B(详见表1)。
[0061] S4、51单片机指令描述
[0062] 每条指令Instruction有一个唯一的表示,51单片机指令长度非固定长度,共计256条,指令编码0x00~0xFF。
[0063] S5、51单片机读取指令
[0064] 根据程序计数器PC(Program Count)的值,从51单片机仿真内存C51‑Vmemory中读取指令Instruction,获取当前PC对应的指令Instruction;
[0065] S6、51单片机指令译码
[0066] 根据读取的指令Instruction,取Instruction的高8位,该字段为指令的指令码Opcode,Opcode取值范围为0~0xFF之间,每个数值对应一条指令。
[0067] S7、51单片机指令翻译
[0068] 对51单片机指令集进行功能翻译,并对每条指令的进行操作模拟,保证运行的内存、寄存器保持一致;并将每个指令对应的函数名称存储到指令翻译译码数组中,存储顺序与指令译码数组顺序保持一致;
[0069] S8、51单片机指令执行
[0070] 根据指令数量,进行循环取指、译码、指令翻译,并根据函数指针,执行指令操作;连续仿真,直到完成所有指令执行,实现针对51单片机的处理器指令集仿真。
[0071] 实施例1
[0072] 本发明提出一种基于解释执行的51单片机处理器虚拟化仿真技术方案,51单片机是德州仪器研制的一款嵌入式处理器,主频150MHz、闪存大小为256KB、RAM大小为36KB、执行效率150MIPS,本发明通过指令集仿真,实现51单片机的虚拟化仿真。
[0073] S1、51单片机目标文件解析
[0074] S11、打开51单片机编译后的可执行文件*.Hex,读取文件信息;
[0075] S12、Hex文件格式是可以烧写到单片机中,被单片机执行的一种文件格式,Hex文件是遵循Hex文件格式的ASCII文本文件。Hex文件的每一行中都包含了一个hex记录。这些记录是由一些代表机器语言代码和常量的16进制数据组成。解析可执行文件*.Hex中的文件信息,获取可执行文件中的代码段。
[0076] S2、51单片机内存仿真及代码加载
[0077] S21、51单片机RAM大小为256Byte、ROM大小为64KByte、XDATA大小为64KByte,由于51单片机内存较小,本发明采用数组的方式对51单片机内存进行仿真,记为C51‑Vmemory,包括RAM[256]、ROM[65536]和XDATA[65536],RAM[256]对应256Byte内存块大小,包含寄存器,ROM[65536]对应64K Byte内存块大小,XDATA[65536]对应64K Byte内存块大小。
[0078] C51‑Vmemory{
[0079] UnsignedcharRAM[256];/*对应256Byte内存块大小,包含寄存器*/
[0080] UnsignedcharROM[65536];/*对应64KByte内存块大小*/
[0081] UnsignedcharXDATA[65536];/*对应64KByte内存块大小*/
[0082] }
[0083] S22、将S1获取的代码段,写入到51单片机芯片仿真内存C51‑Vmemory中,并根据代码段的大小,维护整个仿真内存结构。
[0084] S3、51单片机寄存器仿真
[0085] S31、51单片机芯片RAM中包含256个可用寄存器,主要寄存器功能及位置分布如下:
[0086] 表1寄存器位置分布表
[0087]
[0088]
[0089] 本发明通过数组模拟寄存器,实现寄存器的模拟,C51‑Vmemory中的RAM数组描述51单片机的256个寄存器,其中RAM[87H]表示寄存器PCON、……、RAM[F0H]表示寄存器B。
[0090] S32、通过访问C51‑Vmemory中的RAM数组,对相应的寄存器进行操作模拟51单片机的寄存器操作,实现对51单片机的寄存器仿真。
[0091] S4、51单片机指令描述
[0092] 每条指令Instruction有一个唯一的表示,51单片机指令长度非固定长度,共计256条,指令编码0x00~0xFF。
[0093] S5、51单片机读取指令
[0094] 根据程序计数器PC(Program Count)的值,从S2维护的C51‑Vmemory中ROM[65536]数组中读取指令Instruction;
[0095] S6、51单片机指令译码
[0096] 根据S5读取的指令Instruction,取Instruction的高8位,该字段为指令的指令码Opcode,Opcode取值范围为0~0xFF之间,每个数值对应一条指令。
[0097] S7、51单片机指令翻译
[0098] S71、对51单片机指令集进行功能翻译,并对相应的地址、寄存器进行操作模拟,保证硬件处理器和虚拟仿真处理器的内存、寄存器保持一致;
[0099] S72、为方便表述翻译结构,定义翻译函数描述结构体Instruction‑desc‑to‑exec,实现指令码与指令翻译函数之间的关联,翻译函数描述结构体Instruction‑desc‑to‑exec包括指令码opcode、指令名称instruction_name、指令长度instruction_len和指令操作函数指针。
[0100] 翻译函数描述结构体如下:
[0101] Instruction‑desc‑to‑exec{
[0102] Unsignedintopcode;/*指令opcode*/
[0103] Char*instruction_name;/*指令名称*/
[0104] Unsignedcharinstruction_len;/*指令长度*/
[0105] (*instruction_ptr)(void);/*指令操作函数指针*/
[0106] }
[0107] S73、翻译51单片机的256条指令,并将函数指针存储到Instruction‑desc‑to‑execC51InstructionInterp[256]数组中;
[0108] S74、根据S6计算出的Opcode,可获得该指令对应的函数中指针;
[0109] S8、51单片机指令执行
[0110] S81、构建51单片机的仿真框架,根据指令数量,进行循环取指、译码、指令翻译,并根据函数指针,执行指令操作;
[0111] S82、连续仿真,直到完成所有指令执行,实现针对51单片机的处理器指令集仿真。
[0112] 本发明提出的方案,能够实现51单片机处理器的指令集仿真,仿真精度高,仿真执行效率高;本发明采用数组、链表等实现寄存器、内存的仿真,能够完成仿真51单片机处理器。
[0113] 以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。