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

二进制翻译方法、装置、电子设备及存储介质

文献发布时间:2024-04-18 19:58:21


二进制翻译方法、装置、电子设备及存储介质

技术领域

本发明涉及计算机技术领域,特别是涉及一种二进制翻译方法、一种二进制翻译装置、一种电子设备以及一种存储介质。

背景技术

二进制翻译可以将运行在一种体系结构平台的源程序转换为运行在另一种体系结构平台的目标程序。在二进制翻译的应用场景下,源程序运行的体系结构平台被称作GUEST(客户)平台,目标程序运行的体系结构平台被称作HOST(宿主)平台。由于宿主平台与客户平台的架构特性差异,宿主平台在对客户平台的指令进行翻译时,若指令对应的访存地址不满足宿主平台支持的对齐访问状态的要求,在宿主平台中则为非对齐访问状态。这样,就无法保证将客户平台的指令翻译到宿主平台后运行结果的一致性,进而影响源程序指令翻译的准确性。

发明内容

鉴于上述问题,提出了本发明实施例以便提供一种克服上述问题或者至少部分地解决上述问题的一种二进制翻译方法,以提高宿主平台对客户平台的目标指令进行翻译的准确性。

相应的,本发明实施例还提供了一种二进制翻译装置、一种电子设备以及一种存储介质,用以保证上述方法的实现及应用。

为了解决上述问题,本发明实施例公开了一种二进制翻译方法,应用于宿主平台,所述方法包括:

在对客户平台的目标指令进行翻译的情况下,基于目标掩码数据以及原始内存数据,确定第一目标数据;所述原始内存数据是基于所述目标指令指示的目标内存地址读取到的,所述目标掩码数据是基于所述原始内存数据确定的,所述原始内存数据中包含有效字段以及非有效字段,所述第一目标数据中包含所述非有效字段;

基于所述目标指令对应的计算语义,获取其有效字段经逻辑右移处理后的所述原始内存数据对应的计算结果,得到第一计算结果;所述第一计算结果中包含所述有效字段对应的目标字段,所述目标字段用于表征所述目标指令在所述客户平台运行时对应的真实计算结果;

基于其目标字段经逻辑左移处理后的所述第一计算结果以及所述第一目标数据,确定目标运算结果;所述目标运算结果包括所述目标字段以及所述非有效字段;

将所述目标运算结果存储至所述目标指令指示的指定内存地址。

可选地,所述方法还包括:

确定所述原始内存数据中有效字段对应的第一值位以及非有效字段对应的第二值位;

将所述原始内存数据中第一值位对应的字段内容填充为第一数值,以及,将所述原始内存数据中第二值位对应的字段内容填充为第二数值;

确定包含所述第一数值以及所述第二数值的原始内存数据为所述目标掩码数据。

可选地,所述基于目标掩码数据以及原始内存数据,确定第一目标数据,包括:

获取所述目标掩码数据,以及从所述目标指令指示的目标内存地址中获取原始内存数据;

对所述目标掩码数据以及所述原始内存数据进行逻辑与操作,得到第一目标数据;

所述第一目标数据中与所述第一值位对应的字段内容为所述第一数值,所述第一目标数据中与所述第二值位对应的字段内容为所述非有效字段。

可选地,所述基于所述目标指令对应的计算语义,获取其有效字段经逻辑右移处理后的所述原始内存数据对应的计算结果,得到第一计算结果,包括:

对所述原始内存数据中的有效字段进行逻辑右移,确定第二目标数据;所述第二目标数据的指定值位对应的字段内容为所述有效字段;

基于所述目标指令对应的计算语义,获取所述第二目标数据对应的计算结果,得到所述第一计算结果;所述第一计算结果的指定值位对应的字段内容为所述有效字段对应的目标字段。

可选地,所述基于其目标字段经逻辑左移处理后的所述第一计算结果以及所述第一目标数据,确定目标运算结果,包括:

对所述第一计算结果中的目标字段进行逻辑左移,并将所述第一计算结果的非目标字段替换为第一数值,得到第三目标数据;所述第三目标数据中的目标字段对应的值位与所述原始内存数据中有效字段对应的值位一致;

对所述第三目标数据以及所述第一目标数据执行逻辑或操作,得到所述目标运算结果。

可选地,在所述目标指令为原子指令的情况下,所述方法还包括:

基于所述原子指令,生成目标指令序列;

基于所述目标指令序列中的链接加载指令,从所述原子指令指示的目标内存地址中获取原始内存数据,并将所述原始内存数据分别存储至第一寄存器以及第二寄存器,得到第一内存数据以及第二内存数据;

所述第一内存数据用于进行计算,所述第二内存数据用于使得所述目标运算结果中的非有效字段保持不变。

可选地,所述将所述目标运算结果存储至所述原子指令指示的指定内存地址,包括:

基于所述目标指令序列中的条件存储指令,在检测到不存在其他访问目标内存地址的操作的情况下,将所述目标运算结果写入所述目标内存地址;

在检测到存在其他访问目标内存地址的操作的情况下,重新执行所述基于所述目标指令序列中的链接加载指令,从所述原子指令指示的目标内存地址中获取原始内存数据的操作。

本发明实施例还公开了一种二进制翻译装置,应用于宿主平台,包括:

第一确定模块,用于在对客户平台的目标指令进行翻译的情况下,基于目标掩码数据以及原始内存数据,确定第一目标数据;所述原始内存数据是基于所述目标指令指示的目标内存地址读取到的,所述目标掩码数据是基于所述原始内存数据确定的,所述原始内存数据中包含有效字段以及非有效字段,所述第一目标数据中包含所述非有效字段;

第一获取模块,用于基于所述目标指令对应的计算语义,获取其有效字段经逻辑右移处理后的所述原始内存数据对应的计算结果,得到第一计算结果;所述第一计算结果中包含所述有效字段对应的目标字段,所述目标字段用于表征所述目标指令在所述客户平台运行时对应的真实计算结果;

第二确定模块,用于基于其目标字段经逻辑左移处理后的所述第一计算结果以及所述第一目标数据,确定目标运算结果;所述目标运算结果包括所述目标字段以及所述非有效字段;

第一存储模块,用于将所述目标运算结果存储至所述目标指令指示的指定内存地址。

可选地,所述装置还包括:

第三确定模块,用于确定所述原始内存数据中有效字段对应的第一值位以及非有效字段对应的第二值位;

第一填充模块,用于将所述原始内存数据中第一值位对应的字段内容填充为第一数值,以及,将所述原始内存数据中第二值位对应的字段内容填充为第二数值;

第四确定模块,用于确定包含所述第一数值以及所述第二数值的原始内存数据为所述目标掩码数据。

可选地,所述第一确定模块,包括:

第一获取子模块,用于获取所述目标掩码数据,以及从所述目标指令指示的目标内存地址中获取原始内存数据;

第一处理模块,用于对所述目标掩码数据以及所述原始内存数据进行逻辑与操作,得到第一目标数据;

所述第一目标数据中与所述第一值位对应的字段内容为所述第一数值,所述第一目标数据中与所述第二值位对应的字段内容为所述非有效字段。

可选地,所述第一获取模块,包括:

第二处理模块,用于对所述原始内存数据中的有效字段进行逻辑右移,确定第二目标数据;所述第二目标数据的指定值位对应的字段内容为所述有效字段;

第二获取子模块,用于基于所述目标指令对应的计算语义,获取所述第二目标数据对应的计算结果,得到所述第一计算结果;所述第一计算结果的指定值位对应的字段内容为所述有效字段对应的目标字段。

可选地,所述第二确定模块,包括:

第三处理模块,用于对所述第一计算结果中的目标字段进行逻辑左移,并将所述第一计算结果的非目标字段替换为第一数值,得到第三目标数据;所述第三目标数据中的目标字段对应的值位与所述原始内存数据中有效字段对应的值位一致;

