掌桥专利:专业的专利平台
掌桥专利
首页

一种指令集模拟器利用功能库仿真的方法及装置

文献发布时间:2023-06-19 09:57:26


一种指令集模拟器利用功能库仿真的方法及装置

技术领域

本发明涉及指令集模拟器仿真技术领域,特别是一种指令集模拟器利用功能库仿真的方法及装置。

背景技术

嵌入式指令集模拟器仿真技术,通常用于软件的测试与调试,是保证软件可靠性必不可少的有效手段。使用指令集模拟器进行仿真测试的目的是发现软件存在的错误,软件仿真调试的目的是快速定位错误。所以模拟器仿真结果正确性和仿真运行的速度是十分重要的。

现有的指令集模拟器大多采用逐条指令译码执行的过程。这种仿真的处理方式在进行复杂算法运算时,会按照复杂算法的指令集处理过程,逐条进行译码、仿真。这种仿真模式在面对需要大量高精度指令集仿真的情况下,就会暴露出弊端。复杂算法需要大量指令集的仿真处理,如果每条指令都需要通过译码和仿真的过程,这就会极大的降低模拟器的仿真效率。指令集的仿真可能会由于平台的差异、功能不完善等原因存在计算精度误差。在处理复杂算法时往往使用大量的高精度的浮点指令,但由于计算机仿真浮点指令可能存在精度误差,会导致精度误差不断累计,从而影响计算结果。用于被仿真测试的目标码软件有时会涉及动态调用外部库函数的情况,这使得指令集模拟器无法对目标码的外部库函数进行仿真。

发明内容

本发明解决的技术问题是:克服现有技术的不足,提供了一种指令集模拟器利用功能库仿真的方法及装置。

为了解决上述技术问题,本发明实施例提供了一种指令集模拟器利用功能库仿真的方法,包括:

获取目标码中需要利用功能库进行仿真的目标码函数名,及所述目标码函数名对应的功能库函数名;

调用目标码解析软件对所述目标码进行解析,确定所述目标码函数名对应的目标函数入口地址;

根据所述目标码函数名和所述目标函数入口地址,生成函数地址信息对应表,并将所述函数地址信息对应表发送至指令模拟器;

通过所述指令模拟器根据所述功能库函数名,利用功能库函数进行仿真,以得到仿真结果。

可选地,所述调用目标码解析软件对所述目标码进行解析,确定所述目标码函数名对应的目标函数入口地址,包括:

调用所述目标码解析软件对所述目标码进行解析,得到所述目标码对应的全部函数名和函数入口地址;

调用所述目标码解析软件获取所述目标函数名对应的目标函数入口地址。

可选地,所述通过所述指令模拟器根据所述功能库函数名,利用功能库函数进行仿真,以得到仿真结果,包括:

通过所述指令模拟器加载所述功能库函数名对应的功能库函数;

在所述指令模拟器进行译码解析的过程中,判断跳转指令的目的地址是否为所述函数地址信息对应表中的目标函数入口地址;

在所述跳转指令的目的地址为所述目标函数入口地址的情况下,根据所述跳转指令在函数地址信息表中对应的功能库函数,并跳转至所述功能库函数;

读取当前功能库函数执行所需相关寄存器的数据,并将数据传入功能库函数中进行功能仿真,以得到仿真结果。

可选地,在所述判断跳转指令的目的地址是否为所述函数地址信息对应表中的目标函数入口地址之后,还包括:

在所述跳转指令的目的地址为非目标函数入口地址时,按照普通跳转指令集功能处理。

可选地,在所述通过所述指令模拟器根据所述功能库函数名,利用功能库函数进行仿真,以得到仿真结果之后,还包括:

将所述仿真结果保存至寄存器或内存中;

对所述跳转指令的当前运行状态进行设置;

通过所述指令模拟器返回至目标码函数的下一条指令的地址,并继续进行后续仿真。

为了解决上述技术问题,本发明实施例还提供了一种指令集模拟器利用功能库仿真的装置,包括:

目标函数名获取模块,用于获取目标码中需要利用功能库进行仿真的目标码函数名,及所述目标码函数名对应的功能库函数名;

