CN105446791B - 标志位模拟方法、装置和处理器 - Google Patents

标志位模拟方法、装置和处理器 Download PDF

Info

Publication number
CN105446791B
CN105446791B CN201410424348.3A CN201410424348A CN105446791B CN 105446791 B CN105446791 B CN 105446791B CN 201410424348 A CN201410424348 A CN 201410424348A CN 105446791 B CN105446791 B CN 105446791B
Authority
CN
China
Prior art keywords
result
operand
register
under
instruction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201410424348.3A
Other languages
English (en)
Other versions
CN105446791A (zh
Inventor
魏振伟
屈秋雯
王策
汪清
黄文君
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Loongson Technology Corp Ltd
Original Assignee
Loongson Technology Corp Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Loongson Technology Corp Ltd filed Critical Loongson Technology Corp Ltd
Priority to CN201410424348.3A priority Critical patent/CN105446791B/zh
Publication of CN105446791A publication Critical patent/CN105446791A/zh
Application granted granted Critical
Publication of CN105446791B publication Critical patent/CN105446791B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Executing Machine-Instructions (AREA)

Abstract

本发明实施例提供一种标志位模拟方法、装置和处理器,其中,该方法包括:根据第一系统下的分支跳转指令,对执行第一运算的第一操作数与第二操作数进行第二运算,获得运算结果,所述第一运算为第一系统下影响标志位的运算,所述第二运算为第二系统下产生与所述第一系统下的分支跳转指令中所使用的标志位具有相同语义的运算;将所述运算结果存储至预设寄存器中;根据所述第一系统下的分支跳转指令,利用所述预设寄存器中存储的所述运算结果生成所述第二系统下对应的分支跳转指令序列,以执行所述第二系统下的分支跳转指令。从而实现第一系统中的标志位在第二系统中的模拟过程,进而根据模拟的标志位实现分支跳转指令。

Description

标志位模拟方法、装置和处理器
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种标志位模拟方法、装置和处理器。
背景技术
无内部互锁流水级的微处理器(Microprocessor without interlocked piped,简称:MIPS)系统是一种采取精简指令集计算机(Reduced Instruction Set Computer,简称:RISC)的处理系统,MIPS系统对指令数目和寻址方式都做了精简,使其实现更容易,指令并行执行程度更好,编译效率更高。X86系统是当前广泛应用的复杂指令集计算机(ComplexInstruction Set Computer,简称:CISC)的处理系统,X86系统的指令系统庞大,指令功能复杂,指令格式、寻址方式多,有专用指令来完成特定功能,目前大量的软件运行在X86系统上。
如果需要将基于X86系统上的软件移植至基于MIPS系统,需要实现X86系统与MIPS系统兼容,也即将X86系统下的指令翻译成语义上等价的MIPS系统下的指令,但是,X86系统下的一些影响状态标志位的指令所跟随的跳转指令在MIPS系统下并不存在等价的指令,同时X86系统下的标志寄存器(eflags)在MIPS系统下并不存在对应的寄存器,不能对状态标志位进行标识,从而无法直接根据状态标志位执行分支跳转,实现分支跳转指令。
发明内容
本发明实施例提供一种标志位模拟方法、装置和处理器,可以解决在X86系统下影响状态标志位的指令跟随的分支跳转指令在MIPS系统下的兼容性问题,在MIPS系统下实现影响状态标志位的指令跟随的分支跳转指令。
第一方面,本发明实施例提供一种标志位模拟方法,包括:
根据第一系统下的分支跳转指令,对执行第一运算的第一操作数与第二操作数进行第二运算,获得运算结果,所述第一运算为第一系统下影响标志位的运算,所述第二运算为第二系统下产生与所述第一系统下的分支跳转指令中所使用的标志位具有相同语义的运算;
将所述运算结果存储至预设寄存器中;
根据所述第一系统下的分支跳转指令,利用所述预设寄存器中存储的所述运算结果生成所述第二系统下对应的分支跳转指令序列,以执行所述第二系统下的分支跳转指令。
第二方面,本发明实施例提供一种标志位模拟装置,包括:
运算单元,用于根据第一系统下的分支跳转指令,对执行第一运算的第一操作数与第二操作数进行第二运算,获得运算结果,所述第一运算为第一系统下影响标志位的运算,所述第二运算为第二系统下产生与所述第一系统下的分支跳转指令中所使用的标志位具有相同语义的运算;
存储单元,用于将所述运算单元获得的所述运算结果存储至预设寄存器中;
处理单元,用于根据所述第一系统下的分支跳转指令,利用所述预设寄存器中存储的所述运算结果生成所述第二系统下对应的分支跳转指令序列,以执行所述第二系统下的分支跳转指令。
第三方面,本发明实施例提供一种处理器,包括如上所述的标志位模拟装置。
本发明实施例提供的标志位模拟方法、装置和处理器,通过根据第一系统下的分支跳转指令,对执行第一运算的第一操作数与第二操作数进行运算,获得运算结果;将所述运算结果存储至预设寄存器中;利用所述预设寄存器中存储的所述运算结果生成所述第二系统下对应的分支跳转指令序列,以执行所述第二系统下的分支跳转指令。从而实现第一系统中的标志位在第二系统中的模拟过程,进而根据模拟的标志位实现分支跳转指令。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明标志位模拟方法实施例一的流程图;
图2为本发明标志位模拟方法实施例二的流程图;
图3为本发明标志位模拟方法实施例三的流程图;
图4为本发明标志位模拟方法实施例四的流程图;
图5为本发明标志位模拟方法实施例五的流程图;
图6为本发明标志位模拟方法实施例六的流程图;
图7为本发明标志位模拟装置实施例一的结构示意图;
图8为本发明处理器实施例的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明标志位模拟方法实施例一的流程图,如图1所示,本实施例的方法可以包括:
S101、根据第一系统下的分支跳转指令,对执行第一运算的第一操作数与第二操作数进行第二运算,获得运算结果,所述第一运算为第一系统下影响标志位的运算,所述第二运算为第二系统下产生与所述第一系统下的分支跳转指令中所使用的标志位具有相同语义的运算。
S102、将所述运算结果存储至预设寄存器中。
S103、根据所述第一系统下的分支跳转指令,利用所述预设寄存器中存储的所述运算结果生成所述第二系统下对应的分支跳转指令序列,以执行所述第二系统下的分支跳转指令。
本实施例中,可选地,第一系统为X86系统,第二系统为MIPS系统,可以通过虚拟机在MIPS系统下运行X86系统下的指令,或者,手动将X86系统下的指令移植为MIPS系统下相应的指令。对于X86系统下的一些指令,例如cmp指令和test指令会根据指令运算结果设置标志寄存器(eflags)中相关的标志位。在随后的分支跳转指令中,会根据标志寄存器中相关标志位是否设置进行跳转。而在MIPS系统下没有专门的标志寄存器,虽然cmp指令可由减法指令进行兼容,但是运算结果对标志位产生的影响无法明确进行保存。为使上述指令正确运行于MIPS结构下,需要对标志位进行模拟操作。
本实施例中可以获取参与运算的两个操作数,分别为第一操作数和第二操作数,根据第一系统下的分支跳转指令,对执行第一运算的第一操作数与第二操作数进行第二运算,获得运算结果。所述第一系统下的分支跳转指令是指跟随在算术运算或逻辑运算等指令之后的条件转移指令,该条件转移指令是在算术运算或逻辑运算等指令对标志位的影响之后,根据标志位的影响结果进行跳转的指令。例如:
cmp a,b
jz label
上述两条指令是在X86系统下的指令,其中,“cmp a,b”这一逻辑运算指令会对各个状态标志位产生影响,包括零标志位ZF、进位标志位CF、符号标志位SF、溢出标志位OF、奇偶标志位PF等。“JZ label”这一条件转移指令是在X86系统下的分支跳转指令,它表示根据零标志位ZF的结果进行跳转,当ZF的结果为0时,跳转至label所指的地址。
在S101中,根据第一系统下所使用的标志位,对执行第一运算的第一操作数与第二操作数进行第二运算。根据上述例子“JZ label”中使用的是零标志位,对执行X86系统下“cmp a,b”这一算术运算(第一运算)的第一操作数“a”与第二操作数“b”进行相减运算(第二运算),得到相减结果。
将这一运算结果存储至预设寄存器中,然后根据第一系统下的分支跳转指令,利用该预设寄存器中存储的该运算结果生成该第二系统下对应的分支跳转指令序列,从而可以执行该第二系统下的分支跳转指令。例如:根据第一系统下的分支跳转指令,将预设寄存器与零号寄存器进行运算,也即将预设寄存器中存储的该运算结果与零号寄存储器中存储的数据进行比较,获得比较结果,该零号寄存器中存储的数据设置为0,然后根据比较结果,执行第二系统下的分支跳转指令,也即,使用比较结果来模拟状态标识位,根据模拟的状态标识位来执行分支跳转指令。
本发明实施例提供的标志位模拟方法,通过根据第一系统下的分支跳转指令,对执行第一运算的第一操作数与第二操作数进行运算,获得运算结果;将所述运算结果存储至预设寄存器中;利用所述预设寄存器中存储的所述运算结果生成所述第二系统下对应的分支跳转指令序列,以执行所述第二系统下的分支跳转指令。从而实现第一系统中的标志位在第二系统中的模拟过程,进而根据模拟的标志位实现分支跳转指令。
图2为本发明标志位模拟方法实施例二的流程图,如图2所示,本实施例中的第一系统为X86系统,第二系统为MIPS系统,X86系统下的分支跳转指令中所使用的标志位为进位标志位(CF)、零标志位(ZF)或者符号标志位(SF),本实施例的方法可以包括:
S201、将第一操作数存储至第一寄存器中,以及将第二操作数存储至第二寄存器中。
本实施例中,当需要执行X86系统下第一运算所对应的第二运算时,可以将执行第一运算的第一操作数存储至第一寄存器中,例如:可以从内存中将第一操作数取出并存储至第一寄存器中,或者从原本存储第一操作数的寄存器中将第一操作数取出并存储到第一寄存器中。也可以将第二操作数存储至第二寄存器中,例如:可以从内存中将第二操作数取出并存储至第二寄存器中,或者从原本存储第二操作数的寄存器中将第二操作数取出并存储到第二寄存器中。其中,第一寄存器与第二寄存器可以为预先设置好的临时寄存器。
S202、根据X86系统下的分支跳转指令,对执行X86系统中第一运算的第一操作数与第二操作数进行MIPS系统中的第二运算,获得运算结果。
S203、将所述运算结果存储至预设寄存器中。
本实施例中,可以通过对第一寄存器与第二寄存器进行MIPS系统中的第二运算,来实现对第一操作数与第二操作数进行MIPS系统中第二运算,获得运算结果,并将该运算结果存储至预设寄存器中,该预设寄存器可以为第一寄存器或者第二寄存器,也可以为不同于第一寄存器和第二寄存器的第三寄存器。
在第一种可行的实现方式中,第一运算为X86系统中cmp指令,则第二运算为MIPS系统中相减运算,即将执行X86系统中cmp指令的第一操作数与第二操作数进行MIPS系统中的相减运算,获得相减结果,将该相减结果存储至预设寄存器中。以预设寄存器为第一寄存器为例,在获得相减结果后,将第一寄存器中存储的第一操作数替换为相减结果,也即将该相减结果存储至第一寄存器中。S202和S203可以通过MIPS系统中的subu指令来实现;具体可以为:subu cmpTemp1,cmpTemp1,cmpTemp2;其中,subu表示MIPS系统下的相减指令,cmpTemp1表示第一寄存器,cmpTemp2表示第二寄存器。
在第二种可行的实现方式中,第一运算为X86系统中test指令,则第二运算为MIPS系统中逻辑与运算,即将执行X86系统中test指令的第一操作数与第二操作数进行MIPS系统中的逻辑与运算,获得逻辑与结果,将该逻辑与结果存储至预设寄存器中。以预设寄存器为第一寄存器为例,在获得逻辑与结果后,将第一寄存器中存储的第一操作数替换为逻辑与结果,也即将该逻辑与结果存储至第一寄存器中。S202和S203可以通过MIPS系统中的and指令来实现;具体可以为:and cmpTemp1,cmpTemp1,cmpTemp2;其中,and表示MIPS系统下的逻辑与指令,cmpTemp1表示第一寄存器,cmpTemp2表示第二寄存器。
在第三种可行的实现方式中,第一运算为X86系统中加法,则第二运算为MIPS系统中相加运算,即将执行X86系统中加法的第一操作数与第二操作数进行MIPS系统中的相加运算,获得相加结果,将该相加结果存储至预设寄存器中。以预设寄存器为第一寄存器为例,在获得相加结果后,将第一寄存器中存储的第一操作数替换为相加结果,也即将该相加结果存储至第一寄存器中。S202和S203可以通过MIPS系统中的addu指令来实现;具体可以为:addu cmpTemp1,cmpTemp1,cmpTemp2;其中,addu表示MIPS系统下的相加指令,cmpTemp1表示第一寄存器,cmpTemp2表示第二寄存器。
在第四种可行的实现方式中,第一运算为X86系统中减法,则第二运算为MIPS系统中相减运算,即将执行X86系统中减法的第一操作数与第二操作数进行MIPS系统中的相减运算,获得相减结果,将该相减结果存储至预设寄存器中。以预设寄存器为第一寄存器为例,在获得相减结果后,将第一寄存器中存储的第一操作数替换为相减结果,也即将该相减结果存储至第一寄存器中。S202和S203可以通过MIPS系统中的subu指令来实现;具体可以为:subu cmpTemp1,cmpTemp1,cmpTemp2;其中,subu表示MIPS系统下的相减指令,cmpTemp1表示第一寄存器,cmpTemp2表示第二寄存器。
S204、利用与所述X86系统下的分支跳转指令相对应的相对跳转指令,所述预设寄存器中存储的所述运算结果与零号寄存器中的数据,生成在所述MIPS系统下与所述X86系统下的分支跳转指令相对应的分支跳转指令,以执行所述MIPS系统下的分支跳转指令。
本实施例中,执行所述MIPS系统下的分支跳转指令可以包括如下所述的具体实现方式,其中,零号寄存器中的数据可以为0。
在第一种可行的实现方式中,若确定所述预设寄存器中存储的所述运算结果等于所述零号寄存器中存储的数据,则将当前指令跳转至所述运算结果为0时所对应的地址。
本实施例中,可以将预设寄存器中存储的运算结果与零号寄存器中存储的数据进行比较,也就是确定预设寄存器中存储的运算结果是否与零号寄存器中存储的数据相等,若确定预设寄存器中存储的运算结果等于零号寄存器中存储的数据,则将当前指令跳转至运算结果为0时所对应的地址,这一过程可以通过MIPS系统下的beq指令实现;具体可以为:beq cmpTemp1,zero,label;其中,beq表示MIPS系统下相等的指令,cmpTemp1表示预设寄存器(例如第一寄存器),zero表示零号寄存器,label指向的地址为“运算结果=0”所对应的地址,从而可以在MIPS系统下完成X86系统下的分支跳转指令JZ/JE;否则(即预设寄存器中存储的运算结果不等于零号寄存器中存储的数据)跳过将当前指令跳转至运算结果为0时所对应的地址的这一指令,顺序执行这一指令的下一条指令,即跳过指令:beq cmpTemp1,zero,label;执行beq cmpTemp1,zero,label的下一条指令。
在第二种可行的实现方式中,若确定所述预设寄存器中存储的所述运算结果不等于所述零号寄存器中存储的数据,则将当前指令跳转至所述运算结果不为0时所对应的地址。
本实施例中,可以将预设寄存器中存储的运算结果与零号寄存器中存储的数据进行比较,也就是确定预设寄存器中存储的运算结果是否与零号寄存器中存储的数据相等,若确定预设寄存器中存储的运算结果不等于零号寄存器中存储的数据,则将当前指令跳转至运算结果不为0时所对应的地址,这一过程可以通过MIPS系统下的bne指令实现;具体可以为:bne cmpTemp1,zero,label;其中,bne表示MIPS系统下不相等的指令,cmpTemp1表示预设寄存器(例如第一寄存器),zero表示零号寄存器,label指向的地址为“运算结果!=0”所对应的地址,从而可以在MIPS系统下完成X86系统下的跳转指令JNZ/JNE;否则(即预设寄存器中存储的运算结果等于零号寄存器中存储的数据)跳过将当前指令跳转至运算结果不为0时所对应的地址的这一指令顺序,执行这一指令的下一条指令,即跳过指令:bnecmpTemp1,zero,label;执行bne cmpTemp1,zero,label的下一条指令。
在第三种可行的实现方式中,若确定所述预设存储器中存储的所述运算结果小于所述零号寄存器中存储的数据,则将当前指令跳转至所述运算结果小于0所对应的地址。
本实施例中,可以将预设寄存器中存储的运算结果与零号寄存器中存储的数据进行比较,也就是确定预设寄存器中存储的运算结果是否小于零号寄存器中存储的数据,若确定预设寄存器中存储的运算结果小于零号寄存器中存储的数据,则将当前指令跳转至运算结果小于0时所对应的地址;如果第一操作数与第二操作数为无符号数,这一过程可以通过MIPS系统下的bltu指令实现;具体可以为:bltu cmpTemp1,zero,label;其中,bltu表示MIPS系统下小于的指令,cmpTemp1表示预设寄存器(例如第一寄存器),zero表示零号寄存器,label指向的地址为“运算结果<0”所对应的地址,从而可以在MIPS系统下完成X86系统下的跳转指令JC/JB/JANE;如果第一操作数与第二操作数为有符号数,这一过程可以通过MIPS系统下的blt指令实现;具体可以为:blt cmpTemp1,zero,label;其中,blt表示MIPS系统下小于的指令,从而可以MIPS系统下完成X86系统下的跳转指令JS。否则(即预设寄存器中存储的运算结果不小于零号寄存器中存储的数据)跳过将当前指令跳转至运算结果小于0时所对应的地址的这一指令,顺序执行这一指令的下一条指令,即跳过指令:bltucmpTemp1,zero,label;或者,blt cmpTemp1,zero,label;执行该指令的下一条指令。
在第四种可行的实现方式中,若确定所述预设存储器中存储的所述运算结果不小于所述零号寄存器中存储的数据,则将当前指令跳转至所述第一操作数不小于所述第二操作数所对应的地址。
本实施例中,第一操作数与第二操作数为无符号数,可以将预设寄存器中存储的运算结果与零号寄存器中存储的数据进行比较,也就是确定预设寄存器中存储的运算结果是否小于零号寄存器中存储的数据,若确定预设寄存器中存储的运算结果不小于零号寄存器中存储的数据,则将当前指令跳转至运算结果不小于0时所对应的地址,这一过程可以通过MIPS系统下的bgeu指令实现;具体可以为:bgeu cmpTemp1,zero,label;其中,bgeu表示MIPS系统下不小于的指令,cmpTemp1表示预设寄存器(例如第一寄存器),zero表示零号寄存器,label指向的地址为“运算结果>=0”所对应的地址,从而可以在MIPS系统下完成X86系统下的跳转指令JNC/JNB/JAE;否则(即预设寄存器中存储的运算结果小于零号寄存器中存储的数据)跳过将当前指令跳转至运算结果不小于0时所对应的地址的这一指令,顺序执行这一指令的下一条指令,即跳过指令:bgeu cmpTemp1,zero,label;执行bgeu cmpTemp1,zero,label的下一条指令。
在第五种可行的实现方式中,若确定所述预设存储器中存储的所述运算结果大于所述零号寄存器中存储的数据,则将当前指令跳转至所述运算结果大于0所对应的地址。
本实施例中,可以将预设寄存器中存储的运算结果与零号寄存器中存储的数据进行比较,也就是确定预设寄存器中存储的运算结果是否大于零号寄存器中存储的数据,若确定预设寄存器中存储的运算结果大于零号寄存器中存储的数据,则将当前指令跳转至运算结果大于0时所对应的地址,这一过程可以通过MIPS系统下的bgt指令实现;具体可以为:bgt cmpTemp1,zero,label,表示符号位被置位则跳转;其中,bgt表示MIPS系统下大于的指令,cmpTemp1表示预设寄存器(例如第一寄存器),zero表示零号寄存器,label指向的地址为“运算结果>0”所对应的地址,从而可以在MIPS系统下完成X86系统下的跳转指令JNS;否则(即预设寄存器中存储的运算结果不大于零号寄存器中存储的数据)跳过将当前指令跳转至运算结果大于0时所对应的地址的这一指令,顺序执行这一指令的下一条指令,即跳过指令:bgt cmpTemp1,zero,label;执行bgt cmpTemp1,zero,label的下一条指令。
在第六种可行的实现方式中,若确定所述预设存储器中存储的所述运算结果不大于所述零号寄存器中存储的数据,则将当前指令跳转至所述运算结果不大于0所对应的地址。
本实施例中,可以将预设寄存器中存储的运算结果与零号寄存器中存储的数据进行比较,也就是确定预设寄存器中存储的运算结果是否大于零号寄存器中存储的数据,若确定预设寄存器中存储的运算结果不大于零号寄存器中存储的数据,则将当前指令跳转至运算结果不大于0时所对应的地址,这一过程可以通过MIPS系统下的ble指令实现;具体可以为:ble cmpTemp1,zero,label;表示符号位没有置位则跳转;其中,ble表示MIPS系统下不大于的指令,cmpTemp1表示预设寄存器(例如第一寄存器),zero表示零号寄存器,label指向的地址为“运算结果<=0”所对应的地址;否则(即预设寄存器中存储的运算结果大于零号寄存器中存储的数据)跳过将当前指令跳转至运算结果不大于0时所对应的地址的这一指令,顺序执行这一指令的下一条指令,即跳过指令:ble cmpTemp1,zero,label;执行ble cmpTemp1,zero,label的下一条指令。
下面对X86系统下的cmp指令在MIPS系统下的模拟进行详细介绍。cmpTemp1表示第一寄存器,cmpTemp2表示第二寄存器。
以第一操作数和第二操作数为无符号数为例:
在MIPS系统下的模拟过程为:subu cmpTemp1,cmpTemp1,cmpTemp2;bgtucmpTemp1,zero,label;bgtu表示MIPS系统下大于的指令,此处的label指向的地址为“第一操作数>第二操作数”所对应的地址,表示第一操作数大于第二操作数则跳转,从而可以模拟X86系统下的分支跳转指令JA/JNBE。
在MIPS系统下的模拟过程为:subu cmpTemp1,cmpTemp1,cmpTemp2;bgeucmpTemp1,zero,label;bgeu表示MIPS系统下不大于的指令,此处的label指向的地址为“第一操作数<=第二操作数”所对应的地址,从而可以模拟X86系统下的分支跳转指令JAE/JNB。
在MIPS系统下的模拟过程为:subu cmpTemp1,cmpTemp1,cmpTemp2;bltucmpTemp1,zero,label;bltu表示MIPS系统下小于的指令,此处的label指向的地址为“第一操作数<第二操作数”所对应的地址,表示第一操作数小于第二操作数则跳转,从而可以模拟X86系统下的分支跳转指令JB/JNAE。
在MIPS系统下的模拟过程为:subu cmpTemp1,cmpTemp1,cmpTemp2;bleucmpTemp1,zero,label;bleu表示MIPS系统下不小于的指令,此处的label指向的地址为“第一操作数>=第二操作数”所对应的地址,从而可以模拟X86系统下的分支跳转指令JBE/JNA。
在MIPS系统下的模拟过程为:subu cmpTemp1,cmpTemp1,cmpTemp2;beqcmpTemp1,zero,label;beq表示MIPS系统下等于的指令,此处的label指向的地址为“第一操作数=第二操作数”所对应的地址,表示第一操作数等于第二操作数则跳转,从而可以模拟X86系统下的分支跳转指令JE。
在MIPS系统下的模拟过程为:subu cmpTemp1,cmpTemp1,cmpTemp2;bnecmpTemp1,zero,label;bne表示MIPS系统下不等于的指令,此处的label指向的地址为“第一操作数!=第二操作数”所对应的地址,从而可以模拟X86系统下的分支跳转指令JNE。
以第一操作数和第二操作数为有符号数为例:
在MIPS系统下的模拟过程为:subu cmpTemp1,cmpTemp1,cmpTemp2;bgtcmpTemp1,zero,label;bgt表示MIPS系统下大于的指令,此处的label指向的地址为“第一操作数>第二操作数”所对应的地址,表示第一操作数大于第二操作数则跳转,从而可以模拟X86系统下的分支跳转指令JG/JNLE。
在MIPS系统下的模拟过程为:subu cmpTemp1,cmpTemp1,cmpTemp2;bgecmpTemp1,zero,label;bge表示MIPS系统下不大于的指令,此处的label指向的地址为“第一操作数<=第二操作数”所对应的地址,从而可以模拟X86系统下的分支跳转指令JGE/JNL。
在MIPS系统下的模拟过程为:subu cmpTemp1,cmpTemp1,cmpTemp2;bltcmpTemp1,zero,label;blt表示MIPS系统下小于的指令,此处的label指向的地址为“第一操作数<第二操作数”所对应的地址,表示第一操作数小于第二操作数则跳转,从而可以模拟X86系统下的分支跳转指令JL/JNGE。
在MIPS系统下的模拟过程为:subu cmpTemp1,cmpTemp1,cmpTemp2;blecmpTemp1,zero,label;ble表示MIPS系统下不小于的指令,此处的label指向的地址为“第一操作数>=第二操作数”所对应的地址,从而可以模拟X86系统下的分支跳转指令JLE/JNG。
在MIPS系统下的模拟过程为:subu cmpTemp1,cmpTemp1,cmpTemp2;beqcmpTemp1,zero,label;此处的label指向的地址为“第一操作数=第二操作数”所对应的地址,表示第一操作数等于第二操作数则跳转,从而可以模拟X86系统下的分支跳转指令JE。
在MIPS系统下的模拟过程为:subu cmpTemp1,cmpTemp1,cmpTemp2;bnecmpTemp1,zero,label;此处的label指向的地址为“第一操作数!=第二操作数”所对应的地址,从而可以模拟X86系统下的分支跳转指令JNE。
本发明实施例提供的标志位模拟方法,通过将第一操作数存储至第一寄存器中,以及将第二操作数存储至第二寄存器中,根据X86系统下的分支跳转指令,对执行X86系统中第一运算的第一操作数与第二操作数进行MIPS系统中的第二运算,获得运算结果;将所述运算结果存储至预设寄存器中;利用与所述X86系统下的分支跳转指令相对应的相对跳转指令,所述预设寄存器中存储的所述运算结果与零号寄存器中的数据,生成在所述MIPS系统下与所述X86系统下的分支跳转指令相对应的分支跳转指令。从而实现X86系统中的标志位在MIPS系统中的模拟过程,进而根据模拟的标志位实现分支跳转指令。
图3为本发明标志位模拟方法实施例三的流程图,如图3所示,本实施例中的第一系统为X86系统,第二系统为MIPS系统,X86系统下的分支跳转指令中所使用的标志位为溢出标志位(OF),第一运算为X86系统的减法,本实施例的方法可以包括:
S301、将第一操作数存储至第一寄存器中,以及将第二操作数存储至第二寄存器中。
本实施例中S301的具体实现过程与本发明方法实施例二中S201的具体实现过程类似,详细可以参见本发明方法实施例二中的相关记载,此处不再赘述。
S302、根据X86系统下的分支跳转指令,对执行所述X86系统中减法的第一操作数与第二操作数进行所述MIPS系统中的异或运算,获得第一异或结果。
S303、将所述第一异或结果存储至预设寄存器中。
本实施例中,预设寄存器可以为第一寄存器或者第二寄存器,也可以为不同于第一寄存器和第二寄存器的第三寄存器。
若第一运算为X86系统中的减法,则对执行X86系统中减法的第一操作数与第二操作数进行MIPS系统中的异或运算,获得第一异或结果,并将该运算结果存储至预设寄存器中。以预设寄存器为第三寄存器为例,那么在获得第一异或结果后,将第三寄存器中存储的数据替换为第一异或结果,也即将该第一异或结果存储至第三寄存器中。S302和S303可以通过MIPS系统中的xor指令来实现,具体可以为:xor cmpTemp3,cmpTemp1,cmpTemp2;其中,xor表示MIPS系统下的异或指令,cmpTemp1表示第一寄存器,cmpTemp2表示第二寄存器,cmpTemp3表示第三寄存器。
S304、根据所述X86系统下的分支跳转指令,利用所述预设寄存器中存储的所述第一异或结果生成所述MIPS系统下对应的分支跳转指令序列,以执行所述MIPS系统下的分支跳转指令。
本实施例中,根据所述第一系统下的分支跳转指令,利用所述预设寄存器中存储的所述第一异或结果生成所述第二系统下对应的分支跳转指令序列,以执行所述MIPS系统下的分支跳转指令,包括:若确定所述预设寄存器中存储的所述第一异或结果不小于所述零号寄存器中存储的数据,则将当前指令跳转至所述第一操作数与所述第二操作数的相减结果不溢出所对应的地址;否则将所述第一操作数与所述第二操作数进行相减运算,获得相减结果,并将所述相减结果与所述第一操作数进行异或运算,获得第二异或结果,以及将所述第二异或结果存储至所述预设寄存器中;若所述预设寄存中存储的所述第二异或结果不小于所述零号寄存器中存储的数据,则将当前指令跳转至所述第一操作数与所述第二操作数的相减结果不溢出所对应的地址;否则将当前指令跳转至所述第一操作数与所述第二操作数的相减结果溢出所对应的地址。
本实施例中,预设寄存器为第三寄存器,可以将第三寄存器中存储的第一异或结果与零号寄存器中存储的数据进行比较,也就是确定第三寄存器中存储的第一异或结果是否小于零号寄存器中存储的数据,若确定第三寄存器中存储的所述第一异或结果不小于所述零号寄存器中存储的数据,则将当前指令跳转至第一操作数与第二操作数的相减结果不溢出所对应的地址,这一过程可以通过MIPS系统下的bge指令实现,具体可以为:bgecmpTemp3,zero,no_overflow_label,其中,no_overflow_label指向的地址为“第一操作数与第二操作数的相减结果不溢出”所对应的地址;从而可以在MIPS系统下完成X86系统下的跳转指令JO。
否则(即第三寄存器中存储的所述第一异或结果小于所述零号寄存器中存储的数据),跳过将当前指令跳转至所述第一操作数与所述第二操作数的相减结果不溢出所对应的地址的指令,然后将第一操作数与第二操作数进行相减运算,获得相减结果,并将相减结果与第一操作数进行异或运算,获得第二异或结果,以及将第二异或结果存储至预设寄存器中。这一过程可以通过MIPS系统下的subu指令和xor指令实现;具体可以为:subucmpTemp3,cmpTemp1,cmpTemp2;xor cmpTemp3,cmpTemp1,cmpTemp3;其中,cmpTemp3表示预设寄存器(例如第三寄存器)。
然后,可以将第三寄存器中存储的第二异或结果与零号寄存器中存储的数据进行比较,也就是确定第三寄存器中存储的第二异或结果是否小于零号寄存器中存储的数据,若预设寄存器中存储的第二异或结果不小于零号寄存器中存储的数据,则将当前指令跳转至第一操作数与第二操作数的相减结果不溢出所对应的地址,这一过程可以通过MIPS系统下的bge指令实现,具体可以为:bge cmpTemp3,zero,no_overflow_label,其中,no_overflow_label指向的地址为“第一操作数与第二操作数的相减结果不溢出”所对应的地址;从而可以在MIPS系统下完成X86系统下的跳转指令JO。
否则(即第三寄存器中存储的所述第二异或结果小于所述零号寄存器中存储的数据),将当前指令跳转至第一操作数与第二操作数的相减结果溢出所对应的地址,这一过程可以通过MIPS系统下的b指令实现,具体可以为:b overflow_label,其中,overflow_label指向的地址为“第一操作数与第二操作数的相减结果溢出”所对应的地址;从而可以在MIPS系统下完成X86系统下的跳转指令JNO。
因此,S304在MIPS系统下的模拟过程为:
bge cmpTemp3,zero,no_overflow_label;
subu cmpTemp3,cmpTemp1,cmpTemp2;
xor cmpTemp3,cmptemp1,cmpTemp3;
bge cmpTemp3,zero,no_overflow_label;
b overflow_label。
本发明实施例提供的标志位模拟方法,通过将第一操作数存储至第一寄存器中,以及将第二操作数存储至第二寄存器中,根据X86系统下的分支跳转指令,对执行所述X86系统中减法的第一操作数与第二操作数进行所述MIPS系统中的异或运算,获得第一异或结果,将所述第一异或结果存储至预设寄存器中,根据所述X86系统下的分支跳转指令,利用所述预设寄存器中存储的所述第一异或结果生成所述MIPS系统下对应的分支跳转指令序列,从而实现X86系统中的OF标志位在MIPS系统中的模拟过程,进而根据模拟的OF标志位实现分支跳转指令。
图4为本发明标志位模拟方法实施例四的流程图,如图4所示,本实施例中的第一系统为X86系统,第二系统为MIPS系统,X86系统下的分支跳转指令中所使用的标志位为OF,第一运算为X86系统的加法,本实施例的方法可以包括:
S401、将第一操作数存储至第一寄存器中,以及将第二操作数存储至第二寄存器中。
本实施例中S401的具体实现过程与本发明方法实施例二中S201的具体实现过程类似,详细可以参见本发明方法实施例二中的相关记载,此处不再赘述。
S402、根据X86系统下的分支跳转指令,对执行所述X86系统中加法的第二操作数进行所述MIPS系统中的取反操作。
S403、对执行所述X86系统中加法的第一操作数与取反操作后的第二操作数进行所述MIPS系统中的异或运算,获得第一异或结果。
S404、将所述第一异或结果存储至预设寄存器中。
本实施例中,预设寄存器可以为第一寄存器或者第二寄存器,也可以为不同于第一寄存器和第二寄存器的第三寄存器。
若第一运算为X86系统中的加法,则对执行X86系统中加法的第二操作数进行MIPS系统中的取反操作,并对执行X86系统中加法的第一操作数与取反操作后的第二操作数进行MIPS系统中的异或运算,获得第一异或结果;在获得第一异或结果后,将该运算结果存储至预设寄存器中。以预设寄存器为第三寄存器为例,那么在获得第一异或结果后,将第三寄存器中存储的数据替换为第一异或结果,也即将该第一异或结果存储至第三寄存器中。S402-S404可以通过MIPS系统中的neg指令和xor指令来实现,具体可以为:neg cmpTemp2;xor cmpTemp3,cmpTemp1,cmpTemp2;其中,neg表示MIPS系统下的取反指令,xor表示MIPS系统下的异或指令,cmpTemp1表示第一寄存器,cmpTemp2表示第二寄存器,cmpTemp3表示第三寄存器。
S405、根据所述X86系统下的分支跳转指令,利用所述预设寄存器中存储的所述第一异或结果生成所述MIPS系统下对应的分支跳转指令序列,以执行所述MIPS系统下的分支跳转指令。
本实施例中,根据所述第一系统下的分支跳转指令,利用所述预设寄存器中存储的所述第一异或结果生成所述第二系统下对应的分支跳转指令序列,以执行所述MIPS系统下的分支跳转指令,包括:若确定所述预设寄存器中存储的所述第一异或结果不小于所述零号寄存器中存储的数据,则将当前指令跳转至所述第一操作数与所述第二操作数的相加结果不溢出所对应的地址;否则将所述第一操作数与所述第二操作数进行相减运算,获得相减结果,并将所述相减结果与所述第一操作数进行异或运算,获得第二异或结果,以及将所述第二异或结果存储至所述预设寄存器中;若所述预设寄存中存储的所述第二异或结果不小于所述零号寄存器中存储的数据,则将当前指令跳转至所述第一操作数与所述第二操作数的相加结果不溢出所对应的地址;否则将当前指令跳转至所述第一操作数与所述第二操作数的相加结果溢出所对应的地址。
本实施例中,预设寄存器为第三寄存器,可以将第三寄存器中存储的第一异或结果与零号寄存器中存储的数据进行比较,也就是确定第三寄存器中存储的第一异或结果是否小于零号寄存器中存储的数据,若确定第三寄存器中存储的所述第一异或结果不小于所述零号寄存器中存储的数据,则将当前指令跳转至第一操作数与第二操作数的相加结果不溢出所对应的地址,这一过程可以通过MIPS系统下的bge指令实现,具体可以为:bgecmpTemp3,zero,no_overflow_label,其中,cmpTemp3表示预设寄存器(例如第三寄存器),zero表示零号寄存器,no_overflow_label指向的地址为“第一操作数与第二操作数的相加结果不溢出”所对应的地址,从而可以在MIPS系统下完成X86系统下的跳转指令JO。
否则(即第三寄存器中存储的所述第一异或结果小于所述零号寄存器中存储的数据),跳过将当前指令跳转至所述第一操作数与所述第二操作数的相加结果不溢出所对应的地址的指令,然后将第一操作数与第二操作数进行相减运算,获得相减结果,并将相减结果与第一操作数进行异或运算,获得第二异或结果,以及将第二异或结果存储至预设寄存器中。这一过程可以通过MIPS系统下的subu指令和xor指令实现;具体可以为:subucmpTemp3,cmpTemp1,cmpTemp2;xor cmpTemp3,cmpTemp1,cmpTemp3;其中,cmpTemp3表示预设寄存器(例如第三寄存器)。
然后,可以将第三寄存器中存储的第二异或结果与零号寄存器中存储的数据进行比较,也就是确定第三寄存器中存储的第二异或结果是否小于零号寄存器中存储的数据,若预设寄存器中存储的第二异或结果不小于零号寄存器中存储的数据,则将当前指令跳转至第一操作数与第二操作数的相加结果不溢出所对应的地址,这一过程可以通过MIPS系统下的bge指令实现,具体可以为:bge cmpTemp3,zero,no_overflow_label,其中,no_overflow_label指向的地址为“第一操作数与第二操作数的相加结果不溢出”所对应的地址;从而可以在MIPS系统下完成X86系统下的跳转指令JO。
否则(即第三寄存器中存储的所述第二异或结果小于所述零号寄存器中存储的数据),将当前指令跳转至第一操作数与第二操作数的相加结果溢出所对应的地址,这一过程可以通过MIPS系统下的b指令实现,具体可以为:b overflow_label;其中,b为MIPS系统中无条件跳转指令,overflow_label label指向的地址为“第一操作数与第二操作数的相加结果溢出”所对应的地址;从而可以在MIPS系统下完成X86系统下的跳转指令JNO。
因此,S405在MIPS系统下的模拟过程为:
bge cmpTemp3,zero,no_overflow_label;
subu cmpTemp3,cmpTemp1,cmpTemp2;
xor cmpTemp3,cmptemp1,cmpTemp3;
bge cmpTemp3,zero,no_overflow_label;
b overflow_label。
本发明实施例提供的标志位模拟方法,通过将第一操作数存储至第一寄存器中,以及将第二操作数存储至第二寄存器中,根据X86系统下的分支跳转指令,对执行所述X86系统中加法的第二操作数进行所述MIPS系统中的取反操作,并对执行所述X86系统中加法的第一操作数与取反操作后的第二操作数进行所述MIPS系统中的异或运算,获得第一异或结果,将所述第一异或结果存储至预设寄存器中,根据所述X86系统下的分支跳转指令,利用所述预设寄存器中存储的所述第一异或结果生成所述MIPS系统下对应的分支跳转指令序列,从而实现X86系统中的OF标志位在MIPS系统中的模拟过程,进而根据模拟的OF标志位实现分支跳转指令。
图5为本发明标志位模拟方法实施例五的流程图,如图5所示,本实施例中的第一系统为X86系统,第二系统为MIPS系统,X86系统下的分支跳转指令中所使用的标志位为OF或CF,第一运算为X86系统的乘法,本实施例的方法可以包括:
S501、将第一操作数存储至第一寄存器中,以及将第二操作数存储至第二寄存器中。
本实施例中S501的具体实现过程与本发明方法实施例二中S201的具体实现过程类似,详细可以参见本发明方法实施例二中的相关记载,此处不再赘述。
S502、对执行所述X86系统中乘法的第一操作数与第二操作数进行所述MIPS系统中的相乘运算,获得相乘结果。
S503、将所述相乘结果的高32位存储至第一寄存器,以及将所述相乘结果的低32位存储至第二寄存器。
本实施例中,可以对执行所述X86系统中乘法的第一操作数与第二操作数进行所述MIPS系统中的相乘运算,获得相乘结果,并相乘结果存储至第一寄存器中,S502可以通过MIPS系统下的mul指令来实现,具体可以为:mul cmpTemp1,cmpTemp1,cmpTemp2;其中,mul表示MIPS系统下的相乘指令,cmpTemp1表示第一寄存器,cmpTemp2表示第二寄存器。
本实施例中,预设寄存器包括第一寄存器和第二寄存器,S503可以通过MIPS系统下的mfhi和mflo指令来实现,具体可以为:mfhi cmpTemp1;mflo cmpTemp2;其中,mfhi表示MIPS系统下的取高32位指令,mflo表示MIPS系统下的取低32位指令。
S504、根据所述X86系统下的分支跳转指令,利用所述第一寄存器中存储的所述相乘结果的高32位和所述第二寄存器中存储的所述相乘结果的低32位,生成所述MIPS系统下对应的分支跳转指令序列,以执行所述MIPS系统下的分支跳转指令。
本实施例中,根据所述X86系统下的分支跳转指令,利用所述第一寄存器中存储的所述相乘结果的高32位和所述第二寄存器中存储的所述相乘结果的低32位,生成所述MIPS系统下对应的分支跳转指令序列,以执行所述MIPS系统下的分支跳转指令,包括:将所述相乘结果的低32位执行MIPS系统中的算术右移31位,获得移位结果;将所述相乘结果的高32位与所述移位结果进行MIPS系统中的相减运算,获得相减结果;若确定所述相减结果不等于所述零号寄存器中存储的数据,则将当前指令跳转至所述第一操作数与所述第二操作数的相乘结果溢出所对应的地址;否则将当前指令跳转至所述第一操作数与所述第二操作数的相乘结果不溢出所对应的地址。
本实施例中,在所述相乘结果的高32位存储至第一寄存器,以及将所述相乘结果的低32位存储至第二寄存器之后,将所述相乘结果的低32位执行MIPS系统中的算术右移31位,获得移位结果,可以通过MIPS系统下的sarl指令来实现,具体实现过程为:sarl 0X1FcmpTemp2,其中sarl为MIPS系统下的算术右移指令。然后将相乘结果的高32位与移位结果进行MIPS系统中的相减运算,获得相减结果,可以通过MIPS系统下的subu指令来实现,本实施例中将相减结果存储在第一寄存器中,具体实现过程为:subu cmpTemp1,cmpTemp1,cmpTemp2。
然后,可以将第一寄存器中存储的相减结果与零号寄存器中存储的数据进行比较,也就是确定第一寄存器中存储的相减结果是否等于零号寄存器中存储的数据,若确定第一寄存器中存储的相减结果不等于零号寄存器中存储的数据,则将当前指令跳转至第一操作数与第二操作数的相乘结果溢出所对应的地址,这一过程可以通过MIPS系统下的bne指令实现;具体可以为:bne cmpTemp1,zero,overflow_label;其中,overflow_label指向的地址为“第一操作数与第二操作数的相乘结果溢出”所对应的地址,从而可以在MIPS系统下完成X86系统下的分支跳转指令JNO;或者,可以在MIPS系统下完成X86系统下的JC/JB/JANE。
否则(即第一寄存器中存储的相减结果等于零号寄存器中存储的数据)将当前指令跳转至所述第一操作数与所述第二操作数的相乘结果不溢出所对应的地址,这一过程可以通过MIPS系统下的b指令实现,具体可以为:boverflow_label,其中,overflow_label指向的地址为“第一操作数与第二操作数的相乘结果溢出”所对应的地址;从而可以在MIPS系统下完成X86系统下的跳转指令JO;或者,可以在MIPS系统下完成X86系统下的JNC/JNB/JAE。
因此,S504在MIPS系统下的模拟过程为:
sarl 0X1F cmpTemp2;
subu cmpTemp1,cmpTemp1,cmpTemp2;
bne cmpTemp1,zero,overflow_label;
b no_overflow_label。
本发明实施例提供的标志位模拟方法,通过将第一操作数存储至第一寄存器中,以及将第二操作数存储至第二寄存器中,对执行所述X86系统中乘法的第一操作数与第二操作数进行所述MIPS系统中的相乘运算,获得相乘结果,将所述相乘结果的高32位存储至第一寄存器,以及将所述相乘结果的低32位存储至第二寄存器,根据所述X86系统下的分支跳转指令,利用所述第一寄存器中存储的所述相乘结果的高32位和所述第二寄存器中存储的所述相乘结果的低32位,生成所述MIPS系统下对应的分支跳转指令序列,从而实现X86系统中的OF标志位或CF标志位在MIPS系统中的模拟过程,进而根据模拟的OF标志位或CF标志位实现分支跳转指令。
需要说明的是,由于在X86系统中乘法仅影响CF和OF,而且,同时产生影响,也就是说乘法指令对OF产生影响时,也会对CF产生影响,因而,对于CF的处理方式与OF的处理方式相同。另外,在X86系统中除法不影响任何标志位,因而,在除法运算指令后不会跟随分支跳转指令。
图6为本发明标志位模拟方法实施例六的流程图,如图6所示,本实施例中的第一系统为X86系统,第二系统为MIPS系统,X86系统下的分支跳转指令中所使用的标志位为奇偶标志位(PF),第一运算为X86系统的加法或减法或test指令或cmp指令,本实施例的方法可以包括:
S601、将第一操作数存储至第一寄存器中,以及将第二操作数存储至第二寄存器中。
本实施例中S601的具体实现过程与本发明方法实施例二中S201的具体实现过程类似,详细可以参见本发明方法实施例二中的相关记载,此处不再赘述。
S602、根据X86系统下的分支跳转指令,对第一操作数与第二操作数进行MIPS系统中的相加运算或相减运算或逻辑与运算,获得运算结果。
S603、将所述运算结果存储至所述预设寄存器中。
在第一种可行的实现方式中,第一运算为X86系统的加法,则第二运算为MIPS系统中相加运算,即对执行X86系统中加法的第一操作数与第二操作数进行MIPS系统中的相加运算,获得相加结果,然后将该相加结果存储至第一寄存器中;S602和S603可以通过MIPS系统中的addu指令来实现;具体可以为:addu cmpTemp1,cmpTemp1,cmpTemp2;其中,addu表示MIPS系统下的相加指令,cmpTemp1表示第一寄存器,cmpTemp2表示第二寄存器。
在第二种可行的实现方式中,第一运算为X86系统中减法,则第二运算为MIPS系统中相减运算,即将执行X86系统中减法的第一操作数与第二操作数进行MIPS系统中的相减运算,获得相减结果,将该相减结果存储至第一寄存器中,S602和S603可以通过MIPS系统中的subu指令来实现;具体可以为:subu cmpTemp1,cmpTemp1,cmpTemp2。
在第三种可行的实现方式中,第一运算为X86系统中test指令,则第二运算为MIPS系统中逻辑与运算,即将执行X86系统中test指令的第一操作数与第二操作数进行MIPS系统中的逻辑与运算,获得逻辑与结果,将该逻辑与结果存储至第一寄存器中,S602和S603可以通过MIPS系统中的and指令来实现;具体可以为:and cmpTemp1,cmpTemp1,cmpTemp2。
在第四种可行的实现方式中,第一运算为X86系统中cmp指令,则第二运算为MIPS系统中相减运算,即将执行X86系统中cmp指令的第一操作数与第二操作数进行MIPS系统中的相减运算,获得相减结果,将该相减结果存储至第一寄存器中,S602和S603可以通过MIPS系统中的subu指令来实现;具体可以为:subu cmpTemp1,cmpTemp1,cmpTemp2。
S604、根据所述X86系统下的分支跳转指令,利用所述预设寄存器中存储的运算结果,生成所述MIPS系统下对应的分支跳转指令序列,以执行所述MIPS系统下的分支跳转指令。
本实施例中,根据所述X86系统下的分支跳转指令,利用所述预设寄存器中存储的结果,生成所述MIPS系统下对应的分支跳转指令序列,以执行所述MIPS系统下的分支跳转指令,包括:通过逻辑与运算获取所述预设寄存器存储的运算结果的低八位中的每一位;根据所述每一位大于0累加1以及所述每一位等于0累加0,获得累加结果;将所述累加结果与0X20进行相除运算,获得余数;若确定所述余数等于0,则将当前指令跳转至所述运算结果的奇偶位置位时所对应的地址;否则将当前指令跳转至所述运算结果的奇偶位未置位时所对应的地址。
本实施例中的预设寄存器为第一寄存器,该第一寄存器中存储的运算结果可以为:相加结果、相减结果、逻辑与结果;通过逻辑与运算获取所述预设寄存器存储的运算结果的低八位中的每一位,以及根据所述每一位大于0累加1以及所述每一位等于0累加0,获得累加结果,在MIPS系统下的具体模拟过程可以为:
and cmpTemp3,cmpTemp1,0X80;表示通过and指令获取第一寄存器存储的运算结果的低八位中的第一位,并存储在第三寄存器中。
sne cmpTemp3,cmpTemp3,zero;表示通过sne指令确定第三寄存器中存储的数值不为0时将第三寄存器中的数值置为1。
add cmpTemp2,cmptemp2,cmpTemp3;表示通过add指令将第二寄存器中存储的数值与第三寄存器中存储的数值相加,并存储至第二寄存器中,在执行add cmpTemp2,cmptemp2,cmpTemp3之前,还要执行将第二寄存器中的数据清0,即move cmpTemp2,zero。
and cmpTemp3,cmpTemp1,0X40;表示通过and指令获取第一寄存器中存储的结果中低八位中的第二位,并存储在第三寄存器中。
sne cmpTemp3,cmpTemp3,zero;表示通过sne指令确定第三寄存器中存储的数值不为0时将第三寄存器中的数值置为1。
add cmpTemp2,cmptemp2,cmpTemp3;表示通过add指令将第二寄存器中存储的数值与第三寄存器中存储的数值相加,并存储至第二寄存器中。
and cmpTemp3,cmpTemp1,0X20;表示通过and指令获取第一寄存器中存储的结果中低八位中的第三位,并存储在第三寄存器中。
sne cmpTemp3,cmpTemp3,zero;表示通过sne指令确定第三寄存器中存储的数值不为0时将第三寄存器中的数值置为1。
add cmpTemp2,cmptemp2,cmpTemp3;表示通过add指令将第二寄存器中存储的数值与第三寄存器中存储的数值相加,并存储至第二寄存器中。
and cmpTemp3,cmpTemp1,0X10;表示通过and指令获取第一寄存器中存储的结果中低八位中的第四位,并存储在第三寄存器中。
sne cmpTemp3,cmpTemp3,zero;表示通过sne指令确定第三寄存器中存储的数值不为0时将第三寄存器中的数值置为1。
add cmpTemp2,cmptemp2,cmpTemp3;表示通过add指令将第二寄存器中存储的数值与第三寄存器中存储的数值相加,并存储至第二寄存器中。
and cmpTemp3,cmpTemp1,0X08;表示通过and指令获取第一寄存器中存储的结果中低八位中的第五位,并存储在第三寄存器中。
sne cmpTemp3,cmpTemp3,zero;表示通过sne指令确定第三寄存器中存储的数值不为0时将第三寄存器中的数值置为1。
add cmpTemp2,cmptemp2,cmpTemp3;表示通过add指令将第二寄存器中存储的数值与第三寄存器中存储的数值相加,并存储至第二寄存器中。
and cmpTemp3,cmpTemp1,0X04;表示通过and指令获取第一寄存器中存储的结果中低八位中的第六位,并存储在第三寄存器中。
sne cmpTemp3,cmpTemp3,zero;表示通过sne指令确定第三寄存器中存储的数值不为0时将第三寄存器中的数值置为1。
add cmpTemp2,cmptemp2,cmpTemp3;表示通过add指令将第二寄存器中存储的数值与第三寄存器中存储的数值相加,并存储至第二寄存器中。
and cmpTemp3,cmpTemp1,0X02;表示通过and指令获取第一寄存器中存储的结果中低八位中的第七位,并存储在第三寄存器中。
sne cmpTemp3,cmpTemp3,zero;表示通过sne指令确定第三寄存器中存储的数值不为0时将第三寄存器中的数值置为1。
add cmpTemp2,cmptemp2,cmpTemp3;表示通过add指令将第二寄存器中存储的数值与第三寄存器中存储的数值相加,并存储至第二寄存器中。
and cmpTemp3,cmpTemp1,0X01;表示通过and指令获取第一寄存器中存储的结果中低八位中的第八位,并存储在第三寄存器中。
sne cmpTemp3,cmpTemp3,zero:表示通过sne指令确定第三寄存器中存储的数值不为0时将第三寄存器中的数值置为1。
add cmpTemp2,cmptemp2,cmpTemp3;表示通过add指令将第二寄存器中存储的数值与第三寄存器中存储的数值相加,并存储至第二寄存器中。
在获取累加结果后,将累加结果与0X20进行相除运算,获得余数;具体地,可以将第三寄存器中存储的数值置为0X20,可以通过MIPS系统下的move指令来实现,即可以为:move cmpTemp3,0X02;再通过MIPS系统下的divu指令来实现除法并将相除结果存储至第二寄存器中,即可以为:divucmpTemp2,cmpTemp2,cmpTemp3;其中,divu为MIPS系统下的相除指令;再通过MIPS系统下的mfhi指令(高32位乘法指令)来获取相除结果的余数并存储至第二寄存器中,即可以为:mfhi cmpTemp2。
然后,可以将第二寄存器中存储的余数与零号寄存器中存储的数据进行比较,也就是确定第二寄存器中存储的余数是否等于零号寄存器中存储的数据,若确定第二寄存器中存储的余数等于零号寄存器中存储的数据,当第一运算为X86系统下的加法,则将当前指令跳转至第一操作数与第二操作数的相加结果的奇偶校验位被置位所对应的地址,这一过程可以通过MIPS系统下的beq指令实现;具体可以为:beq cmpTemp2,zero,even_label;其中,even_label指向的地址为“第一操作数与第二操作数的相加结果的奇偶校验位被置位”所对应的地址。当第一运算为X86系统下的减法或cmp指令,则将当前指令跳转至第一操作数与第二操作数的相减结果的奇偶校验位被置位所对应的地址,这一过程可以通过MIPS系统下的beq指令实现;具体可以为:beq cmpTemp2,zero,even_label;其中,even_label指向的地址为“第一操作数与第二操作数的相减结果的奇偶校验位被置位”所对应的地址。当第一运算为X86系统下的乘法,则将当前指令跳转至第一操作数与第二操作数的相乘结果的奇偶校验位被置位所对应的地址,这一过程可以通过MIPS系统下的beq指令实现;具体可以为:beq cmpTemp2,zero,even_label;其中,even_label指向的地址为“第一操作数与第二操作数的相乘结果的奇偶校验位被置位”所对应的地址。当第一运算为X86系统下的test指令,则将当前指令跳转至第一操作数与第二操作数的逻辑与结果的奇偶校验位被置位所对应的地址,这一过程可以通过MIPS系统下的beq指令实现;具体可以为:beq cmpTemp2,zero,even_label;其中,even_label指向的地址为“第一操作数与第二操作数的逻辑与结果的奇偶校验位被置位”所对应的地址。从而可以在MIPS系统下完成X86系统下的分支跳转指令JP/JPE。
否则(即第一寄存器中存储的余数不等于零号寄存器中存储的数据),当第一运算为X86系统下的加法,则将当前指令跳转至第一操作数与第二操作数的相加结果的奇偶校验位未被置位所对应的地址,这一过程可以通过MIPS系统下的b指令实现;具体可以为:bodd_label;其中,odd_label指向的地址为“第一操作数与第二操作数的相加结果的奇偶校验位未被置位”所对应的地址。当第一运算为X86系统下的减法或cmp指令,则将当前指令跳转至第一操作数与第二操作数的相减结果的奇偶校验位未被置位所对应的地址,这一过程可以通过MIPS系统下的b指令实现;具体可以为:b odd_label;其中,odd_label指向的地址为“第一操作数与第二操作数的相减结果的奇偶校验位未被置位”所对应的地址。当第一运算为X86系统下的乘法,则将当前指令跳转至第一操作数与第二操作数的相乘结果的奇偶校验位未被置位所对应的地址,这一过程可以通过MIPS系统下的b指令实现;具体可以为:bodd_label;其中,odd_label指向的地址为“第一操作数与第二操作数的相乘结果的奇偶校验位未被置位”所对应的地址。当第一运算为X86系统下的test指令,则将当前指令跳转至第一操作数与第二操作数的逻辑与结果的奇偶校验位未被置位所对应的地址,这一过程可以通过MIPS系统下的b指令实现;具体可以为:b odd_label;其中,odd_label指向的地址为“第一操作数与第二操作数的逻辑与结果的奇偶校验位未被置位”所对应的地址。从而可以在MIPS系统下完成X86系统下的分支跳转指令JNP/JN0。
因此,将所述累加结果与0X20进行相除运算,获得余数;若确定所述余数等于0,则将当前指令跳转至所述运算结果的奇偶位置位时所对应的地址;否则将当前指令跳转至所述运算结果的奇偶位未置位时所对应的地址,在MIPS系统下的模拟过程为:
move cmpTemp3,0X02;
divu cmpTemp2,cmpTemp2,cmpTemp3;
mfhi cmpTemp2;
beq cmpTemp2,zero,even_label;
b odd_label。
本发明实施例提供的标志位模拟方法,通过将第一操作数存储至第一寄存器中,以及将第二操作数存储至第二寄存器中,根据X86系统下的分支跳转指令,对第一操作数与第二操作数进行MIPS系统中的相加运算或相减运算或逻辑与运算,获得运算结果;将所述运算结果存储至所述预设寄存器中;根据所述X86系统下的分支跳转指令,利用所述预设寄存器中存储的运算结果,生成所述MIPS系统下对应的分支跳转指令序列,从而实现X86系统中的PF标志位在MIPS系统中的模拟过程,进而根据模拟的PF标志位实现分支跳转指令。
图7为本发明标志位模拟装置实施例一的结构示意图,如图7所示,本实施例的装置可以包括:运算单元11、存储单元12和处理单元13,其中,运算单元11用于根据第一系统下的分支跳转指令,对执行第一运算的第一操作数与第二操作数进行第二运算,获得运算结果,所述第一运算为第一系统下影响标志位的运算,所述第二运算为第二系统下产生与所述第一系统下的分支跳转指令中所使用的标志位具有相同语义的运算;存储单元12用于将运算单元11获得的所述运算结果存储至预设寄存器中;处理单元13用于根据所述第一系统下的分支跳转指令,利用所述预设寄存器中存储的所述运算结果生成所述第二系统下对应的分支跳转指令序列,以执行所述第二系统下的分支跳转指令。
本实施例的装置,可以用于执行本发明方法实施例一的技术方案,其实现原理和技术效果类似,详细可以参见本发明上述方法实施例中的相关记载,此处不再赘述。
在本发明标志位模拟装置实施例二,本实施例的标志位模拟装置在图7所示装置结构的基础上,进一步地,所述第一系统为X86系统,第二系统为MIPS系统。
在第一种可行的实现方式中,如果所述第一系统下的分支跳转指令中所使用的标志位为CF、ZF或者SF,则运算单元11具体用于:对执行所述X86系统中test指令的第一操作数与第二操作数进行所述MIPS系统中的逻辑与运算,获得逻辑与结果;或者,对执行所述X86系统中cmp指令的第一操作数与第二操作数进行所述MIPS系统中的相减运算,获得相减结果;或者,对执行所述X86系统中加法的第一操作数与第二操作数进行所述MIPS系统中的相加运算,获得相加结果;或者,对执行所述X86系统中减法的第一操作数与第二操作数进行所述MIPS系统中的相减运算,获得相减结果。可选地,处理单元13具体用于,利用与所述第一系统下的分支跳转指令相对应的相对跳转指令,所述预设寄存器中存储的所述运算结果与零号寄存器中的数据,生成在所述第二系统下与所述第一系统下的分支跳转指令相对应的分支跳转指令。可选地,处理单元13具体用于:若确定所述预设寄存器中存储的所述运算结果等于所述零号寄存器中存储的数据,则将当前指令跳转至所述运算结果为0时所对应的地址;或者,若确定所述预设寄存器中存储的所述运算结果不等于所述零号寄存器中存储的数据,则将当前指令跳转至所述运算结果不为0时所对应的地址;或者,若确定所述预设存储器中存储的所述运算结果小于所述零号寄存器中存储的数据,则将当前指令跳转至所述运算结果小于0所对应的地址;或者,若确定所述预设存储器中存储的所述运算结果不小于所述零号寄存器中存储的数据,则将当前指令跳转至所述运算结果不小于0所对应的地址;或者,若确定所述预设存储器中存储的所述运算结果大于所述零号寄存器中存储的数据,则将当前指令跳转至所述运算结果大于0所对应的地址;或者,若确定所述预设存储器中存储的所述运算结果不大于所述零号寄存器中存储的数据,则将当前指令跳转至所述运算结果不大于0所对应的地址。
在第二种可行的实现方式中,如果所述第一系统下的分支跳转指令中所使用的标志位为溢出标志位OF,则运算单元11具体用于,对执行所述X86系统中减法的第一操作数与第二操作数进行所述MIPS系统中的异或运算,获得第一异或结果;或者,对执行所述X86系统中加法的第二操作数进行所述MIPS系统中的取反操作,并对执行所述X86系统中加法的第一操作数与取反操作后的第二操作数进行所述MIPS系统中的异或运算,获得第一异或结果;处理单元13具体用于,若确定所述预设寄存器中存储的所述第一异或结果不小于所述零号寄存器中存储的数据,则将当前指令跳转至所述第一操作数与所述第二操作数的相加结果或相减结果不溢出所对应的地址;否则将所述第一操作数与所述第二操作数进行相减运算,获得相减结果,并将所述相减结果与所述第一操作数进行异或运算,获得第二异或结果,以及将所述第二异或结果存储至所述预设寄存器中;若所述预设寄存器中存储的所述第二异或结果不小于所述零号寄存器中存储的数据,则将当前指令跳转至所述第一操作数与所述第二操作数的相加结果或相减结果不溢出所对应的地址;否则将当前指令跳转至所述第一操作数与所述第二操作数的相加结果或相减结果溢出所对应的地址。
在第三种可行的实现方式中,如果所述第一系统下的分支跳转指令中所使用的标志位为OF或者CF,则运算单元11具体用于,对执行所述X86系统中乘法的第一操作数与第二操作数进行所述MIPS系统中的相乘运算,获得相乘结果;存储单元12具体用于,将运算单元11获得的所述相乘结果的高32位存储至第一寄存器,以及将运算单元11获得的所述相乘结果的低32位存储至第二寄存器;处理单元13具体用于,将所述相乘结果的低32位执行MIPS系统中的算术右移31位,获得移位结果;将所述相乘结果的高32位与所述移位结果进行MIPS系统中的相减运算,获得相减结果;若确定所述相减结果不等于所述零号寄存器中存储的数据,则将当前指令跳转至所述第一操作数与所述第二操作数的相乘结果溢出所对应的地址;否则将当前指令跳转至所述第一操作数与所述第二操作数的相乘结果不溢出所对应的地址。
在第四种可行的实现方式中,如果所述第一系统下的分支跳转指令中所使用的标志位为奇偶标志位PF,则运算单元11具体用于:对执行所述X86系统中加法的第一操作数与第二操作数进行所述MIPS系统中的相加运算,获得相加结果;或者,对执行所述X86系统中减法的第一操作数与第二操作数进行所述MIPS系统中的相减运算,获得相减结果;或者,对执行所述X86系统中test指令的第一操作数与第二操作数进行所述MIPS系统中的逻辑与运算,获得逻辑与结果;或者,对执行所述X86系统中cmp指令的第一操作数与第二操作数进行所述MIPS系统中的相减运算,获得相减结果;存储单元12具体用于:将运算单元11获得的所述相加结果,或者,运算单元11获得的所述相减结果,或者,运算单元11获得的所述逻辑与结果,存储至所述预设寄存器中;处理单元13具体用于,通过逻辑与运算获取所述预设寄存器存储的运算结果的低八位中的每一位;根据所述每一位大于0累加1以及所述每一位等于0累加0,获得累加结果;将所述累加结果与0X20进行相除运算,获得余数;若确定所述余数等于0,则将当前指令跳转至所述运算结果的奇偶位置位时所对应的地址;若确定所述余数不等于0,则将当前指令跳转至所述运算结果的奇偶位未置位时所对应的地址。
可选地,存储单元12在运算单元11根据第一系统下的分支跳转指令,对执行第一运算的第一操作数与第二操作数进行第二运算,获得运算结果之前,还用于将所述第一操作数存储至第一寄存器中,以及将所述第二操作数存储至第二寄存器中。
本实施例的装置,可以用于执行本发明上述各方法实施例的技术方案,其实现原理和技术效果类似,详细可以参见本发明上述各方法实施例中的相关记载,此处不再赘述。
图8为本发明处理器实施例的结构示意图,如图8所示,本实施例的处理器20包括:标志位模拟装置21,其中,标志位模拟装置21可以采用图7所示的结构,其对应地,可以执行本发明方法实施例一至六中任一方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
本发明实施例提供的标志位模拟方法、装置和处理器,解决了在X86系统下影响状态标志位的指令跟随的分支跳转指令在MIPS系统下的兼容性问题,在MIPS系统下实现影响状态标志位的指令跟随的分支跳转指令。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

Claims (19)

1.一种标志位模拟方法,其特征在于,包括:
根据第一系统下的分支跳转指令,对执行第一运算的第一操作数与第二操作数进行第二运算,获得运算结果,所述第一运算为第一系统下影响标志位的运算,所述第二运算为第二系统下产生与所述第一系统下的分支跳转指令中所使用的标志位具有相同语义的运算;
将所述运算结果存储至预设寄存器中;
根据所述第一系统下的分支跳转指令,利用所述预设寄存器中存储的所述运算结果生成所述第二系统下对应的分支跳转指令序列,以执行所述第二系统下的分支跳转指令。
2.根据权利要求1所述的方法,其特征在于,所述第一系统为X86系统,所述第二系统为MIPS系统。
3.根据权利要求2所述的方法,其特征在于,如果所述第一系统下的分支跳转指令中所使用的标志位为进位标志位CF、零标志位ZF或者符号标志位SF,则所述对执行第一运算的第一操作数与第二操作数进行第二运算,获得运算结果,包括:
对执行所述X86系统中test指令的所述第一操作数与所述第二操作数进行所述MIPS系统中的逻辑与运算,获得逻辑与结果;或者,
对执行所述X86系统中cmp指令的所述第一操作数与所述第二操作数进行所述MIPS系统中的相减运算,获得相减结果;或者,
对执行所述X86系统中加法的所述第一操作数与所述第二操作数进行所述MIPS系统中的相加运算,获得相加结果;或者,
对执行所述X86系统中减法的所述第一操作数与所述第二操作数进行所述MIPS系统中的相减运算,获得相减结果。
4.根据权利要求3所述的方法,其特征在于,所述根据所述第一系统下的分支跳转指令,利用所述预设寄存器中存储的所述运算结果生成所述第二系统下对应的分支跳转指令序列,包括:
利用与所述第一系统下的分支跳转指令相对应的相对跳转指令,所述预设寄存器中存储的所述运算结果与零号寄存器中的数据,生成在所述第二系统下与所述第一系统下的分支跳转指令相对应的分支跳转指令。
5.根据权利要求4所述的方法,其特征在于,所述执行所述第二系统下的分支跳转指令,包括:
若确定所述预设寄存器中存储的所述运算结果等于所述零号寄存器中存储的数据,则将当前指令跳转至所述运算结果为0时所对应的地址;或者,
若确定所述预设寄存器中存储的所述运算结果不等于所述零号寄存器中存储的数据,则将当前指令跳转至所述运算结果不为0时所对应的地址;或者,
若确定所述预设存储器中存储的所述运算结果小于所述零号寄存器中存储的数据,则将当前指令跳转至所述运算结果小于0所对应的地址;或者,
若确定所述预设存储器中存储的所述运算结果不小于所述零号寄存器中存储的数据,则将当前指令跳转至所述运算结果不小于0所对应的地址;或者,
若确定所述预设存储器中存储的所述运算结果大于所述零号寄存器中存储的数据,则将当前指令跳转至所述运算结果大于0所对应的地址;或者,
若确定所述预设存储器中存储的所述运算结果不大于所述零号寄存器中存储的数据,则将当前指令跳转至所述运算结果不大于0所对应的地址;
其中,零号寄存器中存储的数据为0。
6.根据权利要求2所述的方法,其特征在于,如果所述第一系统下的分支跳转指令中所使用的标志位为溢出标志位OF,则所述对执行第一运算的第一操作数与第二操作数进行第二运算,获得运算结果,包括:
对执行所述X86系统中减法的所述第一操作数与所述第二操作数进行所述MIPS系统中的异或运算,获得第一异或结果;或者,对执行所述X86系统中加法的所述第二操作数进行所述MIPS系统中的取反操作,并对执行所述X86系统中加法的所述第一操作数与所述取反操作后的第二操作数进行所述MIPS系统中的异或运算,获得第一异或结果;
所述根据所述第一系统下的分支跳转指令,利用所述预设寄存器中存储的所述运算结果生成所述第二系统下对应的分支跳转指令序列,以执行所述第二系统下的分支跳转指令,包括:
若确定所述预设寄存器中存储的所述第一异或结果不小于零号寄存器中存储的数据,则将当前指令跳转至所述第一操作数与所述第二操作数的相减结果或相加结果不溢出所对应的地址;否则将所述第一操作数与所述第二操作数进行相减运算,获得相减结果,并将所述相减结果与所述第一操作数进行异或运算,获得第二异或结果,以及将所述第二异或结果存储至所述预设寄存器中;若所述预设寄存器中存储的所述第二异或结果不小于所述零号寄存器中存储的数据,则将当前指令跳转至所述第一操作数与所述第二操作数的相减结果或相加结果不溢出所对应的地址;否则将当前指令跳转至所述第一操作数与所述第二操作数的相减结果或相加结果溢出所对应的地址。
7.根据权利要求2所述的方法,其特征在于,如果所述第一系统下的分支跳转指令中所使用的标志位为OF或者CF,则所述对执行第一运算的第一操作数与第二操作数进行第二运算,获得运算结果,包括:
对执行所述X86系统中乘法的所述第一操作数与所述第二操作数进行所述MIPS系统中的相乘运算,获得相乘结果;
所述将所述运算结果存储至预设寄存器中,包括:将所述相乘结果的高32位存储至第一寄存器,以及将所述相乘结果的低32位存储至第二寄存器;
所述根据所述第一系统下的分支跳转指令,利用所述预设寄存器中存储的所述运算结果生成所述第二系统下对应的分支跳转指令序列,以执行所述第二系统下的分支跳转指令,包括:
将所述相乘结果的低32位执行所述MIPS系统中的算术右移31位,获得移位结果;将所述相乘结果的高32位与所述移位结果进行所述MIPS系统中的相减运算,获得相减结果;若确定所述相减结果不等于零号寄存器中存储的数据,则将当前指令跳转至所述第一操作数与所述第二操作数的相乘结果溢出所对应的地址;否则将当前指令跳转至所述第一操作数与所述第二操作数的相乘结果不溢出所对应的地址。
8.根据权利要求2所述的方法,其特征在于,如果所述第一系统下的分支跳转指令中所使用的标志位为奇偶标志位PF,则所述对执行第一运算的第一操作数与第二操作数进行第二运算,获得运算结果,包括:
对执行所述X86系统中加法的所述第一操作数与所述第二操作数进行所述MIPS系统中的相加运算,获得相加结果;或者,对执行所述X86系统中减法的所述第一操作数与所述第二操作数进行所述MIPS系统中的相减运算,获得相减结果;或者,对执行所述X86系统中test指令的所述第一操作数与所述第二操作数进行所述MIPS系统中的逻辑与运算,获得逻辑与结果;或者,对执行所述X86系统中cmp指令的所述第一操作数与所述第二操作数进行所述MIPS系统中的相减运算,获得相减结果;
所述将所述运算结果存储至预设寄存器中,包括:将所述相加结果,或者,所述相减结果,或者,所述逻辑与结果,存储至所述预设寄存器中;
所述根据所述第一系统下的分支跳转指令,利用所述预设寄存器中存储的所述运算结果生成所述第二系统下对应的分支跳转指令序列,以执行所述第二系统下的分支跳转指令,包括:
通过逻辑与运算获取所述预设寄存器存储的所述运算结果的低八位中的每一位;根据所述每一位大于0累加1以及所述每一位等于0累加0,获得累加结果;将所述累加结果与0X20进行相除运算,获得余数;若确定所述余数等于0,则将当前指令跳转至所述运算结果的奇偶位置位时所对应的地址;若确定所述余数不等于0,则将当前指令跳转至所述运算结果的奇偶位未置位时所对应的地址。
9.根据权利要求1-8任意一项所述的方法,其特征在于,所述根据第一系统下的分支跳转指令,对执行第一运算的第一操作数与第二操作数进行第二运算,获得运算结果之前,还包括:
将所述第一操作数存储至第一寄存器中,以及将所述第二操作数存储至第二寄存器中。
10.一种标志位模拟装置,其特征在于,包括:
运算单元,用于根据第一系统下的分支跳转指令,对执行第一运算的第一操作数与第二操作数进行第二运算,获得运算结果,所述第一运算为第一系统下影响标志位的运算,所述第二运算为第二系统下产生与所述第一系统下的分支跳转指令中所使用的标志位具有相同语义的运算;
存储单元,用于将所述运算单元获得的所述运算结果存储至预设寄存器中;
处理单元,用于根据所述第一系统下的分支跳转指令,利用所述预设寄存器中存储的所述运算结果生成所述第二系统下对应的分支跳转指令序列,以执行所述第二系统下的分支跳转指令。
11.根据权利要求10所述的装置,其特征在于,所述第一系统为X86系统,所述第二系统为MIPS系统。
12.根据权利要求11所述的装置,其特征在于,如果所述第一系统下的分支跳转指令中所使用的标志位为进位标志位CF、零标志位ZF或者符号标志位SF,则所述运算单元具体用于:
对执行所述X86系统中test指令的所述第一操作数与所述第二操作数进行所述MIPS系统中的逻辑与运算,获得逻辑与结果;或者,
对执行所述X86系统中cmp指令的所述第一操作数与所述第二操作数进行所述MIPS系统中的相减运算,获得相减结果;或者,
对执行所述X86系统中加法的所述第一操作数与所述第二操作数进行所述MIPS系统中的相加运算,获得相加结果;或者,
对执行所述X86系统中减法的所述第一操作数与所述第二操作数进行所述MIPS系统中的相减运算,获得相减结果。
13.根据权利要求12所述的装置,其特征在于,所述处理单元具体用于,利用与所述第一系统下的分支跳转指令相对应的相对跳转指令,所述预设寄存器中存储的所述运算结果与零号寄存器中的数据,生成在所述第二系统下与所述第一系统下的分支跳转指令相对应的分支跳转指令。
14.根据权利要求13所述的装置,其特征在于,所述处理单元具体用于:
若确定所述预设寄存器中存储的所述运算结果等于所述零号寄存器中存储的数据,则将当前指令跳转至所述运算结果为0时所对应的地址;或者,
若确定所述预设寄存器中存储的所述运算结果不等于所述零号寄存器中存储的数据,则将当前指令跳转至所述运算结果不为0时所对应的地址;或者,
若确定所述预设存储器中存储的所述运算结果小于所述零号寄存器中存储的数据,则将当前指令跳转至所述运算结果小于0所对应的地址;或者,
若确定所述预设存储器中存储的所述运算结果不小于所述零号寄存器中存储的数据,则将当前指令跳转至所述运算结果不小于0所对应的地址;或者,
若确定所述预设存储器中存储的所述运算结果大于所述零号寄存器中存储的数据,则将当前指令跳转至所述运算结果大于0所对应的地址;或者,
若确定所述预设存储器中存储的所述运算结果不大于所述零号寄存器中存储的数据,则将当前指令跳转至所述运算结果不大于0所对应的地址;
其中,零号寄存器中存储的数据为0。
15.根据权利要求11所述的装置,其特征在于,如果所述第一系统下的分支跳转指令中所使用的标志位为溢出标志位OF,则所述运算单元具体用于,对执行所述X86系统中减法的所述第一操作数与所述第二操作数进行所述MIPS系统中的异或运算,获得第一异或结果;或者,对执行所述X86系统中加法的所述第二操作数进行所述MIPS系统中的取反操作,并对执行所述X86系统中加法的所述第一操作数与所述取反操作后的第二操作数进行所述MIPS系统中的异或运算,获得第一异或结果;
所述处理单元具体用于,若确定所述预设寄存器中存储的所述第一异或结果不小于零号寄存器中存储的数据,则将当前指令跳转至所述第一操作数与所述第二操作数的相减结果或相加结果不溢出所对应的地址;否则将所述第一操作数与所述第二操作数进行相减运算,获得相减结果,并将所述相减结果与所述第一操作数进行异或运算,获得第二异或结果,以及将所述第二异或结果存储至所述预设寄存器中;若所述预设寄存器中存储的所述第二异或结果不小于所述零号寄存器中存储的数据,则将当前指令跳转至所述第一操作数与所述第二操作数的相减结果或相加结果不溢出所对应的地址;否则将当前指令跳转至所述第一操作数与所述第二操作数的相减结果或相加结果溢出所对应的地址。
16.根据权利要求11所述的装置,其特征在于,如果所述第一系统下的分支跳转指令中所使用的标志位为OF或者CF,则所述运算单元具体用于,对执行所述X86系统中乘法的所述第一操作数与所述第二操作数进行所述MIPS系统中的相乘运算,获得相乘结果;
所述存储单元具体用于,将所述运算单元获得的所述相乘结果的高32位存储至第一寄存器,以及将所述运算单元获得的所述相乘结果的低32位存储至第二寄存器;
所述处理单元具体用于,将所述相乘结果的低32位执行所述MIPS系统中的算术右移31位,获得移位结果;将所述相乘结果的高32位与所述移位结果进行所述MIPS系统中的相减运算,获得相减结果;若确定所述相减结果不等于零号寄存器中存储的数据,则将当前指令跳转至所述第一操作数与所述第二操作数的相乘结果溢出所对应的地址;否则将当前指令跳转至所述第一操作数与所述第二操作数的相乘结果不溢出所对应的地址。
17.根据权利要求11所述的装置,其特征在于,如果所述第一系统下的分支跳转指令中所使用的标志位为奇偶标志位PF,则所述运算单元具体用于:
对执行所述X86系统中加法的所述第一操作数与所述第二操作数进行所述MIPS系统中的相加运算,获得相加结果;或者,对执行所述X86系统中减法的所述第一操作数与所述第二操作数进行所述MIPS系统中的相减运算,获得相减结果;或者,对执行所述X86系统中test指令的所述第一操作数与所述第二操作数进行所述MIPS系统中的逻辑与运算,获得逻辑与结果;或者,对执行所述X86系统中cmp指令的所述第一操作数与所述第二操作数进行所述MIPS系统中的相减运算,获得相减结果;
所述存储单元具体用于:将所述运算单元获得的所述相加结果,或者,所述运算单元获得的所述相减结果,或者,所述运算单元获得的所述逻辑与结果,存储至所述预设寄存器中;
所述处理单元具体用于,通过逻辑与运算获取所述预设寄存器存储的所述运算结果的低八位中的每一位;根据所述每一位大于0累加1以及所述每一位等于0累加0,获得累加结果;将所述累加结果与0X20进行相除运算,获得余数;若确定所述余数等于0,则将当前指令跳转至所述运算结果的奇偶位置位时所对应的地址;若确定所述余数不等于0,则将当前指令跳转至所述运算结果的奇偶位未置位时所对应的地址。
18.根据权利要求10-17任意一项所述的装置,其特征在于,所述存储单元在所述运算单元根据第一系统下的分支跳转指令,对执行第一运算的第一操作数与第二操作数进行第二运算,获得运算结果之前,还用于将所述第一操作数存储至第一寄存器中,以及将所述第二操作数存储至第二寄存器中。
19.一种处理器,其特征在于,包括:如上权利要求10-18任意一项所述的标志位模拟装置。
CN201410424348.3A 2014-08-26 2014-08-26 标志位模拟方法、装置和处理器 Active CN105446791B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410424348.3A CN105446791B (zh) 2014-08-26 2014-08-26 标志位模拟方法、装置和处理器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410424348.3A CN105446791B (zh) 2014-08-26 2014-08-26 标志位模拟方法、装置和处理器

Publications (2)

Publication Number Publication Date
CN105446791A CN105446791A (zh) 2016-03-30
CN105446791B true CN105446791B (zh) 2018-11-20

Family

ID=55557031

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410424348.3A Active CN105446791B (zh) 2014-08-26 2014-08-26 标志位模拟方法、装置和处理器

Country Status (1)

Country Link
CN (1) CN105446791B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111079098B (zh) * 2019-12-20 2023-07-14 无锡矽杰微电子有限公司 一种mcu程序加密解密方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101145109A (zh) * 2007-11-01 2008-03-19 上海交通大学 利用中间指令集的二进制翻译方法
CN101196869A (zh) * 2007-12-29 2008-06-11 中国科学院计算技术研究所 一种risc处理器及其寄存器标志位处理方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1596283B1 (fr) * 2004-05-11 2009-07-01 St Microelectronics S.A. Protection d'un branchement dans un programme

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101145109A (zh) * 2007-11-01 2008-03-19 上海交通大学 利用中间指令集的二进制翻译方法
CN101196869A (zh) * 2007-12-29 2008-06-11 中国科学院计算技术研究所 一种risc处理器及其寄存器标志位处理方法

Also Published As

Publication number Publication date
CN105446791A (zh) 2016-03-30

Similar Documents

Publication Publication Date Title
CN105283858B (zh) 可执行近似计算指令的处理器
US10546507B2 (en) Recommending a set of learning activities based on dynamic learning goal adaptation
US10528349B2 (en) Branch synthetic generation across multiple microarchitecture generations
CN105793825B (zh) 可从过多的近似计算误差中恢复的处理器
KR101476227B1 (ko) 수학교육 서비스 시스템 및 그 서비스 방법, 수학문제 분석 및 생성 장치 및 그 방법
US10719420B2 (en) System level testing of multi-threading functionality including building independent instruction streams while honoring architecturally imposed common fields and constraints
US20170249231A1 (en) Analytic and layer-based augmentation of code reviews
Iqbal et al. A self review and external review model for teaching and assessing novice programmers
US10957212B2 (en) Cognitive essay annotation
CN105308555B (zh) 具有近似计算功能单元的处理器
CN105446791B (zh) 标志位模拟方法、装置和处理器
US11023205B2 (en) Negative zero control in instruction execution
Sweidan et al. A new efficient assembly language teaching aid for intel processors
CN105630680B (zh) 一种随机测试程序生成方法
Nayak et al. A hands-on approach in teaching computer organization & architecture through project based learning
CN106775593A (zh) 去除循环处理流程中条件判断语句的方法和装置、应用单元
US10360289B2 (en) Encoded text data management
US10102007B2 (en) Simultaneously capturing status information for multiple operating modes
CN109388427A (zh) 向量处理方法、向量处理单元和微处理器
US20110250571A1 (en) Number line tool and method
US20200175128A1 (en) Hardware incremental model checking verification
Hara et al. Register-transfer-level CPU simulator for computer architecture education and its quantitative evaluation
CN103295461A (zh) 一种用于实验的微处理器及其实验方法
CN109558582A (zh) 基于视角的句子情感分析方法及装置
Fagin et al. IASSim: a programmable emulator for the Princeton IAS/Von Neumann machine

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CP01 Change in the name or title of a patent holder
CP01 Change in the name or title of a patent holder

Address after: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing

Patentee after: Loongson Zhongke Technology Co.,Ltd.

Address before: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing

Patentee before: LOONGSON TECHNOLOGY Corp.,Ltd.