第四处理模块,用于对所述第三目标数据以及所述第一目标数据执行逻辑或操作,得到所述目标运算结果。

可选地,在所述目标指令为原子指令的情况下,所述装置还包括:

第一生成模块,用于基于所述原子指令,生成目标指令序列;

第二获取模块,用于基于所述目标指令序列中的链接加载指令,从所述原子指令指示的目标内存地址中获取原始内存数据,并将所述原始内存数据分别存储至第一寄存器以及第二寄存器,得到第一内存数据以及第二内存数据;

所述第一内存数据用于进行计算,所述第二内存数据用于使得所述目标运算结果中的非有效字段保持不变。

可选地,所述第一存储模块,包括:

第一存储子模块,用于基于所述目标指令序列中的条件存储指令,在检测到不存在其他访问目标内存地址的操作的情况下,将所述目标运算结果写入所述目标内存地址;

第二存储子模块,用于在检测到存在其他访问目标内存地址的操作的情况下,重新执行所述基于所述目标指令序列中的链接加载指令,从所述原子指令指示的目标内存地址中获取原始内存数据的操作。

本发明实施例还公开了一种电子设备包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于进行以下操作的指令:

在对客户平台的目标指令进行翻译的情况下,基于目标掩码数据以及原始内存数据,确定第一目标数据;所述原始内存数据是基于所述目标指令指示的目标内存地址读取到的,所述目标掩码数据是基于所述原始内存数据确定的,所述原始内存数据中包含有效字段以及非有效字段,所述第一目标数据中包含所述非有效字段;

基于所述目标指令对应的计算语义,获取其有效字段经逻辑右移处理后的所述原始内存数据对应的计算结果,得到第一计算结果;所述第一计算结果中包含所述有效字段对应的目标字段,所述目标字段用于表征所述目标指令在所述客户平台运行时对应的真实计算结果;

基于其目标字段经逻辑左移处理后的所述第一计算结果以及所述第一目标数据,确定目标运算结果;所述目标运算结果包括所述目标字段以及所述非有效字段;

将所述目标运算结果存储至所述目标指令指示的指定内存地址。

本发明实施例还公开了一种可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行本发明实施例中一个或多个所述的二进制翻译方法。

本发明实施例包括以下优点:

本发明实施例中,在对客户平台的目标指令进行翻译的情况下,基于目标掩码数据以及原始内存数据,确定第一目标数据,由于第一目标数据中包含的是原始内存数据中的非有效字段,可以为后续确保得到的目标运算结果中的非有效字段保持不变奠定了基础。并且由于内存数据在进行计算时是由低位向高位按位进行计算,通过对原始内存数据的有效字段进行逻辑右移,可以使得右移后的原始内存数据中的有效字段处于整个数据的低位,能够避免在运算时由于其他位数据的进位或借位影响计算结果的准确性,使得基于有效字段得到的目标字段即目标指令在客户平台运行时对应的真实计算结果。进一步地,通过对第一计算结果中的目标字段进行逻辑左移,可以将目标字段恢复至原有效字段的值位,并基于包含非有效字段的第一目标数据,确定出目标运算结果,相当于目标运算结果中不仅包含对有效字段进行计算得到的目标字段,也包含了未被改动的非有效字段,确保了宿主平台将客户平台的目标指令翻译后得到的运行结果与该目标指令在客户平台运行的运行结果的一致性,进而提高了宿主平台对不同架构的客户平台的目标指令进行翻译的准确性。

附图说明

图1是本发明的一种二进制翻译方法实施例的步骤流程图;

图2是本发明的另一种二进制翻译方法实施例的步骤流程图;

图3是本发明的一种二进制翻译装置实施例的结构框图;

图4是根据一示例性实施例示出的一种用于二进制翻译的终端的结构框图。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。

本发明实施例提供的二进制翻译方法可以解决二进制层面的程序跨指令集架构运行的问题,可以将一种指令集架构中的指令序列转化成另一种指令集架构中的指令序列。例如,可以将CISC指令集(比如X86)架构中的指令序列翻译成RISC指令集(比如MIPS、ARM、RISC-V、LoongArch)架构中的指令序列,反之亦然。而RISC指令集架构之间亦可以通过二进制翻译方法实现相互不兼容的指令集之间的程序的跨指集架构的运行。本发明实施例提供的二进制翻译方法可用于将程序从客户平台移植至宿主平台,即将一个软件系统从原有的指令集架构迁移到一个新的指令集架构,以丰富新的指令集架构的软件生态。进一步地,客户平台可以指原本运行源程序的机器。客户平台的处理器可以是基于第一指令集架构的处理器。该第一指令集架构例如可以是x86指令集架构,也可以是arm指令集架构(如arm64)等。源程序是基于第一指令集架构开发的软件程序,因此,该源程序可以在客户平台上正常运行。宿主平台可以指希望移植源程序,且与客户平台之间的指令集架构不兼容的机器。宿主平台的处理器可以是基于第二指令集架构的处理器。该第二指令集架构与第一指令集架构可以为不同的指令集架构。例如,第一指令集架构为x86指令集架构,第二指令集架构为arm指令集架构。或者,第一指令集架构为arm指令集架构,第二指令集架构为x86指令集架构,等等。

本发明实施例中的源程序为二进制码。在翻译过程中,二进制翻译系统只能拿到待翻译的、运行于客户平台的经过编译处理的二进制代码(即源程序),二进制翻译系统需要对源程序中的各个段进行映射,统一纳入二进制翻译系统对应的数据结构进行管理,基于上述映射信息对源程序中的代码段进行反汇编处理,转化为内部的IR1数据结构。基于IR1数据结构翻译出IR2数据结构并对其进行汇编,生成基于宿主机平台的指令集架构的汇编指令编码(二进制形式),并存储在映射的内存地址中。最后将内存中的各个段重新按照可执行文件的格式写入目标文件,完成翻译,得到目标程序。

参照图1,示出了本发明的一种二进制翻译方法实施例的步骤流程图,应用于宿主平台,具体可以包括如下步骤:

步骤101、在对客户平台的目标指令进行翻译的情况下,基于目标掩码数据以及原始内存数据,确定第一目标数据;所述原始内存数据是基于所述目标指令指示的目标内存地址读取到的,所述目标掩码数据是基于所述原始内存数据确定的,所述原始内存数据中包含有效字段以及非有效字段,所述第一目标数据中包含所述非有效字段。

本发明实施例中,目标指令可以是源程序经过反汇编处理得到的可内部IR1数据结构的指令,如运算指令、原子指令等。目标内存地址可以是目标指令指示的用于读取数据的内存地址。宿主平台在对客户平台的目标指令进行翻译的情况下,从目标指令指示的目标内存地址中读取出原始内存数据,并将得到的原始内存数据存储至宿主平台的寄存器中。其中,原始内存数据为宿主平台从目标内存地址中读出的数据。但由于客户平台与宿主平台存在的访存位数差异,在客户平台运行的目标指令为对齐访问,在宿主平台的对客户平台的目标指令进行翻译的过程中,则可能变成非对齐访问。即,宿主平台从目标内存地址中读出的原始内存数据可能既包含需要读出的真实数据,也包含不必要的冗余数据。具体的,当从内存空间中读入一个32位(4字节)的数据时,当其访存地址满足4的整数倍数时,即为对齐访问,其余均为非对齐访问。对于64位的数据的对齐访问状态则其访存地址需满足8的整数倍数,16位数据的对齐访问状态则其访存地址需满足2的整数倍数,8位数据的对齐访问状态则其访存地址需满足1的整数倍数(在这种情况下通常均对应对齐访问状态)。例如:客户平台的目标指令的访存地址为0x400121,由于客户平台的目标指令支持8位数据的访问,其访存地址满足1的倍数,在客户平台为对齐访问状态,而宿主平台的目标指令只支持32位的对齐访问,由于访存地址不满足4的整数倍(余数为1),则上述情况在宿主平台则变为非对齐访问状态。