目标入口地址确定模块,用于调用目标码解析软件对所述目标码进行解析,确定所述目标码函数名对应的目标函数入口地址;

函数地址对应表生成模块,用于根据所述目标码函数名和所述目标函数入口地址,生成函数地址信息对应表,并将所述函数地址信息对应表发送至指令模拟器;

仿真结果获取模块,用于通过所述指令模拟器根据所述功能库函数名,利用功能库函数进行仿真,以得到仿真结果。

可选地,所述目标入口地址确定模块包括:

函数入口地址获取单元,用于调用所述目标码解析软件对所述目标码进行解析,得到所述目标码对应的全部函数名和函数入口地址;

目标入口地址获取单元,用于调用所述目标码解析软件获取所述目标函数名对应的目标函数入口地址。

可选地,所述仿真结果获取模块包括:

功能库函数加载单元,用于通过所述指令模拟器加载所述功能库函数名对应的功能库函数;

函数地址判断单元,用于在所述指令模拟器进行译码解析的过程中,判断跳转指令的目的地址是否为所述函数地址信息对应表中的目标函数入口地址;

功能库函数跳转单元,用于在所述跳转指令的目的地址为所述目标函数入口地址的情况下,根据所述跳转指令在函数地址信息表中对应的功能库函数,并跳转至所述功能库函数;

仿真结果获取单元,用于读取当前功能库函数执行所需相关寄存器的数据,并将数据传入功能库函数中进行功能仿真,以得到仿真结果。

可选地,还包括:

普通处理单元,用于在所述跳转指令的目的地址为非目标函数入口地址时,按照普通跳转指令集功能处理。

可选地,还包括:

仿真结果保存模块,用于将所述仿真结果保存至寄存器或内存中;

运行状态设置模块,用于对所述跳转指令的当前运行状态进行设置;

后续仿真进行模块,用于通过所述指令模拟器返回至目标码函数的下一条指令的地址,并继续进行后续仿真。

本发明与现有技术相比的优点在于:

本发明实施例通过目标码解析软件获取目标码中复杂算法函数和外部功能库函数的入口地址;然后模拟器在仿真过程中对当前运行指令进行判断,判断是否为跳转至目标码的复杂算法或外功能库的函数入口地址的指令,如果不是,则进行一般指令仿真;如果是,则利用对应的功能库完成目标码中相同的功能仿真。再根据仿真结果,对通用寄存器、状态寄存器、内存、运行周期等进行设置。当前指令功能仿真结束后,模拟器会跳转至被仿真函数的下一条指令位置,继续进行后续仿真,到此则完成了利用功能库仿真目标码函数的功能,解决了指令集模拟器调试、测试过程中仿真复杂算法效率较低、计算结果精度较差的问题,解决了对于目标码动态调用外部库函数时无法解析的问题。

附图说明

图1为本发明实施例提供的一种指令集模拟器利用功能库仿真的方法的步骤流程图;

图2为本发明实施例提供的一种指令集模拟器利用功能库仿真的装置的结构的示意图。

具体实施方式

实施例一

参照图1,示出了本发明实施例提供的一种指令集模拟器利用功能库仿真的方法的步骤流程图,如图1所示,该指令集模拟器利用功能库仿真的方法具体可以包括如下步骤:

步骤101:获取目标码中需要利用功能库进行仿真的目标码函数名,及所述目标码函数名对应的功能库函数名。

在本发明实施例中,目标码函数名是指需要利用功能库仿真的目标码函数的命名。

功能库函数名是指功能库中与目标码函数名匹配的函数名。

在需要进行目标码的功能仿真时,首先需要用户指明目标码中需要利用功能库进行仿真的函数名和与其对应的功能库函数名。目标码解析软件根据用户配置,保存需要利用功能库进行仿真的函数名和与其对应的功能库函数名,具体地,用户可通过写配置文件的方式让目标码解析软件读取配置信息。用户也可以调用函数接口将配置信息发送给目标码解析软件,然后目标码解析软件获取用户配置信息,保存需要利用功能库进行仿真的函数名。函数名信息以字符串形式被保存。