宿主平台的访存位数可以大于客户平台的访存位数,这样,在宿主平台对客户平台的目标指令进行翻译的过程中,宿主平台的目标指令会一次性读入宿主平台的访存位数对应的数据量,其中宿主平台读取的数据中包含客户平台目标指令基于客户平台支持的访存位数需要读出的数据量,即有效字段,也包括非客户平台目标指令需要读出的冗余数据量,即非有效字段。例如:客户平台的访存位数为8位,宿主平台的访存位数为32位。相应的,宿主平台目标指令会一次性读入32位数据,其中包含24位的非有效字段。在宿主平台对客户平台的目标指令进行翻译的过程中,需要基于8位的数据进行运算处理,由于宿主平台只支持32位寄存器,且其对应的运算指令只支持32位的运算操作,这样,如果基于读取的32位数据进行运算,不仅8位有效字段会参与运算,从内存中读入的冗余数据(非有效字段)同样也会参与运算,这会导致错误的运算结果。因此,需要确保宿主平台读出的非有效字段不被修改,否则会导致宿主平台的运行结果与客户平台的实际运行结果不一致,破坏“存储一致性”。

获取目标掩码数据,目标掩码数据可以是基于原始内存数据中的有效字段以及非有效字段在原始内存数据中对应的值位确定的,目标掩码数据可以用于表征原始内存数据中有效字段对应在原始内存数据中的值位以及非有效字段对应在原始内存数据中的值位。示例性的,可以将原始内存数据中有效字段对应的值位处的字段内容使用第一数值进行填充,将原始内存数据中非有效字段对应的值位处的字段内容使用第二数值进行填充,第一数值与第二数值不同。具体的,第一数值可以为0,第二数值可以为1,则可以将原始内存数据中有效字段对应的值位处的字段内容使用0进行填充,将原始内存数据中非有效字段对应的值位处的字段内容使用1进行填充。基于目标掩码数据以及原始内存数据,确定第一目标数据。其中,第一目标数据中包含原始内存数据中的非有效字段,以及第一数值。也就是说,第一目标数据相对于原始内存数据而言,非有效字段的字段内容以及对应的值位均保持不变,仅将有效字段对应的值位处的字段内容替换为第一数值,相当于第一目标数据用于确保原始内存数据中的非有效字段的字段内容以及对应的值位在最终写入对应的内存地址时不被修改。示例性的,可以对目标掩码数据以及原始内存数据进行逻辑与操作,由于二进制数据计算中1与1进行逻辑与操作的结果仍为1,1与0、0与0进行逻辑与操作的结果均为0,因此,当目标掩码数据中原始内存数据中有效字段对应的值位处的字段内容使用0进行填充,原始内存数据中非有效字段对应的值位处的字段内容使用1进行填充,在与原始内存数据进行逻辑与操作后,得到的第一目标数据中与原始内存数据中非有效字段对应的字段内容以及对应的值位均保持不变,有效字段的字段内容均为0。

步骤102、基于所述目标指令对应的计算语义,获取其有效字段经逻辑右移处理后的所述原始内存数据对应的计算结果,得到第一计算结果;所述第一计算结果中包含所述有效字段对应的目标字段,所述目标字段用于表征所述目标指令在所述客户平台运行时对应的真实计算结果。

本发明实施例中,由于数据在进行计算时是从低位向高位按位进行的,要实现有效位的计算,当有效字段未处于低位,则在计算时可能会由于低位的非有效字段的进位或借位影响有效字段在进行运算时的实际参与运算的数据的真实性以及准确性,因此,为了避免有效字段的计算不会因为非有效字段的进(借)位影响有效字段对应的最终计算结果的正确性,需要保证从目标内存地址读入的数据(有效字段)移至最低位,这样,只有有效字段均处于寄存器的最低位,才能确保计算结果的真实性以及准确性。

基于客户平台的目标指令对应的计算语义,可以根据目标指令表征的计算操作,确定目标指令对应的计算语义,即目标指令的计算语义可以表征目标指令本身需要实现的计算操作。例如:在目标指令为加法运算指令的情况下,目标指令对应的计算语义即对数据进行加法操作;在目标指令为原子指令的情况下,目标指令指示的计算语义可以是原子指令语义对应的计算操作。通过对原始内存数据中的有效字段进行逻辑右移处理,得到其有效字段经逻辑右移处理后的原始内存数据,并且由于在计算过程中无需冗余数据参与计算,为了节约计算资源,则可以将逻辑右移处理后的原始内存数据中高位缺少的值位对应的字段内容填充为第一数值,得到第二目标数据。其中,第一数值可以为0。此时,第二目标数据包含有效字段,且有效字段处于第二目标数据的最低位,可以用于后续运算。获取目标指令指示的客户平台中目标寄存器中的目标寄存器值,并基于目标指令对应的计算语义,对其有效字段经逻辑右移处理后的原始内存数据,即第二目标数据以及目标寄存器值进行计算,得到计算结果,即第一计算结果。其中,目标寄存器值对应的值位数量与客户平台支持的访存位数一致,相应的,目标寄存器值对应的值位数量与有效字段对应的值位数量一致。这样,由于已经将有效字段通过逻辑右移处理,有效字段处于第一目标数据中的低位,这样,基于第一目标数据以及目标寄存器中的目标寄存器值进行计算得到的第一计算结果的低位,即有效字段与目标寄存器值进行计算得到的目标字段,也就是目标指令在客户平台运行时对应的真实计算结果。

步骤103、基于其目标字段经逻辑左移处理后的所述第一计算结果以及所述第一目标数据,确定目标运算结果;所述目标运算结果包括所述目标字段以及所述非有效字段。

本发明实施例中,由于第一计算结果中目标字段处于低位,因此,需要再将目标字段恢复至原有效字段对应原始内存数据中的值位,因此,可以将第二目标数据中的目标字段进行逻辑左移处理,并将逻辑左移处理后的第二目标数据中的非目标字段的字段内容填充为第一数值,得到第三目标数据。其中,第一数值可以为0。此时,经逻辑左移处理后的第一计算结果,即第三目标数据中包含目标字段,且目标字段对应第三目标数据中的值位与有效字段对应原始内存数据的值位相同。由于第一目标数据中包含非有效字段,且第三目标数据中包含有效字段对应的目标字段,因此基于第一目标数据以及第三目标数据,可以确定目标运算结果。目标运算结果中同时包含有效字段经计算后得到的目标字段以及非有效字段,相当于,目标运算结果中既得到的有效字段对应的真实计算结果,同时也确保了非有效字段不被修改,进而确保了客户平台与宿主平台的存储一致性,保证源程序不会因为平台原因产生运行结果不一致的情况。

步骤104、将所述目标运算结果存储至所述目标指令指示的指定内存地址。

本发明实施例中,目标运算结果即宿主平台对目标指令进行翻译得到的与目标指令在客户平台运行时得到的运算结果一致的真实运算结果。指定内存地址可以是目标指令指示的用于存储运算结果的内存地址。其中,指定内存地址可以与目标内存地址相同,本发明实施例对此不做限制。

示例性的,在目标指令为原子指令的情况下,则可以基于原子指令指示的指定内存地址,基于条件加载指令,将该目标运算结果写入指定内存地址指示的内存地址。

综上所述,本发明实施例中,在对客户平台的目标指令进行翻译的情况下,基于目标掩码数据以及原始内存数据,确定第一目标数据,由于第一目标数据中包含的是原始内存数据中的非有效字段,可以为后续确保得到的目标运算结果中的非有效字段保持不变奠定了基础。并且由于内存数据在进行计算时是由低位向高位按位进行计算,通过对原始内存数据的有效字段进行逻辑右移,可以使得右移后的原始内存数据中的有效字段处于整个数据的低位,能够避免在运算时由于其他位数据的进位或借位影响计算结果的准确性,使得基于有效字段得到的目标字段即目标指令在客户平台运行时对应的真实计算结果。进一步地,通过对第一计算结果中的目标字段进行逻辑左移,可以将目标字段恢复至原有效字段的值位,并基于包含非有效字段的第一目标数据,确定出目标运算结果,相当于目标运算结果中不仅包含对有效字段进行计算得到的目标字段,也包含了未被改动的非有效字段,确保了宿主平台将客户平台的目标指令翻译后得到的运行结果与该目标指令在客户平台运行的运行结果的一致性,进而提高了宿主平台对不同架构的客户平台的目标指令进行翻译的准确性。

参照图2,示出了本发明的另一种二进制翻译方法实施例的步骤流程图,应用于宿主平台,具体可以包括如下步骤:

步骤201、确定所述原始内存数据中有效字段对应的第一值位以及非有效字段对应的第二值位。

本发明实施例中,在宿主平台基于目标指令序列中的链接加载指令读取到目标内存地址的原始内存数据后,可以遍历原始内存数据,并确定原始内存数据中有效字段对应的第一值位,以及原始内存数据中非有效字段对应的第二值位。其中,第一值位用于表征有效字段中各字段对于原始内存数据而言占用的相对值位,第二值位用于表征非有效字段中各字段对于原始内存数据而言占用的相对值位,第二值位可以包含原始内存数据中除第一值位外的其它值位,第一值位可以包含连续的多个比特位,第二值位可以包含非连续的多个比特位。相应的,在后续得到目标字段的情况下,需要基于目标掩码数据将目标字段恢复至第一值位表征的相对位置,且保证非有效字段的值位以及字段内容维持不变。示例性的,假设原始内存数据为0x3fdaccde(十六进制表示),对应的二进制表示为:0011 1111 11011010 1100 1100 1101 1110,假设有效字段为从低位到高位数第二个字节(即“11001100”),则第一值位包含“1100 1100”字段所占用的比特位,第二值位即原始内存数据中除第一值位的剩余比特位,为了便于理解,第二值位可以包含“0011 1111 1101 1010”以及“1101 1110”所占用的比特位。

步骤202、将所述原始内存数据中第一值位对应的字段内容填充为第一数值,以及,将所述原始内存数据中第二值位对应的字段内容填充为第二数值。

步骤203、确定包含所述第一数值以及所述第二数值的原始内存数据为所述目标掩码数据。

本发明实施例中,在确定了第一值位以及第二值位后,可以将原始内存数据中的第一值位对应的字段内容填充为第一数值,以及,将原始内存数据中的第二值位对应的字段内容填充为第二数值。也就是说,将原始内存数据中的有效字段替换为第一数值,将原始内存数据中的非有效字段替换为第二数值,得到仅包含第一数值以及第二数值的目标掩码数据。其中,第一数值以及第二数值可以适用于某种运算关系,使得第一数值与第一数值进行某种运算后得到的结果仍为第一数值,第二数值与第二数值进行某种运算关系后得到的结果仍为第二数值,第一数值与第二数值进行某种运算关系得到的结果为第一数值。第一数值以及第二数值也可以同时适用于另一种运算关系,使得第一数值与第一数值进行另一种运算后得到的结果仍为第一数值,第二数值与第二数值进行另一种运算关系后得到的结果仍为第二数值,第一数值与第二数值进行另一种运算关系得到的结果为第二数值,例如:在二进制计算的场景下,第一数值可以为0,第二数值可以为1。

示例性的,假设原始内存数据为0x3fdaccde(十六进制表示),对应的二进制表示为:0011 1111 1101 1010 1100 1100 1101 1110,则目标掩码数据可以为0xffff00ff(十六进制表示),对应的二进制表示为:1111 1111 1111 11110000 0000 1111 1111。

步骤204、在对客户平台的目标指令进行翻译的情况下,基于目标掩码数据以及原始内存数据,确定第一目标数据;所述原始内存数据是基于所述目标指令指示的目标内存地址读取到的,所述目标掩码数据是基于所述原始内存数据确定的,所述原始内存数据中包含有效字段以及非有效字段,所述第一目标数据中包含所述非有效字段。

本发明实施例中,步骤204与步骤101类似,在此不再赘述。

步骤205、基于所述目标指令对应的计算语义,获取其有效字段经逻辑右移处理后的所述原始内存数据对应的计算结果,得到第一计算结果;所述第一计算结果中包含所述有效字段对应的目标字段,所述目标字段用于表征所述目标指令在所述客户平台运行时对应的真实计算结果。

本发明实施例中,步骤205与步骤102类似,在此不再赘述。

步骤206、基于其目标字段经逻辑左移处理后的所述第一计算结果以及所述第一目标数据,确定目标运算结果;所述目标运算结果包括所述目标字段以及所述非有效字段。

本发明实施例中,步骤206与步骤103类似,在此不再赘述。

步骤207、将所述目标运算结果存储至所述目标指令指示的指定内存地址。

本发明实施例中,步骤207与步骤104类似,在此不再赘述。

本发明实施例中,通过原始内存数据中有效字段以及非有效字段的值位,确定目标掩码数据,可以使得目标掩码数据通过第一数值以及第二数值记录有效字段与非有效字段的相对位置,进而确保非有效字段在目标运算结果中的值位以及内容不被修改。

可选地,步骤101可以包括以下步骤:

步骤1011、获取所述目标掩码数据,以及从所述目标指令指示的目标内存地址中获取原始内存数据。

本发明实施例中,获取目标掩码数据以及目标指令指示的目标存储地址至中的原始内存数据。其中获取掩码数据的方法如上述步骤201-203所述,获取原始内存数据的方法如上述步骤101所述,在此不再赘述。

步骤1012、对所述目标掩码数据以及所述原始内存数据进行逻辑与操作,得到第一目标数据。

本发明实施例中,在二进制数据的计算场景下,目标掩码数据以及原始内存数据由0以及1构成,相应的,基于二进制运算的特点,在进行逻辑与操作的情况下,1与1进行逻辑与操作的结果仍为1,1与0、0与0进行逻辑与操作的结果均为0。将目标掩码数据与原始内存数据按位进行逻辑与操作,由于目标掩码数据中有效字段对应的第一值位的字段内容为0,非有效字段对应的第二值位的字段内容为1,则当原始内存数据第一值位对应的有效字段的字段内容与目标掩码数据中第一值位对应的字段内容进行逻辑与操作,则得到的第一目标数据中第一值位对应的字段内容均为0。相应的,当原始内存数据中第二值位对应的非有效字段的字段内容与目标掩码数据中第二值位对应的字段内容进行逻辑与操作,则非有效字段中为1的字段内容与目标掩码数据中为1的字段内容进行逻辑与操作,得到1;非有效字段中为0的字段内容与目标掩码数据中为1的字段内容进行逻辑与操作,得到0,也就是说,原始内存数据中第二值位对应的非有效字段的字段内容与目标掩码数据中第二值位对应的字段内容进行逻辑与操作后,得到的第一目标数据中第二值位的字段内容与原始内存数据中第二值位的字段内容(非有效字段)相同。这样,确保了第一目标数据中非有效字段的字段内容以及值位保持不变,有效字段对应第一值位的字段内容为第一数值(0)。

示例性的,假设目标掩码数据为0xffff00ff(十六进制表示),对应的二进制表示为:1111 1111 1111 1111 0000 0000 1111 1111。原始内存数据为0x3fdaccde(十六进制表示),对应的二进制表示为:0011 1111 1101 1010 11001100 1101 1110。则将目标掩码数据以及原始内存数据进行逻辑与操作,所得第一目标数据为0x3fda00de,对应的二进制表示为:0011 1111 1101 10100000 0000 1101 1110。其中,第一目标数据中第一值位对应的字段内容均为0,第二值位对应的字段内容与原始数据中非有效字段的字段内容相同。