在获取目标码中需要利用功能库进行仿真的目标码函数名,及目标码函数名对应的功能库函数名之后,执行步骤102。

步骤102:调用目标码解析软件对所述目标码进行解析,确定所述目标码函数名对应的目标函数入口地址。

在获取目标码中需要利用功能库进行仿真的目标码函数名,及目标码函数名对应的功能库函数名之后,可以调用目标码解析软件对目标码进行解析,以确定出目标码函数名对应的目标函数入口地址,具体地,可以结合下述具体实现方式进行详细描述。

在本发明的一种具体实现方式中,上述步骤102可以包括:

子步骤A1:调用所述目标码解析软件对所述目标码进行解析,得到所述目标码对应的全部函数名和函数入口地址;

子步骤A2:调用所述目标码解析软件获取所述目标函数名对应的目标函数入口地址。

在本发明实施例中,在获取目标码中需要利用功能库进行仿真的目标码函数名之后,可以使用目标码解析软件对目标码进行解析。将获取目标码的所有函数名和与其对应的函数入口地址,目标码解析软件对照用户配置的函数名,提取目标码的功能函数名、目标码函数的入口地址、功能库的功能函数名。在调用目标码解析软件对目标码进行解析,确定出目标码函数名对应的目标函数入口地址之后,执行步骤103。

步骤103:根据所述目标码函数名和所述目标函数入口地址,生成函数地址信息对应表,并将所述函数地址信息对应表发送至指令模拟器。

在确定出目标码函数名对应的目标码函数入口地址之后,可以根据目标码函数名和目标函数入口地址,生成函数地址信息对应表,并将函数地址信息对应表发送至指令模拟器,具体地,可以由目标码解析软件根据目标函数名和目标函数入口地址形成函数地址信息对应表。函数地址信息对应表的形式如下表1所示:

表1:

在生成函数地址信息对应表之后,可以由目标码解析软件通过数据传输接口将函数地址信息对应表,进而,执行步骤104。

步骤104:通过所述指令模拟器根据所述功能库函数名,利用功能库函数进行仿真,以得到仿真结果。

在将函数地址信息对应表发送至指令模拟器之后,可以通过指令模拟器根据功能库函数名利用功能库函数进行仿真,以得到仿真结果,具体地,可以结合下述具体实现方式进行详细描述。

在本发明的另一种具体实现中,上述步骤104可以包括:

子步骤B1:通过所述指令模拟器加载所述功能库函数名对应的功能库函数;

子步骤B2:在所述指令模拟器进行译码解析的过程中,判断跳转指令的目的地址是否为所述函数地址信息对应表中的目标函数入口地址;

子步骤B3:在所述跳转指令的目的地址为所述目标函数入口地址的情况下,根据所述跳转指令在函数地址信息表中对应的功能库函数,并跳转至所述功能库函数;

子步骤B4:读取当前功能库函数执行所需相关寄存器的数据,并将数据传入功能库函数中进行功能仿真,以得到仿真结果。

在本发明实施例中,指令模拟器接收到函数地址信息对应表后,进行信息的存储和维护,用于仿真时查询。

STEP1:利用功能库进行仿真

(1)模拟器在初始化时,接收到由指令解析软件发送过来的函数地址信息对应表并进行存储。

(2)模拟器加载功能库,依照函数地址信息对应表,获取功能库的函数入口地址,用于功能库仿真时跳转至功能库函数。

(3)模拟器进行初始化加载目标码,会根据指令集规则对目标码的代码段进行译码解析。

(4)模拟器对指令逐条进行译码解析,在解析过程中判断当前指令是否为跳转指令。因为函数的跳转行为是通过跳转指令将程序指针指向函数入口地址。所以当遇到跳转指令时,有可能此处是一个函数跳转。若为非跳转指令则继续向下进行指令解析。

(5)若当前指令为跳转指令,则根据指令集规则解析跳转的目的地址。判断指令的跳转目的地址是否为函数地址信息表中的地址。如果不是,则按照一般跳转指令集功能处理。