本发明实施例中,基于对目标掩码数据以及原始内存数据进行逻辑与操作,可以使得第一目标数据中保留非有效字段的字段内容以及所处值位,且使得原始内存数据中有效字段对应的第一值位中的字段内容替换为第一数值,便于后续计算确定目标运算结果。

可选地,步骤102可以包括以下步骤:

步骤1021、对所述原始内存数据中的有效字段进行逻辑右移,确定第二目标数据;所述第二目标数据的指定值位对应的字段内容为所述有效字段。

本发明实施例中,对原始内存数据中的有效字段进行逻辑右移至指定值位,同时由于有效字段逻辑右移,则原有效字段右侧的字段内容可以被舍弃,原有效字段左侧的字段内容随着有效字段逻辑右移,空缺的高位值位对应的字段内容填充为第一数值,得到第二目标数据。其中,第一数值可以为0。指定值位为原始内存数据中值位最低的多个值位,具体多个值位的数量可以基于客户平台支持的访存位数确定,例如:客户平台支持的访存位数为8位,则对于32位的原始内存数据而言,指定值位可以是32位中最低的8个值位。这样,第二目标数据的指定值位对应的字段内容为有效字段,除有效字段外的其它字段内容为第一数值。示例性的,假设原始内存数据为0x3fdaccde(十六进制表示),对应的二进制表示为:0011 1111 1101 1010 1100 1100 11011110。假设有效字段为从低位到高位数第二个字节(即“1100 1100”),由于有效字段处于从低位开始的第二个字节处,则需要将有效字段“1100 1100”以及有效字段左侧的字段“0011 1111 1101 1010”整体进行逻辑右移,并舍弃有效字段右侧的字段“1101 1110”,将右移后高位值位空缺的字段填充为0,则所得第二目标数据为0x003fdacc(十六进制表示),对应的二进制表示为:0000 0000 0011 1111 11011010 1100 1100。

步骤1022、基于所述目标指令对应的计算语义,获取所述第二目标数据对应的计算结果,得到所述第一计算结果;所述第一计算结果的指定值位对应的字段内容为所述有效字段对应的目标字段。

本发明实施例中,基于目标指令对应的计算语义,对目标指令指示的目标寄存器的目标寄存器值以及第二目标数据进行相应的计算,得到计算结果,作为第一计算结果。其中,第一计算结果中指定值位对应的字段内容为有效字段对应的目标字段,即目标指令在客户平台运行时对应的真实计算结果。

在一种可能的实施方式中,在目标指令为原子指令的情况下,先基于原子指令的语义,获取宿主平台生成的该原子指令对应的计算指令。示例性的,客户平台的原子指令的语义为:对一个内存空间的数据与寄存器的数据进行加法操作,则宿主平台可以生成对应的加法指令,并基于对应的加法指令进行翻译。基于该计算指令,对原子指令指示的目标寄存器的目标寄存器值以及第二目标数据进行相应的计算,得到计算结果,作为第一计算结果。

本发明实施例中,通过将原始内存数据中的有效字段进行逻辑右移,使得有效字段可以避免由于低位非有效字段参与计算所带来的计算结果偏差,导致有效字段对应的目标字段的准确性降低,确保了基于目标指令的计算语义确定的有效字段对应的目标字段的真实性以及准确性。

可选地,步骤103可以包括以下步骤:

步骤1031、对所述第一计算结果中的目标字段进行逻辑左移,并将所述第一计算结果的非目标字段替换为第一数值,得到第三目标数据;所述第三目标数据中的目标字段对应的值位与所述原始内存数据中有效字段对应的值位一致。

本发明实施例中,由于第一计算结果中目标字段处于指定值位,即最低位,则若需要使得客户平台与宿主平台保持存储一致性,则需要将目标字段从指定值位处恢复至有效字段对应的第一值位。因此,可以将第一计算结果中的目标字段进行逻辑左移,并将第一计算结果中非目标字段中的字段内容替换第一数值,得到第三目标数据。其中,第一数值可以为0。第三目标数据中的目标字段对应的值位,与原始内存数据中有效字段对应的第一值位的位置相同。将第一计算结果中非目标字段中的字段内容替换为第一数值的步骤可以是,对目标掩码数据按位取反,并将取反后的目标掩码数据与进行逻辑左移后的第一计算结果进行逻辑与操作,即可以得到第三目标数据。

示例性的,假设第三目标数据0x00007800,对应的二进制表示为:00000000 00000000 0111 1000 0000 0000。其中,“0111 1000”即有效字段对应的目标字段。

步骤1032、对所述第三目标数据以及所述第一目标数据执行逻辑或操作,得到所述目标运算结果。

本发明实施例中,对第三目标数据以及第一目标数据执行逻辑或操作,由于二进制计算中,进行逻辑或操作时,只有0和0进行逻辑或操作所得结果为0,0和1、1和1的逻辑或操作所得结果均为1。由于第一目标数据中包含非有效字段,原始内存数据中有效数据对应的第一值位处的原有效数据替换为第一数值,即0,第三目标数据中目标字段处于第一值位处,因此,对第一目标数据以及第三目标数据进行逻辑或操作,得到的即真实的目标运算结果。示例性的,假设第三目标数据0x00007800,对应的二进制表示为:0000 0000 0000 00000111 1000 0000 0000,第一目标数据为0x3fda00de,对应的二进制表示为:0011 11111101 1010 0000 0000 1101 1110,进行或操作后,得到的目标运算结果为0011 1111 11011010 0111 1000 1101 1110。其中,目标运算结果中原原始内存数据中的非有效字段的位置以及字段内容不变,原原始内存数据中的有效字段对应的目标字段也为正确的计算结果。

本发明实施例中,通过对目标字段进行逻辑左移,以确定第三目标数据,对第三目标数据以及第一目标数据执行逻辑或操作,得到正确的目标运算结果。这样,对于冗余的非有效字段不会有破坏性操作,因此目标运算结果相当于把非有效字段与有效字段对应的目标字段组合起来,既保证了非有效字段没有被破坏,又保证了正确的计算结果(目标字段)填充到了正确的位置上。

在一种可能的实施方式中,在读取到原始内存数据后,可以将原始内存数据存储至第一寄存器以及第二寄存器,得到第一寄存器中的第一内存数据以及第二寄存器中的第二内存数据。其中,第一内存数据可以用于后续参与运算,第二内存数据用于确保非有效字段在计算过程中不被修改,即确保得到的目标运算结果中的非有效字段保持不变。在将原始内存数据存储至不同的寄存器(第一寄存器r1以及第二寄存器r2)后,可以在宿主平台的第三寄存器r3中写入目标掩码数据。并将r2中的第二内存数据以及r3中的目标掩码数据进行逻辑与操作,并将得到的第一目标数据存储至r2。将r1寄存器中的第一内存数据中的有效字段进行逻辑右移操作,得到第二目标数据,并基于目标指令的计算语义,对第二目标数据以及原子指令指示的目标寄存器值进行计算,得到第一计算结果,并将第一计算结果存入r1。将r1中的第一计算结果中的目标字段逻辑左移恢复至与原始内存数据中有效字段对应的第一值位相同的值位,并将非目标字段的字段内容替换为第一数值,得到第三目标数据。将第三目标数据存储至r1。将r1中的第三目标数据以及r2中的第一目标数据进行逻辑或操作,得到目标运算结果,并将该目标运算结果存入指定内存地址。

可选地,在目标指令为原子指令的情况下,本发明实施例可以包括以下步骤:

步骤301、基于所述原子指令,生成目标指令序列。

原子指令用于在多个中央处理器(Central Processing Unit,CPU)或多核处理器中不同处理单元之间维护同步关系,具体的,原子指令可以应用于多核平台中,多核处理器是一种计算机中的CPU设计,其中包含两个或多个独立的处理单元,每个处理单元都可以执行独立的指令流。

由于多个处理器可以同时运行不同的指令,当一个核心在读写指定的内存区域时,其他核心同样也可以读写该区域,此时各个核心无法保证运算结果的唯一性。为保证多核处理器的各个核心访问同一内存的互斥性,即同一时间段内只有一个核心能够访问同一内存区域,需要一种特殊的指令来保证当前核心访问内存时,该内存区域无法被其他核心访问,这种指令就是原子指令。在客户平台与宿主平台均为多核平台的情况下,需要通过原子指令(Atomic Instructions)保证当前核心访问内存时,在同一时刻该内存区域无法被其他核心访问。但由于客户平台与宿主平台可能存在架构的差异,客户平台与宿主平台的访存位数可能不同,则无法保证将客户平台的原子指令翻译到宿主平台后运行结果的一致性,进而影响源程序原子指令翻译的准确性。

示例性的,在一种可能的应用场景下,当客户平台的程序(应用软件)运行在宿主平台上,该程序在运行过程中会用到客户平台对应的多核处理器中的多个处理器核对同一个内存区域进行运算,为了保证一个处理器核在访问该内存空间可以处于独占状态,即其他处理器核不能同时对该区域进行访问,此时可以使用原子指令对该内存区域进行访问。但由于客户平台与宿主平台存在架构差异,例如客户平台的架构为x86架构,宿主平台的架构为ARM架构,即x86架构的程序(应用软件)运行在ARM架构中。在宿主平台对客户平台的程序(应用软件)进行翻译并执行的情况下,通常会使用宿主平台的多个处理器核进行相应的模拟。在对客户平台的指令进行翻译的时候,若客户平台的指令在宿主平台有语义相同的指令,此时可以从客户平台到宿主平台进行原子指令一对一的翻译(宿主平台的原子指令由宿主平台提供,如果宿主平台支持原子指令,则可从该平台对应的指令集手册中查询到),然而在实际翻译过程中,由于两个平台架构不同,原子指令的设计也存在着差异,客户平台的指令翻译到宿主平台往往需要多条指令实现。由于两个平台架构不同,客户平台与宿主平台的访存位数可能不同,则无法保证将客户平台的原子指令翻译到宿主平台后运行结果的一致性,即无法保证“存储一致性”。

在对客户平台的原子指令进行翻译的过程中,宿主平台往往会使用具有从内存中读取数据功能的原子指令(链接加载指令)和具有将数据写入内存功能的原子指令(条件存储指令)进行成对使用,再配合普通指令(计算指令)形成一个指令序列,以实现对客户平台原子指令的翻译。

本发明实施例中,在宿主平台对客户平台中的原子指令进行翻译的情况下,基于客户平台的原子指令,生成宿主平台对应的链接加载指令、条件存储指令以及计算指令。其中,链接加载指令用于从内存地址中读取数据,条件存储指令用于将数据写入内存地址,计算指令用于对原子指令指示的目标内存地址以及目标寄存器地址中的数据进行运算。

步骤302、基于所述目标指令序列中的链接加载指令,从所述原子指令指示的目标内存地址中获取原始内存数据,并将所述原始内存数据分别存储至第一寄存器以及第二寄存器,得到第一内存数据以及第二内存数据。

本发明实施例中,基于目标指令序列中的链接加载指令,从目标内存地址中读取原始内存数据。在实际应用场景中,为了便于后续计算,可以将原始内存数据存储至不同的寄存器,以基于不同寄存器中的值进行不同的处理操作。将原始内存数据存储至第一寄存器以及第二寄存器,得到第一寄存器中的第一内存数据以及第二寄存器中的第二内存数据。其中,第一内存数据可以用于后续参与运算,第二内存数据用于确保非有效字段在计算过程中不被修改,即确保得到的目标运算结果中的非有效字段保持不变。可以理解的是,第一内存数据与第二内存数据的内容相同,均为原始内存数据。在对原始内存数据进行存储并备份后,可以将CPU中相关硬件置位。示例性的,在宿主平台CPU的设计中,在其硬件内部设计有一部件,当使用链接加载指令从原子指令指示的目标内存地址中将原始内存数据读入寄存器的时候,在该部件内部对该内存空间位置标记为1,并且如果在条件存储指令执行前,其余的处理器核对该目标内存地址产生了访问操作,则上述位置会被标记为0。这样,通过将原始内存数据存储至不同的寄存器,可以基于不同寄存器中存储的内存数据进行后续处理,便于快速的确定目标运算结果。

可选地,步骤104可以包括以下步骤:

步骤1041、基于所述目标指令序列中的条件存储指令,在检测到不存在其他访问目标内存地址的操作的情况下,将所述目标运算结果写入所述目标内存地址。

本发明实施例中,基于目标指令序列中的条件存储指令,通过条件存储指令中定义的判断条件,判断步骤302中的内存空间位置中的数值,若检测到内存空间位置中的数值为1,则说明不存在其他访问目标内存地址的操作,原子性未被破坏,宿主平台的原子指令的原子性得到保证,可以将目标运算结果写入目标内存地址。

步骤1042、在检测到存在其他访问目标内存地址的操作的情况下,重新执行所述基于所述目标指令序列中的链接加载指令,从所述原子指令指示的目标内存地址中获取原始内存数据的操作。

本发明实施例中,基于目标指令序列中的条件存储指令,通过条件存储指令中定义的判断条件,判断步骤302中的内存空间位置中的数值,若检测到内存空间位置中的数值为0,则说明存在其他访问目标内存地址的操作,原子性被破坏,宿主平台的原子指令的原子性无法得到保证,不能将本次目标运算结果写入目标内存地址,此时需要基于跳转指令,跳转执行“基于所述目标指令序列中的链接加载指令,从所述原子指令指示的目标内存地址中获取原始内存数据”的操作,重复上述操作获取目标运算结果。

本发明实施例中,通过对是否存在其他访问目标内存地址的操作进行判断,可以确保将目标运算结果写入指定内存地址时,原子性未被破坏,确保了目标运算结果的准确性以及客户平台与宿主平台的存储一致性,一定程度上提升了二进制翻译在多核场景下的稳定性。

可以理解的是,本发明实施例中的宿主平台的访存位数大于客户平台的访存位数,且宿主平台的访存位数需满足基于宿主平台的原子指令可以将数据从内存对齐位置全部读入。例如:客户平台的原子访存指令位数为16位,当目标内存地址为0x400007时(16位的数据分布在0x400007和0x400008处),宿主平台使用32位原子指令从内存对齐处0x400004无法将16位完整读入(只能读入0x400007存放的数据),而使用64位的原子指令从0x400000处同样会面临上述的问题。此时则只能使用支持128位(16字节)的原子指令读入,以此类推。

示例性的,假设一客户平台的原子指令(伪代码表示)为:atomic_add mem_8,register_8。其中,atomic表示该指令为原子操作,add表示加法操作,register_8代表的是一个8位寄存器,mem_8代表的是一个8位内存空间。该原子指令对应的语义为将8位寄存器中存放的值与8位内存空间中存放的值相加,所得结果仍存入该8位内存空间中。

假设8位寄存器的值为0x12,8位内存空间的值为0xcc,8位内存空间的地址为0x400121,当原子指令在客户平台运行时,由0x12+0xcc=0xde,得到真实计算结果0xde,并将真实计算结果0xde仍存入原来的8位地址空间。