(6)如果当前跳转指令在函数地址信息对应表中,则对该跳转指令进行标记并依照函数地址信息表记录对应的功能库函数的入口地址,用于跳转到对应的功能库中的功能函数。

(7)有些模拟器采用动态译码技术,会在仿真运行过程中进行动态译码。则在动态译码过程中进行(4)所描述的步骤。

(8)模拟器开始仿真运行过程中逐条运行指令集。当运行至跳转指令时会根据译码时的标记,判断是否利用功能库进行仿真。若为否,则按照指令集功能进行仿真。

(9)若此处指令需要利用功能库仿真,则读取到对应的功能库函数的入口地址。

(10)根据功能库函数的入口地址,跳转至功能库函数。

(11)根据解析规则获取执行目标码函数所需的状态寄存器、通用寄存器、内存的数据,记录数据并用于功能库函数进行功能仿真。

(12)根据指令集规则,记录用于保存功能库仿真结果的寄存器编号或内存地址。

(13)功能库函数进行仿真运行,此时摒弃指令集的逐条仿真,利用高效的、针对性的、专业的算法,完成与目标码函数相同的功能,保证数据精度的准确性。

STEP2:仿真结果及状态设置

(1)功能库仿真结束后,将仿真结果设置到对应的寄存器或内存上。

(2)根据指令集规则,对运行状态进行设置。

(3)模拟器返回到原先目标码函数的下一条指令集的位置,继续向后进行仿真。

按照上述三个步骤,即可实现指令集模拟器利用功能库仿真的方法。

实施例二

参照图2,示出了本发明实施例提供的一种指令集模拟器利用功能库仿真的装置的结构示意图,如图2所示,该指令集模拟器利用功能库仿真的装置具体可以包括如下模块:

目标函数名获取模块210,用于获取目标码中需要利用功能库进行仿真的目标码函数名,及所述目标码函数名对应的功能库函数名;

目标入口地址确定模块220,用于调用目标码解析软件对所述目标码进行解析,确定所述目标码函数名对应的目标函数入口地址;

函数地址对应表生成模块230,用于根据所述目标码函数名和所述目标函数入口地址,生成函数地址信息对应表,并将所述函数地址信息对应表发送至指令模拟器;

仿真结果获取模块240,用于通过所述指令模拟器根据所述功能库函数名,利用功能库函数进行仿真,以得到仿真结果。

可选地,所述目标入口地址确定模块包括:

函数入口地址获取单元,用于调用所述目标码解析软件对所述目标码进行解析,得到所述目标码对应的全部函数名和函数入口地址;

目标入口地址获取单元,用于调用所述目标码解析软件获取所述目标函数名对应的目标函数入口地址。

可选地,所述仿真结果获取模块包括:

功能库函数加载单元,用于通过所述指令模拟器加载所述功能库函数名对应的功能库函数;

函数地址判断单元,用于在所述指令模拟器进行译码解析的过程中,判断跳转指令的目的地址是否为所述函数地址信息对应表中的目标函数入口地址;

功能库函数跳转单元,用于在所述跳转指令的目的地址为所述目标函数入口地址的情况下,根据所述跳转指令在函数地址信息表中对应的功能库函数,并跳转至所述功能库函数;

仿真结果获取单元,用于读取当前功能库函数执行所需相关寄存器的数据,并将数据传入功能库函数中进行功能仿真,以得到仿真结果。

可选地,还包括:

普通处理单元,用于在所述跳转指令的目的地址为非目标函数入口地址时,按照普通跳转指令集功能处理。

可选地,还包括:

仿真结果保存模块,用于将所述仿真结果保存至寄存器或内存中;

运行状态设置模块,用于对所述跳转指令的当前运行状态进行设置;

后续仿真进行模块,用于通过所述指令模拟器返回至目标码函数的下一条指令的地址,并继续进行后续仿真。

本发明说明书中未作详细描述的内容属本领域技术人员的公知技术。

相关技术
  • 一种指令集模拟器利用功能库仿真的方法及装置
  • 基于模拟器的中央处理器指令集的功能测试自动实施方法
技术分类

06120112359835