假设宿主平台的访存位数为32位,在宿主平台翻译该原子指令的情况下,在宿主平台的其中一个寄存器中存放客户平台原子指令中的指示的寄存器的值,假设宿主平台对应的寄存器为r0,则r0的值为0x00000012,其二进制表示为:0000 0000 0000 0000 00000000 0001 0010。(这里为方便说明把高24位均设置为0,然而在实际情况中往往不为0。)

宿主平台基于原子指令生成对应的目标指令序列,使用链接加载指令从目标内存地址读入内存中读入原始内存数据时,由于目标内存地址为0x400121,该地址除以4的余数为1,为非对齐访问。因此则需要从0x400120处将32位的原始内存数据读入寄存器r1,此时r1的值为0x3fdaccde,将r1的值复制备份到r2寄存器,同时将对应的掩码0xffff00ff存入r3寄存器(相应的,如果目标内存地址为0x400123,则对应的掩码应该为0x00ffffff),将r2寄存器的值与r3寄存器的值进行逻辑与操作,所得结果存入r2寄存器,此时r2寄存器的值为0x3fda00de,将r1寄存器的值逻辑右移8位存入r1寄存器,此时r1寄存器的值为0x003fdacc。基于目标指令序列中的计算指令,将r1寄存器的值与r0寄存器的值相加,所得结果存入r1寄存器,此时r1的值为0x003fdade,目标字段即低8位的0xde,因此将r1寄存器的值逻辑左移8位,此时r1的值为0x3fdade00。将r1寄存器中0x3fdade00中的非目标字段的字段内容替换为0。具体的,将r1寄存器中非目标字段的字段内容替换为0的操作可以通过下述步骤实现:将r3寄存器的值按位取反,所得结果存入r3寄存器,此时r3寄存器的值为0x0000ff00,将r3寄存器与r1寄存器进行逻辑与操作,所得结果存入r1寄存器,此时r1寄存器的值为0x0000de00,即将非目标字段的字段内容替换为0。

此时r1寄存器中包含有效字段对应的目标字段,r2寄存器中包含原始内存数据中的非有效字段,对r1寄存器中的第三目标数据和r2寄存器中的第一目标数据进行逻辑或操作,所得结果即为目标运算结果。将该目标运算结果基于目标指令序列中的条件存储指令写入内存时,当CPU中的标记仍为1时,表示进行上述操作过程中未存在其他处理器核对目标内存地址的访问,则可以写入;否则,基于跳转指令,跳转回链接加载指令的位置重新执行上述过程,直至写入成功。

需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。

参照图3,示出了本发明的一种二进制翻译装置实施例的结构框图,具体可以包括如下模块:

第一确定模块401,用于在对客户平台的目标指令进行翻译的情况下,基于目标掩码数据以及原始内存数据,确定第一目标数据;所述原始内存数据是基于所述目标指令指示的目标内存地址读取到的,所述目标掩码数据是基于所述原始内存数据确定的,所述原始内存数据中包含有效字段以及非有效字段,所述第一目标数据中包含所述非有效字段;

第一获取模块402,用于基于所述目标指令对应的计算语义,获取其有效字段经逻辑右移处理后的所述原始内存数据对应的计算结果,得到第一计算结果;所述第一计算结果中包含所述有效字段对应的目标字段,所述目标字段用于表征所述目标指令在所述客户平台运行时对应的真实计算结果;

第二确定模块403,用于基于其目标字段经逻辑左移处理后的所述第一计算结果以及所述第一目标数据,确定目标运算结果;所述目标运算结果包括所述目标字段以及所述非有效字段;

第一存储模块404,用于将所述目标运算结果存储至所述目标指令指示的指定内存地址。

本发明实施例提供了一种二进制翻译装置,在对客户平台的目标指令进行翻译的情况下,基于目标掩码数据以及原始内存数据,确定第一目标数据,由于第一目标数据中包含的是原始内存数据中的非有效字段,可以为后续确保得到的目标运算结果中的非有效字段保持不变奠定了基础。并且由于内存数据在进行计算时是由低位向高位按位进行计算,通过对原始内存数据的有效字段进行逻辑右移,可以使得右移后的原始内存数据中的有效字段处于整个数据的低位,能够避免在运算时由于其他位数据的进位或借位影响计算结果的准确性,使得基于有效字段得到的目标字段即目标指令在客户平台运行时对应的真实计算结果。进一步地,通过对第一计算结果中的目标字段进行逻辑左移,可以将目标字段恢复至原有效字段的值位,并基于包含非有效字段的第一目标数据,确定出目标运算结果,相当于目标运算结果中不仅包含对有效字段进行计算得到的目标字段,也包含了未被改动的非有效字段,确保了宿主平台将客户平台的目标指令翻译后得到的运行结果与该目标指令在客户平台运行的运行结果的一致性,进而提高了宿主平台对不同架构的客户平台的目标指令进行翻译的准确性。

可选地,所述装置还包括:

第三确定模块,用于确定所述原始内存数据中有效字段对应的第一值位以及非有效字段对应的第二值位;

第一填充模块,用于将所述原始内存数据中第一值位对应的字段内容填充为第一数值,以及,将所述原始内存数据中第二值位对应的字段内容填充为第二数值;

第四确定模块,用于确定包含所述第一数值以及所述第二数值的原始内存数据为所述目标掩码数据。

可选地,所述第一确定模块401,包括:

第一获取子模块,用于获取所述目标掩码数据,以及从所述目标指令指示的目标内存地址中获取原始内存数据;

第一处理模块,用于对所述目标掩码数据以及所述原始内存数据进行逻辑与操作,得到第一目标数据;

所述第一目标数据中与所述第一值位对应的字段内容为所述第一数值,所述第一目标数据中与所述第二值位对应的字段内容为所述非有效字段。

可选地,所述第一获取模块402,包括:

第二处理模块,用于对所述原始内存数据中的有效字段进行逻辑右移,确定第二目标数据;所述第二目标数据的指定值位对应的字段内容为所述有效字段;

第二获取子模块,用于基于所述目标指令对应的计算语义,获取所述第二目标数据对应的计算结果,得到所述第一计算结果;所述第一计算结果的指定值位对应的字段内容为所述有效字段对应的目标字段。

可选地,所述第二确定模块403,包括:

第三处理模块,用于对所述第一计算结果中的目标字段进行逻辑左移,并将所述第一计算结果的非目标字段替换为第一数值,得到第三目标数据;所述第三目标数据中的目标字段对应的值位与所述原始内存数据中有效字段对应的值位一致;

第四处理模块,用于对所述第三目标数据以及所述第一目标数据执行逻辑或操作,得到所述目标运算结果。

可选地,在所述目标指令为原子指令的情况下,所述装置还包括:

第一生成模块,用于基于所述原子指令,生成目标指令序列;

第二获取模块,用于基于所述目标指令序列中的链接加载指令,从获取所述原子指令指示的目标内存地址中获取原始内存数据,并将所述原始内存数据分别存储至第一寄存器以及第二寄存器,得到第一内存数据以及第二内存数据;

所述第一内存数据用于进行计算,所述第二内存数据用于使得所述目标运算结果中的非有效字段保持不变。

可选地,所述第一存储模块404,包括:

第一存储子模块,用于基于所述目标指令序列中的条件存储指令,在检测到不存在其他访问目标内存地址的操作的情况下,将所述目标运算结果写入所述目标内存地址;

第二存储子模块,用于在检测到存在其他访问目标内存地址的操作的情况下,重新执行所述基于所述目标指令序列中的链接加载指令,从所述原子指令指示的目标内存地址中获取原始内存数据的操作。

对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本发明实施例还提供一种二进制翻译系统,所述二进制翻译系统包据上述二进制翻译装置,具体的,所述二进制翻译系统包括:

源程序分析模块,用于分析客户平台的源程序,主要对源程序中的各个段进行映射,统一纳入二进制翻译系统对应数据结构管理,为后续模块提供基本的信息,保障各个模块的正确执行。

环境初始化模块,用于在初始化阶段配置翻译代码段,以及在翻译代码段中初始化系统调用表,为后续正确翻译打下基础。

反汇编模块,用于对源程序的代码段进行反汇编处理,将源代码转化为内部的IR1数据结构。其中,内部结构(Intermediate Representation,IR)可以是中间表示或者中间代码。内部结构IR1为客户程序指令集中间表示。

翻译模块中包含所述二进制翻译装置中的除所述存储模块外的其他模块,用于对反汇编模块得到的内部IR1数据结构中识别出目标指令进行上述二进制翻译方法中的翻译过程,翻译模块中的翻译指的是将内部结构IR1指令翻译为内部结构IR2存储。内部结构IR2是宿主程序指令集中间表示。

目标平台汇编模块,用于将翻译出的IR2结构进行汇编,生成真正的汇编指令编码,并存储在映射的内存地址中。

目标文件生成模块,用于将内存中的各个段重新按照可执行文件的格式写入目标文件,完成翻译,得到目标程序。

图4是根据一示例性实施例示出的一种用于二进制翻译的电子设备500的结构框图。例如,电子设备500可以是移动电话,计算机,数字广播终端,消息收发设备,游戏控制台,平板设备,医疗设备,健身设备,个人数字助理等。

参照图4,电子设备500可以包括以下一个或多个组件:处理组件502,存储器504,电源组件506,多媒体组件508,音频组件510,输入/输出(I/O)的接口512,传感器组件514,以及通信组件516。

处理组件502通常控制电子设备500的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理组件502可以包括一个或多个处理器520来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件502可以包括一个或多个模块,便于处理组件502和其他组件之间的交互。例如,处理组件502可以包括多媒体模块,以方便多媒体组件508和处理组件502之间的交互。

存储器504被配置为存储各种类型的数据以支持在设备500的操作。这些数据的示例包括用于在电子设备500上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器504可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。

电源组件504为电子设备500的各种组件提供电力。电源组件504可以包括电源管理系统,一个或多个电源,及其他与为电子设备500生成、管理和分配电力相关联的组件。

多媒体组件508包括在所述电子设备500和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件508包括一个前置摄像头和/或后置摄像头。当电子设备500处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。

音频组件510被配置为输出和/或输入音频信号。例如,音频组件510包括一个麦克风(MIC),当电子设备500处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器504或经由通信组件516发送。在一些实施例中,音频组件510还包括一个扬声器,用于输出音频信号。

I/O接口512为处理组件502和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。

传感器组件514包括一个或多个传感器,用于为电子设备500提供各个方面的状态评估。例如,传感器组件514可以检测到设备500的打开/关闭状态,组件的相对定位,例如所述组件为电子设备500的显示器和小键盘,传感器组件514还可以检测电子设备500或电子设备500一个组件的位置改变,用户与电子设备500接触的存在或不存在,电子设备500方位或加速/减速和电子设备500的温度变化。传感器组件514可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件514还可以包括光传感器,如CMOS或CCD图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件514还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。

通信组件516被配置为便于电子设备500和其他设备之间有线或无线方式的通信。电子设备500可以接入基于通信标准的无线网络,如WiFi,2G或3G,或它们的组合。在一个示例性实施例中,通信部件514经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信部件514还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。

在示例性实施例中,电子设备500可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。

在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器504,上述指令可由电子设备500的处理器520执行以完成上述方法。例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。

一种非临时性计算机可读存储介质,当所述存储介质中的指令由终端的处理器执行时,使得终端能够执行一种二进制翻译方法,所述方法包括:

在对客户平台的目标指令进行翻译的情况下,基于目标掩码数据以及原始内存数据,确定第一目标数据;所述原始内存数据是基于所述目标指令指示的目标内存地址读取到的,所述目标掩码数据是基于所述原始内存数据确定的,所述原始内存数据中包含有效字段以及非有效字段,所述第一目标数据中包含所述非有效字段;

基于所述目标指令对应的计算语义,获取其有效字段经逻辑右移处理后的所述原始内存数据对应的计算结果,得到第一计算结果;所述第一计算结果中包含所述有效字段对应的目标字段,所述目标字段用于表征所述目标指令在所述客户平台运行时对应的真实计算结果;

基于其目标字段经逻辑左移处理后的所述第一计算结果以及所述第一目标数据,确定目标运算结果;所述目标运算结果包括所述目标字段以及所述非有效字段;

将所述目标运算结果存储至所述目标指令指示的指定内存地址。

可选地,所述方法还包括:

确定所述原始内存数据中有效字段对应的第一值位以及非有效字段对应的第二值位;

将所述原始内存数据中第一值位对应的字段内容填充为第一数值,以及,将所述原始内存数据中第二值位对应的字段内容填充为第二数值;

确定包含所述第一数值以及所述第二数值的原始内存数据为所述目标掩码数据。

可选地,所述基于目标掩码数据以及中的原始内存数据,确定第一目标数据,包括:

获取所述目标掩码数据,以及从所述目标指令指示的目标内存地址中获取原始内存数据;

对所述目标掩码数据以及所述原始内存数据进行逻辑与操作,得到第一目标数据;

所述第一目标数据中与所述第一值位对应的字段内容为所述第一数值,所述第一目标数据中与所述第二值位对应的字段内容为所述非有效字段。

可选地,所述基于所述目标指令对应的计算语义,获取其有效字段经逻辑右移处理后的所述原始内存数据对应的计算结果,得到第一计算结果,包括:

对所述原始内存数据中的有效字段进行逻辑右移,确定第二目标数据;所述第二目标数据的指定值位对应的字段内容为所述有效字段;

基于所述目标指令对应的计算语义,获取所述第二目标数据对应的计算结果,得到所述第一计算结果;所述第一计算结果的指定值位对应的字段内容为所述有效字段对应的目标字段。

可选地,所述基于其目标字段经逻辑左移处理后的所述第一计算结果以及所述第一目标数据,确定目标运算结果,包括:

对所述第一计算结果中的目标字段进行逻辑左移,并将所述第一计算结果的非目标字段替换为第一数值,得到第三目标数据;所述第三目标数据中的目标字段对应的值位与所述原始内存数据中有效字段对应的值位一致;

对所述第三目标数据以及所述第一目标数据执行逻辑或操作,得到所述目标运算结果。

可选地,在所述目标指令为原子指令的情况下,所述方法还包括:

基于所述原子指令,生成目标指令序列;

基于所述目标指令序列中的链接加载指令,从所述原子指令指示的目标内存地址中获取原始内存数据,并将所述原始内存数据分别存储至第一寄存器以及第二寄存器,得到第一内存数据以及第二内存数据;

所述第一内存数据用于进行计算,所述第二内存数据用于使得所述目标运算结果中的非有效字段保持不变。

可选地,所述将所述目标运算结果存储至所述原子指令指示的指定内存地址,包括:

基于所述目标指令序列中的条件存储指令,在检测到不存在其他访问目标内存地址的操作的情况下,将所述目标运算结果写入所述目标内存地址;

在检测到存在其他访问目标内存地址的操作的情况下,重新执行所述基于所述目标指令序列中的链接加载指令,从所述原子指令指示的目标内存地址中获取原始内存数据的操作。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以预测方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。

以上对本发明所提供的一种二进制翻译方法和装置、一种电子设备以及一种储存介质,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

相关技术
  • 电子设备的显示控制方法、装置、电子设备和存储介质
  • 电子设备控制方法及装置、电子设备及存储介质
  • 数据分布存储方法、装置、存储介质及电子设备
  • 存储清理方法、装置、电子设备及存储介质
  • 多版本数据存储管理方法及装置、电子设备、存储介质
  • 二进制翻译方法、装置、电子设备及存储介质
  • 二进制翻译方法、装置、电子设备及存储介质
技术分类

06120116481336