CN114691204A - 执行新增指令的系统及执行新增指令的方法 - Google Patents
执行新增指令的系统及执行新增指令的方法 Download PDFInfo
- Publication number
- CN114691204A CN114691204A CN202011591546.0A CN202011591546A CN114691204A CN 114691204 A CN114691204 A CN 114691204A CN 202011591546 A CN202011591546 A CN 202011591546A CN 114691204 A CN114691204 A CN 114691204A
- Authority
- CN
- China
- Prior art keywords
- instruction
- received
- system management
- new
- memory
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/22—Microcontrol or microprogram arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本发明涉及一种执行新增指令的系统及执行新增指令的方法,该方法包含:接收一指令;判断该接收指令是否为新增指令;以及当该接收指令为新增指令时,进入系统管理模式(System Management mode,SMM),并在该系统管理模式下通过执行至少一个旧指令来模拟该接收指令的执行。由此,在不对处理器的微体系结构进行修改的情况下,就可以在前代处理器上实现后代处理器所新增支持的指令,从而大大减少了用于设计、测试等工作的工作量,所以可以节省大量的成本。
Description
技术领域
本发明有关于一种执行指令的方法及系统,且特别有关于一种执行新增指令的方法及执行新增指令的系统。
背景技术
随着处理器功能的增强,后代处理器往往会在前代处理器的基础上增加新的指令。在前代处理器上实现后代处理器所新增支持的新增指令时,往往需要对前代处理器的微体系结构进行修改。而对微体系结构进行修改,需要进行大量的设计、测试等工作,因而成本极高。
因此,如何在不修改前代处理器的微体系结构的前提下,在前代处理器的基础上实现后代处理器所新增支持的指令,已成为本领域需要解决的问题。
发明内容
为了解决上述问题,本发明提供一种执行新增指令的方法和执行新增指令的系统。
本发明提供一种执行新增指令的方法,包含:接收一指令;判断该接收指令是否为新增指令;以及当该接收指令为新增指令时,进入系统管理模式(System Managementmode,SMM),并在该系统管理模式下通过执行至少一个旧指令来模拟该接收指令的执行。
本发明提供一种执行新增指令的系统,包含:一指令监视单元(monitor),判断一接收指令是否为新增指令;当该接收指令为增新指令时,该执行新增指令的系统进入系统管理模式,并在该系统管理模式下通过执行至少一个旧指令来模拟该接收指令的执行。
通过本发明提供的执行新增指令的方法与执行新增指令的系统,在不对处理器的微体系结构进行修改的情况下,就可以在前代处理器上实现后代处理器所新增支持的指令。从而大大减少了用于设计、测试等工作的工作量,所以可以节省大量的成本。
附图说明
图1是显示根据本发明一实施例所述的执行新增指令的系统的示意图。
图2A是显示根据本发明第一实施例所述的处理器的结构图。
图2B是显示根据本发明第二实施例所述的处理器的结构图。
图2B1是显示根据本发明第二实施例所述的指令监视单元的结构图。
图2C是显示根据本发明第三实施例所述的处理器的结构图。
图2D是显示根据本发明第四实施例所述的处理器的结构图。
图2D1是显示根据本发明第四实施例所述的指令监视单元的结构图。
图3是显示根据本发明一实施例所述的处理接收指令的流程图。
图4是显示根据本发明一实施例所述的进入系统管理模式的流程图。
图5是显示根据本发明一实施例所述的模拟器的处理流程图。
图6是显示根据本发明一实施例所述的在系统管理模式下模拟执行接收指令的例子。
图7是显示根据本发明一实施例所述的退出系统管理模式的流程图。
图8是显示根据本发明一实施例所述的执行新增指令的流程图。
图9是显示根据本发明另一实施例所述的执行新增指令的流程图。
图10是显示根据本发明另一实施例所述的执行新增指令的流程图。
其中,附图中符号的简单说明如下:
100:执行新增指令的系统;110:处理器;112:指令监视单元;114:系统管理模式出/入口;1142:系统管理模式入口;1144:系统管理模式出口;116:专用硬件;120:操作系统;130:应用程序;132:新增指令;142:模拟器;201:指令旁路转换缓冲;202、202B、202D:指令快取;203:分支预测器;204、204C、204D:重命名单元;205:保留站;206:执行单元;207:访存单元;210、210B、210C、210D:指令监视单元;2101B、2101D:指令解析单元;2102B、2102D:指令判断单元;211:专用寄存器组;220、220B、220D:私有寄存器;221、221C、221D:微码控制单元;230、230B、230D:指令译码单元;240、240C、240D:重排缓冲区;245、245C、245D:指令提交单元;260:架构寄存器;EF、EF1~EFN:模拟标识;S301~S315、S401~S411、S501~S519、S701~S729、S801~S809、S901~S913、S1001~S1009:步骤。
具体实施方式
以下说明为完成发明的较佳实现方式,其目的在于描述本发明的基本精神,但并不用以限定本发明。实际的发明内容必须参考之后的权利要求范围。
必须了解的是,使用于本说明书中的”包含”、”包括”等词,是用以表示存在特定的技术特征、数值、方法步骤、作业处理、元件以及/或组件,但并不排除可加上更多的技术特征、数值、方法步骤、作业处理、元件、组件,或以上的任意组合。
于权利要求中使用如”第一”、"第二"、"第三"等词是用来修饰权利要求中的元件,并非用来表示元件之间具有优先权顺序,先行关系,或者是一个元件先于另一个元件,或者是执行方法步骤时的时间先后顺序,仅用来区别具有相同名字的元件。
为了更好地描述本发明的实施例,下面先对本发明中用到的专用名词进行定义。
旧指令:被前代处理器原生支持的指令被称为原生指令(native instruction),也被称为已存在指令或旧指令。
未知指令:不被前代处理器原生支持的指令。
新增指令:与前代处理器相比,后代处理器所新增支持的指令。新增指令无法被前代处理器所辨识,因此对前代处理器而言属于未知指令。
新增架构寄存器:与前代处理器相比,后代处理器所新增支持的架构寄存器。新增架构寄存器在前代处理器中并不存在,因此在前代处理器上模拟执行使用新增架构寄存器的新增指令时,需要模拟新增架构寄存器。
无法辨识指令:未知指令中,除去新增指令之后剩余的那部分指令。即,无法辨识指令是指不被后代处理器原生支持的指令。
模型特别寄存器:处理器中的一类寄存器,可用于完成一些特定的功能。
陷阱:陷阱一般由软中断指令(比如INT指令)引起。当一条指令引起陷阱异常时,并不表示这条指令本身的执行出现错误。因此,当一条指令出现陷阱异常后,处理器会继续执行这条指令的下一条指令。举例来说,软件开发人员对软件程序码进行调试时,可在程序码中设置断点。在处理器上执行设置了断点的程序码时,执行到断点时,将产生一个陷阱,从而使得程序码在断点处暂停执行。软件开发人员通过处理陷阱的微码处理程序,可以查看程序码执行到断点时处理器中各架构寄存器的值或程序码中各个变量的值。并根据各架构寄存器的值或程序码中各个变量的值,判断执行到断点时程序码是否执行正常。
图1是显示根据本发明一实施例所述的执行新增指令的系统100的示意图。如图1所示,执行新增指令的系统100包含处理器110、操作系统120、应用程序130以及模拟器142。操作系统120运行于处理器110之上,用于对处理器110进行管理。应用程序130运行于操作系统120之上,可以通过操作系统120使用处理器110以及其它硬件(未示出,比如硬盘、网卡等等)提供的各种功能。模拟器142运行于处于系统管理模式(System Management Mode,SMM)下的处理器110之上。操作系统120或应用程序130,无法感知到模拟器142的执行过程。即,模拟器142执行的所有操作,对操作系统120或应用程序130是透明的。
当处理器110执行到应用程序130或操作系统120的一条新增指令时,处理器110会进入系统管理模式,并将新增指令发送给模拟器142以模拟执行上述新增指令。值得注意的是,应用程序130或操作系统120的源码一般是使用高级语言(比如C语言、C++语言,等等)和/或低级语言(比如汇编语言,等等)编写的。使用编译器(compiler)对源码进行编译后,生成可以被处理器执行的可执行代码。可执行代码由可以被处理器直接执行的指令组成。在本发明中,应用程序130或操作系统120是指经编译器对应用程序130或操作系统120的源码编译后,生成的可执行代码。下面将以图1中的处理器110执行应用程序130的指令118为例,对执行新增指令的系统100的处理过程进行简单的描述。
如图1所示,处理器110包含指令监视单元112以及系统管理模式出/入口114。系统管理模式出/入口114包含系统管理模式入口1142以及系统管理模式出口1144。图1中带数字编号的实线箭头表示指令信息的传输方向,带数字编号的虚线箭头表示指令模拟执行结果的传输方向。下面描述处理器110模拟执行新增指令132的整个过程。
首先,处理器110接收应用程序130中完成指定功能的指令118(如实线箭头1所示)。接收到指令118之后,指令监视单元112判断指令118是否为新增指令132,并生成一模拟标识(Emulation Flag,EF)。若指令118为新增指令132(模拟标识为第一数值,在一实施例中,第一数值为1),处理器110发出一系统管理中断(#SMI),同时把新增指令132的指令信息发送给系统管理模式出/入口114(如实线箭头2所示)。对于如何发出系统管理中断,为本领域技术人员的通常知识,此处就不赘述了。然后,处理器110通过执行系统管理模式入口1142进入系统管理模式,并把新增指令132的指令信息发送给模拟器142(如实线箭头3所示)。在系统管理模式中,模拟器142模拟执行新增指令132。模拟执行完新增指令132之后,模拟器142把模拟执行结果发送给系统管理模式出/入口114(如虚线箭头4所示)。然后,处理器110通过系统管理模式出口1144退出系统管理模式,并将模拟执行结果发送给应用程序130(如虚线箭头5所示)。到此,处理器110就模拟执行完了新增指令132。在一实施例中,在模拟器142模拟执行新增指令132的过程中,可以将模拟执行过程中产生的中间运算结果存入系统管理内存(SMRAM)中。
在另一实施例中,处理器110还包含专用硬件(Dedicated Hardware)116。在模拟器142模拟执行新增指令132的过程中,可以将模拟执行过程中产生的中间运算结果存入专用硬件116中。在另一实施例中,当新增指令132的操作数为新增架构寄存器时,模拟器142可以利用专用硬件116模拟上述新增架构寄存器(后文将详述)。与访问系统管理内存相比,由于模拟器142可以以较快的速度访问专用硬件116,所以可以加快模拟执行的速度。
本发明具有多种实施方式,下面通过4个实施例描述本发明。第一实施例和第二实施例描述通过将模拟标识传入流水线(即传入如图2A所示的重命名单元204、重排缓冲区240等模块)的方式进入系统管理模式的情况。第三实施例和第四实施例描述通过将模拟标识存入私有寄存器的方式进入系统管理模式的情况,这种情况下不需要将模拟标识传入流水线。第一实施例和第三实施例中的指令监视单元都是根据来自指令译码单元的接收指令的指令信息,判断接收指令是否为新增指令的。第二实施例和第四实施例中的指令监视单元都是根据来自指令快取的接收指令的机器码,判断接收指令是否为新增指令的。下面先结合图2A以及图3-7描述第一实施例。
[第一实施例]
图2A是显示根据本发明第一实施例所述的处理器的结构图。图2A所示,位于虚线左边的部分为图1所示的处理器110的结构图,位于虚线右边的模拟器142运行于处于系统管理模式下的处理器110之上。下面结合图1对图2A进行说明。
如图2A所示,处理器110包含指令旁路转换缓冲(Instruction TranslationLookaside Buffer,ITLB)201、指令快取(Instruction Cache)202以及分支预测器(BranchPredictor)203。当处理器110执行到应用程序130或是操作系统120的一指令时,处理器110的指令旁路转换缓冲201接收此指令。分支预测器203用于对条件分支进行预测,并将分支预测结果传给指令快取202。指令快取202根据分支预测结果从指令旁路转换缓冲201获取上述接收指令,然后处理器110会对上述接收指令做进一步的处理。
如图2A所示,处理器110还包含指令译码单元230、指令监视单元210、私有寄存器220、重命名单元204、保留站205、执行单元206、访存单元207、重排缓冲区240、微码控制单元221、架构寄存器260以及专用寄存器组211。指令译码单元230从指令快取202获取上述接收指令,并对上述接收指令进行处理,以生成微指令。重命名单元204从指令译码单元230接收微指令,并对接收到的微指令进行重命名处理。然后,重命名单元204将重命名后的微指令发送给保留站205和重排缓冲区240。保留站205根据上述微指令的类型,将上述微指令发送给执行单元206或访存单元207做进一步处理。重排缓冲区240接收到上述微指令后,将其存入指令条目(entry)中。重命名单元204中存放微指令的区域包含一模拟标识字段(如图2A中的EF),用于保存微指令中的模拟标识。重排缓冲区240包含多个指令条目,每个指令条目包含一模拟标识字段(如图2A中的EF1、EF2、EFN等等),用于保存微指令中的模拟标识。
指令译码单元230对接收指令进行译码以获得上述接收指令的译码信息。上述译码信息包含前缀(prefix)、转义码(escape code)、操作码(opcode)、操作数模式(ModR/M)以及其它译码信息,等等。然后,指令译码单元230根据上述译码信息生成微指令。在一实施例中,当上述接收指令为新增指令时,前述生成的微指令为空操作微指令(NOP)。指令译码单元230将上述接收指令的译码信息发送给指令监视单元210,以判断上述接收指令是否为新增指令。需要注意的是,由于指令监视单元210是通过上述接收指令的前缀、转义码、操作码、操作数模式等译码信息,来判断上述未知指令是否为新增指令的,本领域技术人员可通过组合逻辑电路来完成上述的判断操作。
指令监视单元210判断上述接收指令是否为新增指令后,生成一模拟标识。当上述接收指令为新增指令时,模拟标识为第一数值,表示上述接收指令为待模拟指令;否则模拟标识为第二数值,表示上述接收指令不是待模拟指令。在一实施例中,第一数值为1,第二数值为0。然后,指令监视单元210将上述模拟标识发送给私有寄存器220和重命名单元204。当上述模拟标识为第一数值时(表示上述接收指令为新增指令),指令译码单元230将停止从指令快取202获取指令的操作,并将上述译码信息发送给私有寄存器220。私有寄存器220存储上述模拟标识和上述译码信息。重命名单元204从指令译码单元230接收上述微指令,并且从指令监视单元210接收上述模拟标识。然后,重命名单元204为上述微指令添加一模拟标识字段EF,用于存储上述模拟标识。当上述模拟标识为第二数值时(即上述接收指令不为新增指令),处理器110将以正常的处理方式处理上述接收指令。至于如何以正常方式处理上述接收指令,例如当上述接收指令为旧指令时,正常执行上述旧指令,为本领域技术人员的通常知识,此处就不赘述了。值得注意的是,保存在私有寄存器220中的上述译码信息和模拟标识,在处理器110进行环境切换(context switch)时不会被覆盖。只有当处理器110执行另一指令时,才会覆盖保存在私有寄存器220中的上述模拟标识。举例来说,如果上述另一指令为旧指令,指令监视单元210生成一值为第二数值的模拟标识,并更新私有寄存器220的模拟标识字段;如果上述另一指令为新增指令,指令监视单元210生成一值为第一数值的模拟标识和上述另一指令的译码信息,并更新私有寄存器220的模拟标识字段和保存上述接收指令的译码信息的字段。
如图2A所示,重排缓冲区240中的EF1表示指令条目1的模拟标识字段中的模拟标识EF1,EF2表示指令条目2的模拟标识字段中的模拟标识EF2,EFN表示指令条目N的模拟标识字段中的模拟标识EFN,等等。重排缓冲区240包含指令提交单元245。当上述微指令处于等待提交(retire)状态且符合提交条件时,指令提交单元245会提交上述微指令。
指令提交单元245提交上述微指令时,如果上述微指令的模拟标识为第一数值(表示上述接收指令为新增指令),指令提交单元245会发出一系统管理中断(#SMI)。响应于上述系统管理中断,处理器110将通过如图1所示的系统管理模式入口1142,进入系统管理模式来模拟执行上述接收指令。在模拟执行上述接收指令的过程中,可以将中间运算结果存入系统管理内存或专用寄存器组211中的专用寄存器中。在一实施例中,专用寄存器组211为图1所示的专用硬件116的一部分。
下面结合图1、图2A以及图3,详细说明在第一实施例中处理器110是如何处理上述接收指令的。
请同时参照图1、图2A以及图3。如图3所示,指令译码单元230接收一指令(S301),判断接收指令是否为新增指令(S307)。如果接收指令为新增指令,则执行新增指令的系统100将模拟执行上述接收指令(S313)。详细描述如下:指令译码单元230先执行步骤S301。
在步骤S301中,指令译码单元230接收一指令。如前所述,指令译码单元230从指令快取202接收上述指令。然后执行步骤S307。
在步骤S307中,指令监视单元210判断接收指令是否为新增指令。具体而言,如图2A所示,指令译码单元230先对上述接收指令进行译码,获得译码信息。上述译码信息包含上述接收指令的前缀(prefix)、转义码(escape code)、操作码(opcode)、长度(Length)、操作数模式(ModR/M)、源操作数(寄存器或内存)以及目的操作数(寄存器或内存),等等。上述接收指令的指令指针(EIP)、转义码、操作码、长度以及操作数模式为上述接收指令的基本指令信息。上述接收指令的转义码、操作码以及操作数模式为上述接收指令的基本译码信息。然后,指令译码单元230根据上述译码信息生成微指令,并将生成的微指令发送给重命名单元204。同时,指令译码单元230将上述译码信息发送给指令监视单元210。指令监视单元210根据上述译码信息判断上述接收指令是否为新增指令。举例来说,可以将只由处理器110的后代处理器所支持的新增指令的操作码存放到一个查找表(Lookup Table)中。指令监视单元210可以查看上述接收指令的上述操作码是否存放在上述查找表中,如果上述操作码存放在上述查找表中,则表示上述接收指令为新增指令;否则,表示上述接收指令不是新增指令。在一实施例中,上述查找表存储在指令监视单元210中。指令监视单元210根据上述接收指令的前缀、转义码及操作码判断上述接收指令是否为新增指令。在另一实施例中,指令监视单元210根据上述接收指令的转义码、操作码及操作数模式判断上述接收指令是否为新增指令。
如果上述接收指令不是新增指令(步骤S307的判断结果为“否”),处理器110执行步骤S305,对上述接收指令进行正常处理。至于如何正常处理上述接收指令,为本领域技术人员的通常知识,此处就不赘述了。如果上述接收指令为新增指令(步骤S307的判断结果为“是”),处理器110执行步骤S309。
在步骤S309中,处理器110设置模拟标识,并准备模拟执行接收指令时需要用到的信息。具体而言,指令监视单元210判断出上述接收指令为新增指令后,会生成值为第一数值的模拟标识,并将上述模拟标识发送给重命名单元204和私有寄存器220。私有寄存器220把上述模拟标识存入其模拟标识字段中。重命名单元204接收到上述模拟标识和上述微指令后,会为上述微指令添加一模拟标识字段,并将上述模拟标识存入上述微指令的模拟标识字段。在一实施例中,上述接收指令为空操作微指令(NOP)。
在步骤S309中,当指令监视单元210生成的模拟标识为第一数值时,指令译码单元230还将上述接收指令的译码信息和运行环境信息存入私有寄存器220。上述运行环境信息是指,处理器110执行到上述接收指令时,处理器110的状态信息。上述运行环境信息包含上述接收指令的运行模式(即处理器110执行到上述接收指令时,处理器110的运行模式)。举例来说,运行模式包含实模式(read mode)、保护模式(protected mode)、虚拟8086模式(v8086mode)、兼容模式(compatibility mode)以及长模式(long mode),等等。
然后,重命名单元204将上述微指令发送给重排缓冲区240。如图2A所示,假设将上述微指令存入重排缓冲区240的条目1中,则EF1的值为第一数值。在一实施例中,上述微指令不需要由执行单元206执行,所以不需要将其发送给保留站205。
指令提交单元245提交上述微指令时,由于存储上述微指令的条目1中的EF1的值为第一数值,指令提交单元245发出一系统管理中断(#SMI)。然后,微码控制单元221执行步骤S311。
在步骤S311中,处理器110进入系统管理模式。具体而言,响应于上述系统管理中断,微码控制单元221执行如图1所示的系统管理中断入口1142(即进入系统管理中断的微码处理程序SMI entry)。在系统管理中断入口1142中,处理器110将保存在私有寄存器220中的模拟标识(值为第一数值)、上述接收指令的译码信息和运行环境信息存入系统管理内存,然后进入系统管理模式(后文将结合图4详述)。
然后,处理器110执行步骤S313。在步骤S313中,在系统管理模式下处理器110模拟执行上述接收指令(后文将结合图5和图6详述)。
最后,处理器110执行步骤S315,退出系统管理模式。具体而言,微码控制单元221执行如图1所示的系统管理中断出口1144(即退出系统管理中断的微码处理程序SMIexit),以退出系统管理模式(后文将结合图7详述)。
值得注意的是,在步骤S311中通过系统管理中断入口1142进入系统管理模式的实际操作上,本领域技术人员可在发出系统管理中断(#SMI)后,在进入系统管理模式对应的微码中加入一些执行保存模拟标识、上述接收指令的译码信息和运行环境信息至系统管理模式内存(SMRAM)的微码,并确保这些数据/信息不会因处理器110切换至系统管理模式而被覆写(overwrite)。再者,因为在已知技术下,进入系统管理模式的处理器110会去访问系统管理内存,所以本领域技术人可基于这部分的微码做修改,即可达到访问这些数据/信息的目的。由于这些微码会依处理器版本而不同,本领域技术人员可依据实际状况撰写对应的微码。同理,在步骤S315通过系统管理中断出口1144退出系统管理模式的实际操作上,本领域技术人员可在呼叫退出系统管理模式的指令(Resume from System managementMode,RSM)后,在退出系统管理模式对应的微码中加入一些执行将模拟执行结果从系统管理内存存入架构寄存器的微码,以将模拟执行结果传给应用程序130或操作系统120。由于这些微码会依处理器版本而不同,本领域技术人可依据实际状况撰写对应的微码。
在一实施例中,处理器110在系统管理模式下只能直接访问系统管理内存而不能直接访问内存(即系统内存,下同),并且在系统管理模式下所有中断都会被禁用。如果上述接收指令需要访问内存(比如,当上述接收指令的源操作数或目的操作数为内存操作数时),指令译码单元230会将上述接收指令译码为一特殊微指令,以便在进入系统管理模式之前,使用上述特殊微指令预先检查一下上述接收指令需要访问的内存是否能被访问。具体做法是,指令译码单元230把上述特殊微指令发送到重命名单元204。重命名单元204把上述特殊微指令发送到重排序缓冲区240和保留站205。然后,保留站205将其发送到访存单元207。访存单元207接收到上述特殊微指令后,并不会进行内存访问操作,而只是使用上述特殊微指令对上述接收指令进行权限检查,以生成检查结果。具体来说,访存单元207通过执行上述特殊微指令,实现对上述接收指令的权限检查,生成检查结果。然后,访存单元207将上述检查结果存入私有寄存器220。上述检查结果包含虚拟地址、物理地址及错误代码。如果上述内存不能被访问,则错误代码为表示具体错误的代码。举例来说,当上述错误代码中包含一个表示页面错误(Page fault)的错误代码时,表示如果访问上述内存,会产生一页面错误(Page fault)异常等。与前一实施例不同的是,在本实施例中,在步骤S311中,微码控制单元221还将保存在私有寄存器220中的上述检查结果存入系统管理内存。这样,在处理器110进入系统管理模式后,就可以根据上述检查结果中的错误代码判断上述内存是否可以访问。如果可以访问上述内存,再根据上述检查结果中的虚拟地址与物理地址去访问上述内存,以取得上述接收指令的源操作数或目的操作数。如果不能访问上述内存,则将上述检查结果中的错误代码写入系统管理内存。等退出系统管理模式后,处理器110再根据系统管理内存中保存的上述错误代码,进入对应的异常处理代码。在一实施例中,上述特殊微指令为访存预查微指令。访存预查微指令为内存读取预查微指令(ld_tickle,即loadtickle)或内存写入预查微指令(st_tickle,即store tickle)。
在另一实施例中,访存单元207使用上述特殊微指令对上述接收指令进行权限检查后,如果检查结果显示不能访问上述内存,则处理器110将直接根据检查结果中的错误代码,进入对应的异常处理代码。
图4是显示根据本发明一实施例所述的进入系统管理模式的流程图。图4即与图1所示的系统管理模式入口1142对应的微码处理程序的处理流程。如图4所示,处理器110禁用中断(S401),判断模拟标识是否为第一数值(S403)。如果步骤S403的判断结果为“是”,则进入系统管理模式。详细描述如下:处理器110先执行步骤S401。
在步骤S401中,处理器110禁用中断。本领域技术人员皆知,在系统管理模式下是禁用中断的,因此本发明中也延续此架构要求而禁用中断。至于如何禁用中断,举例来说,处理器110将IF标识清零以禁用可屏蔽中断,将TF标识清零以禁用单步中断,将DR7清零以禁用断点中断。然后,处理器110执行步骤S403。
在步骤S403中,处理器110判断模拟标识是否为第一数值。具体而言,处理器110判断私有寄存器220的模拟标识字段中保存的值是否为第一数值。如果判断结果为“否”,执行步骤S405,以执行进入系统管理模式的正常处理流程。本领域技术人员都了解系统管理模式的正常处理流程,此处就不赘述了。如果判断结果为“是”,处理器110执行步骤S407。
在步骤S407中,处理器110发出进入系统管理模式通知(Assert#smmact),以通知芯片组处理器110进入了系统管理模式。对于如何发出进入系统管理模式通知,为本领域技术人员的通常知识,此处就不赘述了。然后,处理器110执行步骤S409。
在步骤S409中,处理器110把模拟标识、接收指令的译码信息以及运行环境信息存入系统管理内存。具体而言,处理器110从私有寄存器220读取模拟标识、接收指令的译码信息以及运行环境信息,并将读取到的模拟标识、接收指令的译码信息以及运行环境信息存入系统管理内存。同时,架构寄存器中的内容(即处理器110的当前状态)也会被存入系统管理内存中。如前所述,当上述接收指令需要访问内存时,私有寄存器220中还保存上述接收指令的检查结果。处理器110还从私有寄存器220读取上述检查结果,并将读取到的上述检查结果存入系统管理内存中。系统管理内存中存储的信息如下表1所示。
表1
然后,处理器110执行步骤S411,建立系统管理模式执行环境,并进入系统管理模式。对于如何建立系统管理模式执行环境以及如何进入系统管理模式,为本领域技术人员的通常知识,此处就不赘述了。
然后,处理器110在系统管理模式下模拟执行上述接收指令(如图3所示的步骤S313)。下面结合图5进行描述。
图5是显示根据本发明一实施例所述的模拟器的处理流程图。如前所述,处理器110在系统管理模式中运行模拟器142。如图5所示,在系统管理模式中,处理器110建立模拟运行环境(S501),然后判断模拟标识是否为第一数值(S503)。如果步骤S503的判断结果为“是”,则再判断上述接收指令是否存在译码异常(S507)。如果步骤S507的判断结果为“否”,则处理器110根据上述接收指令的基本译码信息产生至少一个旧指令(S509),并执行上述至少一个旧指令(S513)。详细描述如下:首先,处理器110执行步骤S501。
在步骤S501中,处理器110建立模拟运行环境。具体而言,处理器110从系统管理内存读取模拟标识、接收指令的译码信息、接收指令的运行环境信息以及架构寄存器的信息。当上述接收指令需要访问内存时,处理器110还从系统管理内存读取检查结果。后续步骤中,将使用上述读取到的信息模拟执行上述接收指令。然后,处理器110执行步骤S503。
在步骤S503中,处理器110判断模拟标识是否为第一数值。具体而言,处理器110判断在步骤S501中读取到的模拟标识是否为第一数值。如果判断结果为“否”,处理器110执行步骤S505。在步骤S505中,处理器110执行系统管理模式的正常处理流程。对于系统管理模式的正常处理流程,为本领域技术人员的通常知识,此处就不再赘述了。如果步骤S503的判断结果为“是”,处理器110执行步骤S507。
在步骤S507中,处理器110判断是否存在译码异常。具体而言,在步骤S501中读取到的上述接收指令的运行环境信息中,包含了处理器110执行上述接收指令当时的运行环境。处理器110判断上述接收指令是否可以在上述运行环境下执行。举例来说,上述运行环境信息包含处理器110的运行模式。当上述运行模式为实模式时,如果上述接收指令不能运行在实模式下,则步骤S507的判断结果就为“是”;如果上述接收指令可以运行在实模式下,则步骤S507的判断结果就为“否”。在一实施例中,处理器110可以根据上述接收指令的操作码,通过一查找表查到上述接收指令可以在哪些运行环境下运行。
在一实施例中,上述查找表被存放在基本输入输出系统(BIOS)中。本领域技术人员皆知,执行新增指令的系统100开机启动时,会执行上述基本输入输出系统。上述基本输入输出系统中包含对系统管理模式进行初始化的代码,当执行新增指令的系统100执行到上述对系统管理模式进行初始化的代码时,会将上述查找表载入系统管理内存。然后,处理器110便能根据上述接收指令的操作码,从上述查找表查到上述接收指令可以在哪些运行环境下运行。
当处理器110判断上述接收指令存在译码异常时(步骤S507的判断结果为“是”),执行步骤S511;否则,执行步骤S509。下面先描述步骤S511。
在步骤S511中,处理器110将异常写入系统管理内存。需要注意的是,上述异常就是上述接收指令的模拟执行结果。具体而言,处理器110将上述异常(即模拟执行结果)写入系统管理内存的一异常向量表中。异常向量表用于保存模拟执行结果的部分信息。异常向量表的结构如下表2所示,异常向量表包含异常标识和异常编号2个字段。异常标识用于保存模拟执行是否成功的信息。异常标识为第一异常值时,表示存在异常(即模拟执行失败);异常标识为第二异常值时,表示不存在异常(即模拟执行成功)。在一实施例中,第一异常值为1,第二异常值为0。当异常标识为第一异常值时,异常编号字段的值为异常的编号,通常以一个整数值表示。通过异常编号,处理器110可以通过微码控制单元221找到并执行上述异常的微码处理程序。
表2
异常标识 | 异常编号 |
… | … |
在步骤S511中,当上述异常为陷阱(trap)时,处理器110将保存在系统管理内存中的上述接收指令的指令指针的值更新为:EIP+Length,以将处理器110的指令指针指向下一条要执行的指令集架构指令,其中,EIP为上述指令指针更新前的值,Length为保存在系统管理内存中的上述接收指令的长度。系统管理内存中的上述接收指令的指令指针为架构寄存器EIP对应的存储空间中存储的值。执行完步骤S511后,处理器110执行步骤S519,通过执行退出系统管理模式指令以执行如图1所示的系统管理模式出口1144。
在步骤S507中,当判断结果为不存在译码异常时(即步骤S507的判断结果为“否”时),处理器110执行步骤S509。
在步骤S509中,处理器110根据接收指令的基本译码信息产生至少一个旧指令。如前所述,上述基本译码信息至少包含上述接收指令的转义码、操作码、及操作数模式。在一实施例中,处理器110将上述接收指令对应的至少一个旧指令存放在一查找表中。然后,处理器110根据上述接收指令的操作码,从上述查找表中获取上述至少一个旧指令。在一实施例中,当上述接收指令包含转义码时,处理器110根据上述接收指令的转义码和操作码,从上述查找表中获取上述至少一个旧指令。在另一实施例中,处理器110根据上述接收指令的转义码、操作码和操作数模式,从上述查找表中获取上述至少一个旧指令。
值得注意的是,由于从上述查找表中获取到的上述至少一个旧指令中没有包含上述接收指令的源操作数和/或目的操作数等其它译码信息,所以需要将其它译码信息写入上述至少一个旧指令中,以使其可以模拟上述接收指令的执行。举例来说,处理器110将上述接收指令的源操作数和/或目的操作数的具体值,写入上述至少一个旧指令中对应的位置。然后,处理器110就可以通过执行上述至少一个旧指令来模拟新增指令的执行了。在一实施例中,处理器110是根据上述接收指令的前缀,将其它译码信息写入上述至少一个旧指令中的。
在另一实施例中,上述接收指令对应的至少一个旧指令被存放在基本输入输出系统(BIOS)中。本领域技术人员皆知,执行新增指令的系统100开机启动时,会执行上述基本输入输出系统。上述基本输入输出系统中包含对系统管理模式进行初始化的代码,当系统100执行到上述对系统管理模式进行初始化的代码时,会将上述至少一个旧指令载入系统管理内存。然后,处理器110便能根据上述接收指令的操作码,从系统管理内存中获取上述至少一个旧指令。
然后,处理器110执行步骤S513。在步骤S513中,处理器110执行上述至少一个旧指令。具体而言,指令译码单元230对该至少一个旧指令进行译码,获得至少一个微指令,然后处理器110执行该至少一个微指令。在执行上述至少一个旧指令的过程中,处理器110将中间运算结果存入系统管理内存中。在另一实施例中,处理器110将中间运算结果存入专用寄存器组211中。由于处理器110访问专用寄存器组211时的速度更快,因而可以加快上述至少一个旧指令的执行速度。
在一实施例中,当上述接收指令的操作数包含新增架构寄存器时,上述新增架构寄存器是利用一专用寄存器或一系统管理内存进行模拟的。举例来说,当处理器110的后代处理器中包含一位宽为1024-bit的新增架构寄存器时,处理器110可以利用系统管理内存中一连续的1024-bit的内存空间来模拟上述新增架构寄存器。也就是说,当上述接收指令访问上述新增架构寄存器时,处理器110实际访问的是系统管理内存中的上述连续的1024-bit的内存空间。在另一实施例中,处理器110的后代处理器中包含一位宽为1024-bit的新增架构寄存器时,处理器110可以利用专用寄存器组211中的一个位宽为1024-bit的专用寄存器来模拟上述新增架构寄存器。也就是说,当上述接收指令访问上述新增架构寄存器时,处理器110实际访问的是专用寄存器组211中的上述位宽为1024-bit的专用寄存器。在另一实施例中,当专用寄存器组211中只包含位宽为512-bit的专用寄存器时,需要使用2个位宽为512-bit的专用寄存器来模拟1个位宽为1024-bit的新增架构寄存器。总之,本发明对此并不做限制,处理器110可以使用1个或多个专用寄存器来模拟1个新增架构寄存器。
当上述新增架构寄存器为上述接收指令的目的操作数(Destination operand)时,执行完上述至少一个旧指令后(即模拟执行完上述接收指令后),处理器110将上述接收指令的模拟执行结果存入上述专用寄存器或上述系统管理内存中。并且,上述模拟执行结果会被保留在上述专用寄存器或上述系统管理内存中,在处理器110进入/退出系统管理模式的过程中不会被覆写。这样,当处理器110执行另一指令,并且另一指令也为新增指令,且上述新增架构寄存器为上述另一指令的源操作数(Source operand)时,处理器110在模拟执行上述另一指令时,直接使用上述专用寄存器或上述系统管理内存中保存的上述模拟执行结果。需要注意的是,上述接收指令和上述另一指令可以是连续的,也可以不是连续的,本发明对此并不做限制。
在系统管理模式下,处理器110只能访问系统管理内存,而无法以正常的访问内存的方式访问系统内存(system memory)。本发明的一实施例中,提供了一种物理内存直接访问接口,以实现在系统管理模式下访问内存的操作。当上述接收指令包含内存操作数时,可以通过上述物理内存直接访问接口访问上述内存操作数。通过上述物理内存直接访问接口访问内存操作数的步骤如下:
第一步,处理器110将上述内存操作数的虚拟地址转换为物理地址。具体而言,处理器110通过上述物理内存直接访问接口,通过访问页表,将上述内存操作数的虚拟地址转换为物理地址。将虚拟地址转换为物理地址的步骤为:一、从系统管理内存中读出架构寄存器CR3中保存的页表基地址;二、根据页表基地址和虚拟地址进行页表查询,模拟页表查询过程后,获取到物理地址。
第二步,处理器110根据上述物理地址读取该内存操作数的数值,其中,该物理地址不在系统管理内存中。具体而言,处理器110通过一模型特别寄存器(Model SpecificRegister,MSR),根据上述物理地址读取该内存操作数的数值。具体步骤为:
第1步,处理器110将上述模型特别寄存器的地址写入一第一寄存器(ECX),并将上述物理地址写入一第二寄存器(EDX:EAX)。
第2步,处理器110执行写模型特别寄存器指令(WRMSR),以将上述内存操作数的数值存储到上述模型特别寄存器中。具体而言,处理器110执行完上述写模型特别寄存器指令后,上述物理地址会被写入上述模型特别寄存器中。然后,处理器110使用上述模型特别寄存器中存储的上述物理地址,通过执行一从物理地址加载微指令(ld_phys),将上述内存操作数的数值从系统内存加载到上述模型特别寄存器中。
第3步,处理器110执行读模型特别寄存器指令(RDMSR),以从上述模型特别寄存器中读取上述内存操作数的数值,并将读取到的上述内存操作数的数值存储到上述第二寄存器中。
执行完步骤S513后,处理器110执行步骤S515。在步骤S515中,处理器110判断是否存在运行时异常(runtime exception)。如果在执行步骤S513的过程中产生了运行时异常,则判断结果为“是”;否则,判断结果为“否”。当S515的判断结果为“是”时,处理器110执行步骤S511。前文已经描述了步骤S511,此处就不再赘述了。当S515的判断结果为“否”时,处理器110执行步骤S517。
在步骤S517中,处理器110将模拟执行结果写入系统管理内存。具体而言,首先,处理器110将第二异常值(表示没有异常)写入系统管理内存的如前表2所示的异常向量表的异常标识字段中。然后,处理器110将上述接收指令的模拟执行结果写入系统管理内存中架构寄存器对应的区域。举例来说,如果上述接收指令的模拟执行结果是将架构寄存器ECX的值改为10H(十六进制数,下同),那么处理器110就把上述数值10H写入系统管理内存中架构寄存器ECX对应的存储空间。最后,处理器110将保存在系统管理内存中的上述接收指令的指令指针的值更新为:EIP+Length,以将处理器110的指令指针指向下一条要执行的指令集架构指令,其中,EIP为指令指针更新前的值,Length为上述接收指令的长度。系统管理内存中的上述接收指令的指令指针为架构寄存器EIP对应的存储空间。退出系统管理模式时,系统管理内存中架构寄存器对应的空间中的值会被写入对应的架构寄存器中,以将新增指令的模拟模拟执行结果发送给应用程序130或操作系统120,后文将对此进行详述。
然后,处理器110执行步骤S519。在步骤S519在,处理器110执行退出系统管理模式指令(Resume from System Management mode)。执行退出系统管理模式指令后,处理器110将执行如图1所示的系统管理模式出口1144的微码处理程序,后文将结合图7对其进行详细说明。
图6是显示根据本发明一实施例所述的在系统管理模式下模拟执行接收指令的例子。图6是以伪代码的形式,展示如何实现如图5所示的模拟执行接收指令的处理流程,是模拟器的一个具体实现。
如图6所示,第1-20行为实现模拟器的主函数simulator_start包含的代码。第21-30行为实现新增指令功能模拟函数Unsupport_X_handle包含的代码,其中包含前文所述的与接收指令对应的至少一个旧指令。下面先描述主函数simulator_start。
在主函数simulator_start中,先执行第3行代码。第3行代码完成图5的步骤S501的功能,处理器110建立模拟运行环境。在第3行代码中,处理器110通过函数setup_simulator_env来建立模拟运行环境。执行完第3行代码后,处理器110就把从系统管理内存读取到的模拟标识、接收指令的译码信息、接收指令的运行环境信息、架构寄存器的信息以及检查结果等信息保存到变量env中了。举例来说,在第4行代码中,通过env.emulation_flag访问的是模拟标识的值。第4行代码完成图5的步骤S503的功能,处理器110判断模拟标识是否为第一数值。如果第4行代码的判断结果为模拟标识不是第一数值,则执行第5行代码。第5行代码完成图5的步骤S505的功能,处理器110执行系统管理模式的正常处理流程。在第5行代码中,处理器110通过执行函数exit_to_normal_SMM来进入系统管理模式的正常处理流程。如果第4行代码的判断结果为模拟标识是第一数值,则执行第7-8行代码。第7-8行代码完成图5的步骤S507的功能,处理器110判断是否存在译码异常。在第7行代码中,处理器110通过执行函数check_decode_excep来检查并获得上述接收指令的译码异常值decode_excep。在第8行的代码中,处理器110根据decode_excep的值判断是否存在译码异常。如果存在译码异常,则执行第9行的代码。第9行代码完成图5的步骤S511的功能,处理器110将异常写入系统管理内存。在第9行代码中,处理器110通过函数set_exception将异常以前文所述表2的格式,写入系统管理内存。执行完第9行的代码后,执行第10行的代码,跳转到第18行的代码。在第10行代码中,处理器110通过指令goto跳转到标号out所在的位置(即第18行)。然后开始从第18行继续执行。由于第18行只有一个标号out,没有需要执行的代码,处理器110执行第19行的代码。第19行的代码完成图5的步骤S519的功能,处理器110执行退出系统管理模式指令。在第19行代码中,处理器110通过函数execute_rsm执行退出系统管理模式的指令。随后,处理器110将执行如图1所示的系统管理模式出口1144的微码。
如果第8行代码的判断结果为不存在译码异常,则执行第12行的代码。第12行代码完成图5的步骤S509的功能,处理器110根据接收指令的基本译码信息产生至少一个旧指令。如图6所示,在第12行代码中,是通过使用上述接收指令的操作码opcode,从表op_mapping中查找到上述至少一个旧指令的。以指针routine表示上述至少一个旧指令,routine的值为Unsupport_X_handle函数的地址。然后,执行第13行的代码。第13行代码完成图5的步骤S513的功能,处理器110执行至少一个旧指令。执行routine()时,处理器110实际执行的是模拟函数Unsupport_X_handle(后文将详述)。执行完routine后,模拟执行结果保存在了runtime_excep中。然后,执行第14行的代码。第14行代码完成图5的步骤S515的功能,处理器110判断是否存在运行时异常。在第14行代码中,处理器110根据模拟执行结果runtime_excep的值判断是否存在运行时异常。如果存在运行时异常,则执行第15行的代码。在第14行代码中,处理器110通过函数set_exception将上述运行时异常以前文所述表2的格式,存入系统管理内存。然后,处理器110执行第16行的代码,通过goto指令跳转到第18行。如前所述,处理器110接下来会执行第19行的代码。第19行代码的功能前面已经描述,此处就不赘述了。
下面描述模拟函数Unsupport_X_handle。
在模拟函数Unsupport_X_handle中,先执行第23-24行代码。第23-24行代码完成读取操作数的值的操作,读取到的操作数的值存放在数组op中。在第24行中,处理器是通过函数read_op完成读取操作数的操作的。具体来说,read_op函数是从前文所述的env变量中获取操作数的值的。第25行代码完成图5的步骤S513的功能,处理器110执行上述至少一个旧指令,即处理器110模拟执行上述接收指令。在第25行中,op表示上述接收指令的操作数,operate with op即表示将上述接收指令的操作数的值写入上述至少一个旧指令,并执行上述至少一个旧指令。在第25行的执行过程中,当产生运行时异常时,第26行代码完成图5的步骤S511的功能,处理器110将异常写入系统管理内存;当没有产生运行时异常时,第26行代码完成图5的步骤S517的功能,处理器110将模拟执行结果写入系统管理内存。在第26行中,处理器110通过函数write_result_to_SMRAM将模拟执行结果以前文所述表2的格式,存入系统管理内存。第27行代码判断执行第25行时是否产生了运行时异常,如果产生了运行时异常,执行第28行代码,将异常信息发送给主函数;否则,执行第29行代码,将执行正确的信息发送给主函数。在第28、29行代码中,处理器110是通过return指令将异常信息或执行正确的信息发送给主函数simulator_start的。
图7是显示根据本发明一实施例所述的退出系统管理模式的流程图。图7即与图1所示的系统管理模式出口1144对应的微码处理程序的处理流程。如图7所示,退出系统管理模式时,处理器110判断模拟标识是否为第一数值(S701)。如果判断结果为“是”,处理器110判断模拟执行结果是否存在异常(S705)。处理器110根据模拟执行结果是否存在异常以及异常的类型,执行退出系统管理模式的操作。详细描述如下:处理器110先执行步骤S701。
在步骤S701中,处理器110判断模拟标识是否为第一数值。具体而言,处理器110从系统管理内存读取模拟标识,然后判断读取到的上述模拟标识是否为第一数值。如果上述模拟标识不为第一数值,处理器110执行步骤S703。在步骤S703中,处理器110执行退出系统管理模式的正常处理流程。对于退出系统管理模式的正常处理流程,为本领域技术人员的通常知识,此处就不赘述了。如果上述模拟标识为第一数值,处理器110执行步骤S705。
在步骤S705中,处理器110判断模拟执行结果是否存在异常。具体而言,处理器110从系统管理内存读取如前文表2所示的异常向量表。如果异常向量表的异常标识字段的值为第一异常值,则表示模拟执行结果存在异常,判断结果为“是”;如果异常向量表的异常标识字段的值为第二异常值,则表示模拟执行结果不存在异常,判断结果为“否”。如果判断结果为“否”,处理器110执行步骤S707。
在步骤S707中,处理器110将系统管理内存中保存的模拟执行结果存入架构寄存器。如前文所述,在图5的步骤S517中,处理器110已经将上述接收指令的模拟执行结果写入了系统管理内存中架构寄存器对应的区域。在本步骤中,处理器110将系统管理内存中架构寄存器对应的区域中的值存入架构寄存器。这样,就相当于处理器110执行完了上述接收指令。
如果上述接收指令的目的操作数为新增架构寄存器,由于处理器110的架构寄存器中不包含新增架构寄存器,处理器110不会把系统管理内存中模拟新增架构寄存器的区域或模拟新增架构寄存器的专用寄存器中的模拟执行结果存入架构寄存器。如前所述,当处理器110再模拟执行另一新增指令,并且上述另一新增指令的操作数也为上述新增架构寄存器时,处理器110就可以直接使用保存在系统管理内存中的模拟上述新增架构寄存器的区域中的值或保存在模拟上述新增架构寄存器的专用寄存器中的值,来模拟上述另一新增指令的执行。
然后,处理器110执行步骤S709。在步骤S709中,处理器110启用中断。举例来说,处理器110设置IF标识以启用可屏蔽中断,设置TF标识以启用单步中断,设置DR7以启用断点中断。然后,处理器110执行步骤S711。
在步骤S711中,处理器110发出退出系统管理模式通知(Deassert#smmact),以通知芯片组处理器110退出了系统管理模式。然后,处理器110执行步骤S713,退出系统管理模式。
当在步骤S705中,处理器110判断模拟执行结果存在异常时,执行步骤S715。
在步骤S715中,处理器110判断异常类型是否为陷阱(Trap)。具体而言,处理器110根据在步骤S705中从系统管理内存中读到的异常向量表中的异常编号,判断模拟执行结果中的异常是否为陷阱。举例来说,当异常标识为第一异常值,异常编号为3时(表2中内容如下表2-1所示),表示是溢出(Overflow)异常。溢出异常的类型为陷阱,所以判断结果为“是”。当异常标识为第一异常值,异常编号为0时(表2中内容如下表2-2所示),表示是除法错误异常。除法错误异常为错误(Fault),不是陷阱,所以判断结果为“否”。
表2-1
异常标识 | 异常编号 |
1 | 3 |
表2-2
异常标识 | 异常编号 |
1 | 0 |
当步骤S715的判断结果为“否”时,处理器110执行步骤S717、S719以及S721。其中,步骤S717和步骤S719分别与步骤S709和步骤S711相同,此处就不赘述了。下面描述步骤S721。
在步骤S721中,处理器110执行异常的微码处理程序。具体来说,处理器110根据系统管理内存中存储的异常向量表中的异常标识,判断是否产生了异常。如果产生了异常,处理器110根据上述异常向量表中存储的异常编号,执行上述异常的微码处理程序。即执行与上述异常编号对应的异常的微码处理程序。举例来说,当系统管理内存中存储的异常向量表中的异常标识为第一异常值时,表示模拟执行结果存在异常。如果此时异常向量表中的异常编号为0,表示上述异常为除法错误,处理器110会执行除法错误的微码处理程序。
在步骤S715中,当判断结果为“是”,即模拟执行结果的异常类型为陷阱时,处理器110执行步骤S723、S725、S727以及S729。其中,步骤S723、S725、S727分别于步骤S707、S709、S711相同,此处就不赘述了。下面描述步骤S729。
在步骤S729中,处理器110执行异常的微码处理程序。举例来说,当模拟执行结果存在异常,并且异常为溢出异常时,处理器110执行溢出异常的微码处理程序。
[第二实施例]
在第二实施例中,处理器110会将模拟标识传入流水线,并且指令监视单元是根据来自指令快取的接收指令的机器码,判断接收指令是否为新增指令的。下面结合图2B、图2B1及图3-7描述第二实施例。
图2B中编号与图2A相同的模块的功能与图2A中对应的模块的功能相同,此处就不赘述了。下面描述第二实施例的图2B与第一实施例的图2A的不同之处。
如图2B所示,指令监视单元210B直接从指令快取202B接收指令。然后,指令监视单元210B对上述接收指令进行译码,生成译码信息。然后,指令监视单元210B根据上述译码信息判断上述接收指令是否为新增指令,并生成一模拟标识。然后,指令监视单元210B将上述模拟标识发送给重命名单元204和私有寄存器220B。当上述模拟标识为第一数值时,指令监视单元210B还将上述译码信息以及运行环境信息存入私有寄存器220B中。下面结合图2B1对指令监视单元210B进行详细描述。
如图2B1所示,指令监视单元210B包含指令解析单元2101B和指令判断单元2102B。指令解析单元2101B对来自指令快取202B的上述接收指令进行译码,生成译码信息。然后,指令解析单元2101B将上述译码信息发送给指令判断单元2102B。指令判断单元2102B根据上述译码信息判断上述接收指令是否为新增指令,并生成一模拟标识。然后,指令判断单元2102B将模拟标识发送给私有寄存器220B和重命名单元204。私有寄存器220B会保存上述模拟标识。当上述模拟标识为第一数值时,私有寄存器220B还保存来自指令解析单元2101B的上述接收指令的译码信息。
在第二实施例中,在图3的步骤S307中,与第一实施例不同的是,处理器110是通过指令监视单元210B直接对接收指令进行译码,并根据译码信息判断接收指令是否为新增指令的。在第二实施例中,图3的其它步骤以及图4-7中的步骤,均与第一实施例相同,此处就不赘述了。
综上所述,与第一实施例不同的是,在本实施例中,指令监视单元210B直接从指令快取202B读取接收指令的机器码。然后,指令监视单元210B对读取到的机器码进行解析,生成译码信息。然后,指令监视单元210B根据译码信息判断接收指令是否为新增指令。当接收指令为新增指令时,指令监视单元210B生成一值为第一数值的模拟标识。然后指令监视单元210B将生成的模拟标识发送给重命名单元204,并将译码信息发送给私有寄存器220B。与第一实施例相比,本实施例中直接对来自指令快取202B的机器码进行解析,可以不用修改指令译码单元230B,因而实现起来相对容易。
[第三实施例]
在第三实施例中,处理器110不把模拟标识传入流水线,并且指令监视单元是根据来自指令译码单元的接收指令的指令信息,判断接收指令是否为新增指令的。下面结合图2C以及图3-7描述第三实施例。
图2C中编号与图2A相同的模块的功能与图2A中对应的模块的功能相同,此处就不赘述了。第三实施例与第一实施例的不同之处是,在第三实施例中,指令监视单元210C不会把模拟标识发送给重命名单元204C。下面详细描述第三实施例的图2C与第一实施例的图2A的不同之处。
如图2C所示,指令监视单元210C判断接收指令是否为新增指令,并生成模拟标识。然后,指令监视单元210C将上述模拟标识存入私有寄存器220。当上述模拟标识为第一数值时,私有寄存器220还存储来自指令译码单元230的上述接收指令的译码信息以及运行环境信息。
指令译码单元230对上述接收指令译码后,生成译码信息。指令译码单元230根据上述译码信息生成微指令。本领域技术人员皆知,当上述接收指令不是旧指令时,上述微指令中包含一值为第一数值的未知指令标识(UD)。然后,重命名单元204C从指令译码单元230接收上述微指令,对其进行重命名处理后,发送给重排缓冲区240C。指令提交单元245C提交上述微指令时,如果上述微指令中的未知指令标识为第一数值,则产生一未知指令异常。响应于上述未知指令异常,微码控制单元221C执行未知指令异常的微码处理程序。在未知指令异常的微码处理程序中,处理器110判断私有寄存器220中的模拟标识是否为第一数值。如果私有寄存器220中的模拟标识为第一数值,处理器110发出一系统管理中断。后续处理流程与第一实施例相同,此处就不赘述了。
与第一实施例不同的是,在第三实施例中,在图3的步骤S307及S309中,指令监视单元210C不把产生的模拟标识发送给重命名单元204C。在第三实施例中,图3的其它步骤以及图4-7中的步骤均与第一实施例相同,此处就不赘述了。
综上所述,与第一实施例和第二实施例不同的是,在本实施例中,指令监视单元210C生成模拟标识后,只会把模拟标识发送给私有寄存器220,并不会把模拟标识发送给重命名单元204C和重排缓冲区240C。由于重排缓冲区240C的指令条目中不包含模拟标识,指令提交单元245C只能根据未知指令标识发出未知指令异常。在处理未知指令异常的微码处理程序中,处理器110根据私有寄存器220中存储的模拟标识,发出系统管理中断。与第一实施例和第二实施例相比,本实施例中不需要对重命名单元和重排缓冲区进行修改,因而实现起来相对容易。
[第四实施例]
在第四实施例中,处理器110不把模拟标识传入流水线,指令监视单元是根据来自指令快取的接收指令的机器码,判断接收指令是否为新增指令的。下面结合图2D、图2D1以及图3-7描述第四实施例。
图2D中编号与图2A相同的模块的功能与图2A中对应的模块的功能相同,此处就不赘述了。第四实施例与第三实施例的不同之处是,在第四实施例中,指令监视单元210D直接从指令快取202D中获取接收指令,并判断上述接收指令是否为新增指令。图2D的模块204D、240D、245D以及221D,分别与图2C中的模块204C、240C、245C以及221C相同,此处就不赘述了。下面详细描述第四实施例的图2D与第一实施例的图2C的不同之处。
如图2D所示,指令监视单元210D直接从指令快取202D接收指令。然后,指令监视单元210D对上述接收指令进行译码,生成译码信息。然后,指令监视单元210D根据上述译码信息判断上述接收指令是否为新增指令,并生成一模拟标识。然后,指令监视单元210D将上述模拟标识发送给私有寄存器220D。当上述模拟标识为第一数值时,指令监视单元210D还将上述译码信息以及运行环境信息存入私有寄存器220D中。下面结合图2D1对指令监视单元210D进行详细描述。
如图2D1所示,指令监视单元210D包含指令解析单元2101D和指令判断单元2102D。指令解析单元2101D对来自指令快取202D的上述接收指令进行译码,生成译码信息。然后,指令解析单元2101D将上述译码信息发送给指令判断单元2102D。指令判断单元2102D根据上述译码信息判断上述接收指令是否为新增指令,并生成一模拟标识。然后,指令判断单元2102D将模拟标识发送给私有寄存器220D。私有寄存器220D会保存上述模拟标识。当上述模拟标识为第一数值时,私有寄存器220D还保存来自指令解析单元2101D的上述接收指令的译码信息。
在第四实施例中,在图3的步骤S307中,与第三实施例不同的是,处理器110是通过指令监视单元210D直接对接收指令进行译码,并根据译码信息判断接收指令是否为新增指令的。在第四实施例中,图3的其它步骤以及图4-7中的步骤,均与第三实施例相同,此处就不赘述了。
综上所述,与第三实施例类似,与第一实施例和第二实施例相比,本实施例中指令监视单元不需要把模拟标识发送给重命名单元和重排缓冲区,所以不需要对重命名单元和重排缓冲区进行修改,因而实现起来相对容易。另外,与第三实施例不同的是,在本实施例中,指令监视单元210D直接从指令快取202D读取接收指令的机器码。然后,指令监视单元210D对接收到的机器码进行解析,生成译码信息。然后,指令监视单元210D根据译码信息判断接收指令是否为新增指令。当接收指令为新增指令时,指令监视单元210D生成一值为第一数值的模拟标识。然后指令监视单元210D将译码信息发送给私有寄存器220D。与第三实施例相比,本实施例中直接对来自指令快取202D的机器码进行解析,可以不用修改指令译码单元230D,因而实现起来相对容易。
值得注意的是,前述4个实施例都是通过对进入、退出系统管理模式的现有代码进行修改,实现进入、退出模拟器142的功能的。在另一实施例中,还可以为执行新增指令的系统100增加专门的进入、退出系统管理模式的代码,并定义一个新的系统管理中断编号。然后,通过呼叫新增的系统管理中断编号,执行新增的专门的进入系统管理模式的代码。在新增的专门的进入系统管理模式的代码中,处理器110向系统管理内存写入一值为第一数值的专用入口标识,然后进入系统管理模式。在系统管理模式下处理器110执行模拟器142以模拟执行新增指令。模拟执行完新增指令之后,模拟器142判断系统管理内存中的专用入口标识是否为第一数值,如果专用入口标识为第一数值,模拟器142执行新增的专门的退出系统管理模式的代码。在一实施例中,模拟器142是通过呼叫指令(call)或跳转指令(jump)执行新增的专门的退出系统管理模式的代码的。
前述第一实施例、第二实施例、第三实施例及第四实施例所描述的所有功能,均可基于上述新增的专门的进入、退出系统管理模式的代码实现。为了取得更好的执行效果,在基于上述新增的专门的进入、退出系统管理模式的代码实现前述4个实施例的功能时,可以删除图4和图7中判断模拟标识是否为第一数值的步骤。因为在专门的进入、退出系统管理模式的代码中,不需要考虑正常的系统管理模式处理代码。举例来说,可以删除图4中的步骤S403和S405,删除图7中的步骤S701和S703。另外,图4的步骤S409需要修改为“把模拟标识、专用入口标识、接收指令的译码信息以及运行环境信息存入系统管理内存”。图5的步骤S519需要改为“当专用入口标识为第一数值时,执行新增的专门的退出系统管理模式的代码;否则,执行退出系统管理模式指令”。图6的第19行代码需要改为:“if(newEntryFlag==1)execute_newExit();else execute_rsm();”,其中,newEntryFlag为专用入口标识,execute_newExit()表示执行新增的专门的退出系统管理模式的代码。
根据上述描述可知,修改后的图4为专门的进入系统管理模式的代码的处理流程;修改后的图7为专门的退出系统管理模式的代码的处理流程;修改后的图5为使用专门的进入、退出系统管理模式的代码时,模拟器142的处理流程;修改后的图6为使用专门的进入、退出系统管理模式的代码时,模拟执行新增指令的例子。下面分别描述修改后的图4的步骤S409和修改后的图5的步骤S519。
在修改后的图4的步骤S409中,处理器110把模拟标识、专用入口标识、接收指令的译码信息以及运行环境信息存入系统管理内存。具体而言,处理器110生成值为第一数值的模拟标识和专用入口标识,并把生成的模拟标识和专用入口标识写入系统管理内存。另外,处理器110从私有寄存器220读取接收指令的译码信息以及运行环境信息,并把读取到的接收指令的译码信息以及运行环境信息写入系统管理内存。
在修改后的图5的步骤S519中,当专用入口标识为第一数值时,处理器110执行新增的专门的退出系统管理模式的代码;否则,处理器110执行退出系统管理模式指令。具体而言,处理器110从系统管理内存读取专用入口标识,并判断读取到的专用入口标识是否为第一数值。当专用入口标识为第一数值时,处理器110执行新增的专门的退出系统管理模式的代码;否则,处理器110执行退出系统管理模式指令。值得注意的是,修改后的图6的第19行代码所完成的功能就是本步骤的功能。
综上所述,与使用原有的进入、退出系统管理模式的代码相比,使用专门的进入、退出系统管理模式的代码时,本领域技术人员可以对进入、退出系统管理模式的代码进行优化,因而可以取得较高的执行效率。
图8是显示根据本发明一实施例所述的执行新增指令的流程图。如图8所示,处理器110接收一指令(S801),判断接收指令是否为新增指令(S803)。当上述接收指令为新增指令时,处理器110进入系统管理模式(S805),在系统管理模式下通过执行至少一个旧指令来模拟该接收指令的执行(S807)。
在图8中,步骤S801与图3的步骤S301相同;步骤S803与图3的步骤S307相同;步骤S805与图3的步骤S311相同;步骤S807与图3的步骤S313相同;步骤S809与图3的步骤S305相同。所以,此处就不对上述步骤进行重复描述了。
图9是显示根据本发明另一实施例所述的执行新增指令的流程图。如图9所示,处理器110接收一指令(S901),判断接收指令是否为新增指令(S903)。当上述接收指令为新增指令时,处理器110生成一模拟标识(S905)。然后,处理器110根据上述模拟标识,发出一系统管理中断(S907)。响应于上述系统管理中断,处理器110进入一系统管理模式(S909),在该系统管理模式下模拟该接收指令的执行,产生一模拟执行结果(S911),并将该模拟执行结果存入一系统管理内存(S912)。
在图9中,步骤S901与图3的步骤S301相同;步骤S903与图3的步骤S307相同;步骤S909与图3的步骤S311相同;步骤S912与图5的步骤S517相同;步骤S913与图3的步骤S305相同。所以此处就不对步骤S901、S903、S909、S912、S913进行重复描述了。下面描述步骤S905步骤S907和步骤S911。
在步骤S905中,处理器110生成一模拟标识。具体而言,当指令监视单元210判断出上述接收指令为新增指令时,生成上述模拟标识。至于生成上述模拟标识的细节,请参考前文对图2A、图2B、图2C及图2D中的指令监视单元210、210B、210C及210D的相关描述,并参考前文对图3的步骤S309的相关描述,此处就不赘述了。
在步骤S907中,处理器110根据上述模拟标识,发出一系统管理中断。对于如何根据上述模拟标识发出上述系统管理中断,请参考前文中对步骤S403和S407的相关描述,此处就不再重复描述了。
在步骤S911中,处理器110在该系统管理模式下,模拟该接收指令的执行,产生一模拟执行结果。具体而言,处理器110根据上述接收指令的基本译码信息产生至少一个旧指令,然后通过执行上述至少一个旧指令来模拟上述接收指令的执行,产生一模拟执行结果。更详细的描述参见前文对图5的步骤S509和S513的描述。
图10是显示根据本发明另一实施例所述的执行新增指令的流程图。如图10所示,处理器110接收一指令(S1001),根据上述接收指令的操作码判断上述接收指令是否为新增指令(S1003)。当上述接收指令为新增指令时,处理器110将上述接收指令的基本译码信息存入一私有寄存器(S1005)。然后,处理器110进入系统管理模式(S1006),在系统管理模式下根据上述私有寄存器中存储的基本译码信息模拟该接收指令的执行(S1007)。
在图10中,步骤S1001与图3的步骤S301相同;步骤S1003与图3的步骤S307相同;步骤S1006与图3的步骤S311相同;步骤S1007与图3的步骤S313相同;步骤S1009与图3的步骤S305相同。所以,此处就不对上述步骤进行重复描述了。下面描述步骤S1005。
在步骤S1005中,处理器110将上述接收指令的基本译码信息存入一私有寄存器中。具体实现细节,请参考前文对图2A、图2B、图2C及图2D中的指令监视单元210、210B、210C及210D的相关描述,并参考前文对图3的步骤S309的相关描述,此处就不赘述了。
通过本发明提供的执行新增指令的方法与执行新增指令的系统,在不对处理器的微体系结构进行修改的情况下,就可以在前代处理器上实现后代处理器所新增支持的指令。从而大大减少了用于设计、测试等工作的工作量,所以可以节省大量的成本。
以上所述仅为本发明较佳实施例,然其并非用以限定本发明的范围,任何熟悉本项技术的人员,在不脱离本发明的精神和范围内,可在此基础上做进一步的改进和变化,因此本发明的保护范围当以本申请的权利要求书所界定的范围为准。
Claims (72)
1.一种执行新增指令的方法,其特征在于,包含:
接收指令;
判断该接收指令是否为新增指令;以及
当该接收指令为新增指令时,进入系统管理模式,并在该系统管理模式下通过执行至少一个旧指令来模拟该接收指令的执行。
2.如权利要求1所述的执行新增指令的方法,当该接收指令为新增指令时,还包含:
将私有寄存器中的模拟标识设置为第一数值;以及
根据该私有寄存器中的该模拟标识进入该系统管理模式。
3.如权利要求1所述的执行新增指令的方法,当该接收指令为新增指令时,还包含:
将该接收指令译码为微指令,其中,该微指令中包含模拟标识;以及
将该微指令的该模拟标识设置为第一数值。
4.如权利要求3所述的执行新增指令的方法,其中,当该接收指令为新增指令时,该微指令为空操作微指令,其中,该空操作微指令的该模拟标识为该第一数值。
5.如权利要求3所述的执行新增指令的方法,其中,当该接收指令为新增指令时,如果该接收指令需要访问内存,则该微指令为特殊微指令,该执行新增指令的方法还包含:
当该特殊微指令的该模拟标识为该第一数值时,使用该特殊微指令对该接收指令进行权限检查,生成检查结果;以及
将该检查结果存储到私有寄存器中。
6.如权利要求5所述的执行新增指令的方法,其中,该检查结果包含虚拟地址、物理地址及错误代码。
7.如权利要求5所述的执行新增指令的方法,当该接收指令为新增指令时,还包含:
根据该检查结果模拟该接收指令的执行。
8.如权利要求3所述的执行新增指令的方法,当该接收指令为新增指令时,还包含:
根据该微指令的该模拟标识,发起系统管理中断;以及
根据该系统管理中断,进入该系统管理模式。
9.如权利要求8所述的执行新增指令的方法,当该接收指令为新增指令时,还包含:
当提交该微指令时,根据该微指令的该模拟标识,发起该系统管理中断。
10.如权利要求1所述的执行新增指令的方法,当该接收指令为新增指令时,还包含:
对该至少一个旧指令进行译码,获得至少一个微指令;以及
执行该至少一个微指令;
其中,该至少一个旧指令中的每个旧指令为指令集架构指令。
11.如权利要求1所述的执行新增指令的方法,当该接收指令为新增指令时,还包含:
将该接收指令的基本指令信息及运行环境信息存入系统管理内存;以及
在该系统管理模式下,根据该系统管理内存中存储的该基本指令信息及该运行环境信息,通过执行该至少一个旧指令来模拟该接收指令的执行。
12.如权利要求11所述的执行新增指令的方法,当该接收指令为新增指令时,还包含:
对该接收指令进行译码,获得该接收指令的该基本指令信息;
将该接收指令的该基本指令信息存入私有寄存器;以及
从该私有寄存器读取该基本指令信息,并将读取到的该基本指令信息存入该系统管理内存。
13.如权利要求11所述的执行新增指令的方法,当该接收指令为新增指令时,还包含:
在该系统管理模式下:
根据该系统管理内存中存储的该接收指令的该基本指令信息产生该至少一个旧指令;以及
执行该至少一个旧指令,以获得该接收指令的模拟执行结果。
14.如权利要求13所述的执行新增指令的方法,当该接收指令为新增指令时,还包含:
在该系统管理模式下,将该模拟执行结果存入该系统管理内存。
15.如权利要求14所述的执行新增指令的方法,当该接收指令为新增指令时,还包含:
在退出该系统管理模式时,将该系统管理内存中存储的该模拟执行结果写入架构寄存器。
16.如权利要求11所述的执行新增指令的方法,其中,该基本指令信息包含该接收指令的指令指针、转义码、操作码、长度及操作数模式。
17.如权利要求16所述的执行新增指令的方法,当该接收指令为新增指令时,还包含:
如果在执行该至少一个旧指令的过程中没有产生异常,则将保存在该系统管理内存中的该接收指令的该指令指针的值更新为:EIP+Length,其中,EIP为该指令指针更新前的值,Length为该长度。
18.如权利要求16所述的执行新增指令的方法,当该接收指令为新增指令时,还包含:
如果在执行该至少一个旧指令的过程中产生了异常,并且该异常为陷阱时,则将保存在该系统管理内存中的该接收指令的该指令指针的值更新为:EIP+Length,其中,EIP为该指令指针更新前的值,Length为该长度。
19.如权利要求11所述的执行新增指令的方法,其中,该运行环境信息包含运行模式。
20.如权利要求19所述的执行新增指令的方法,当该接收指令为新增指令时,还包含:
如果该接收指令不能在该运行模式下执行,则产生译码异常;以及
将该译码异常存入该系统管理内存,并在该系统管理内存中设置异常标识。
21.如权利要求1所述的执行新增指令的方法,当该接收指令为新增指令时,还包含:
判断在执行该至少一个旧指令的过程中是否产生了异常;以及
若产生了该异常,则将该异常存入系统管理内存,并在该系统管理内存中设置异常标识。
22.如权利要求21所述的执行新增指令的方法,其中,该异常包含译码异常及运行时异常。
23.如权利要求21所述的执行新增指令的方法,当该接收指令为新增指令时,还包含:
根据该系统管理内存中存储的该异常标识,判断是否产生了该异常;以及
如果判断结果为产生了该异常,则在退出该系统管理模式后,执行该异常的微码处理程序。
24.如权利要求21所述的执行新增指令的方法,当该接收指令为新增指令时,还包含:
当该异常为陷阱时,在退出该系统管理模式时,使用该系统管理内存中存储的信息,恢复架构寄存器中存储的值。
25.如权利要求1所述的执行新增指令的方法,其中,当该接收指令为新增指令,且该接收指令的操作数为新增架构寄存器时,在该系统管理模式下,该新增架构寄存器是利用专用寄存器或系统管理内存进行模拟的。
26.如权利要求25所述的执行新增指令的方法,当该新增架构寄存器为该接收指令的目的操作数时,还包含:
模拟该接收指令的执行完成后,将该接收指令的模拟执行结果存入该专用寄存器或该系统管理内存。
27.如权利要求26所述的执行新增指令的方法,当该新增架构寄存器为该接收指令的目的操作数时,还包含:
退出该系统管理模式时,不把保存在该专用寄存器或该系统管理内存中的该模拟执行结果存入架构寄存器。
28.如权利要求26所述的执行新增指令的方法,还包含:
接收另一指令;以及
当该另一指令为新增指令,且该新增架构寄存器为该另一指令的源操作数时,直接使用该专用寄存器或该系统管理内存中保存的该模拟执行结果,来模拟该另一指令的执行。
29.如权利要求1所述的执行新增指令的方法,其中,当该接收指令为新增指令时,模拟该接收指令的执行的过程对操作系统或应用程序是透明的,其中,该接收指令来自该操作系统或该应用程序。
30.如权利要求1所述的执行新增指令的方法,还包含:
根据该接收指令的前缀、转义码及操作码判断该接收指令是否为新增指令。
31.如权利要求1所述的执行新增指令的方法,当该接收指令为新增指令,且该接收指令包含内存操作数时,还包含:
将该内存操作数的虚拟地址转换为物理地址;以及
根据该物理地址读取该内存操作数的数值,其中,该物理地址不在系统管理内存中。
32.如权利要求31所述的执行新增指令的方法,当该接收指令为新增指令,且该接收指令包含内存操作数时,还包含:
通过物理内存直接访问接口,通过访问页表,将该内存操作数的虚拟地址转换为物理地址。
33.如权利要求31所述的执行新增指令的方法,当该接收指令为新增指令,且该接收指令包含内存操作数时,还包含:
通过模型特别寄存器,根据该物理地址读取该内存操作数的数值。
34.如权利要求33所述的执行新增指令的方法,当该接收指令为新增指令,且该接收指令包含内存操作数时,还包含:
将该模型特别寄存器的地址写入第一寄存器;
将该物理地址写入第二寄存器;以及
执行写模型特别寄存器指令,以将该内存操作数的数值存储到该模型特别寄存器中。
35.如权利要求34所述的执行新增指令的方法,当该接收指令为新增指令,且该接收指令包含内存操作数时,还包含:
执行读模型特别寄存器指令,以从该模型特别寄存器中读取该内存操作数的数值,并将读取到的该内存操作数的数值存储到该第二寄存器中。
36.如权利要求34所述的执行新增指令的方法,当该接收指令为新增指令,且该接收指令包含内存操作数时,还包含:
执行完该写模型特别寄存器指令后,通过执行从物理地址加载微指令,将该内存操作数的数值从系统内存加载到该模型特别寄存器中。
37.一种执行新增指令的系统,其特征在于,包含:
指令监视单元,判断接收指令是否为新增指令;
当该接收指令为增新指令时,该执行新增指令的系统进入系统管理模式,并在该系统管理模式下通过执行至少一个旧指令来模拟该接收指令的执行。
38.如权利要求37所述的执行新增指令的系统,还包含:
私有寄存器,耦接该指令监视单元,该私有寄存器包含模拟标识;
当该接收指令为新增指令时,该指令监视单元将该私有寄存器中的该模拟标识设置为第一数值;
该执行新增指令的系统根据该私有寄存器中的该模拟标识进入该系统管理模式。
39.如权利要求37所述的执行新增指令的系统,还包含:
指令译码单元,耦接该指令监视单元,该指令译码单元将该接收指令译码为微指令,其中,该微指令中包含模拟标识;
当该接收指令为新增指令时,该指令监视单元将该微指令的该模拟标识设置为第一数值,用于表示该接收指令为待模拟指令。
40.如权利要求39所述的执行新增指令的系统,其中,当该接收指令为新增指令时,该微指令为空操作微指令,其中,该空操作微指令的该模拟标识为该第一数值。
41.如权利要求39所述的执行新增指令的系统,还包含:
访存单元,当该接收指令为新增指令时,如果该接收指令需要访问内存,则该微指令为特殊微指令,当该特殊微指令的该模拟标识为该第一数值时,该访存单元使用该特殊微指令对该接收指令进行权限检查,生成检查结果;该访存单元将该检查结果存储到私有寄存器中。
42.如权利要求41所述的执行新增指令的系统,其中,该检查结果包含虚拟地址、物理地址及错误代码。
43.如权利要求41所述的执行新增指令的系统,其中,该执行新增指令的系统根据该检查结果模拟该接收指令的执行。
44.如权利要求39所述的执行新增指令的系统,还包含:
指令提交单元,该指令提交单元根据该微指令的该模拟标识,发起系统管理中断;
当该接收指令为新增指令时,该执行新增指令的系统根据该系统管理中断,进入该系统管理模式。
45.如权利要求44所述的执行新增指令的系统,其中,当该指令提交单元提交该接收指令时,该指令提交单元根据该微指令的该模拟标识,发起该系统管理中断。
46.如权利要求37所述的执行新增指令的系统,还包含:
译码单元,当该接收指令为新增指令时,该译码单元对该至少一个旧指令进行译码,获得至少一个微指令;
该执行新增指令的系统执行该至少一个微指令;
其中,该至少一个旧指令中的每个旧指令为指令集架构指令。
47.如权利要求37所述的执行新增指令的系统,还包含:
系统管理内存,当该接收指令为新增指令时,该执行新增指令的系统将该接收指令的基本指令信息及该接收指令的运行环境信息存入该系统管理内存;以及,在该系统管理模式下,该执行新增指令的系统根据该系统管理内存中存储的该基本指令信息及该运行环境信息,通过执行该至少一个旧指令来模拟该接收指令的执行。
48.如权利要求47所述的执行新增指令的系统,还包含:
私有寄存器,耦接该指令监视单元;以及
译码单元,耦接该指令监视单元和该私有寄存器,该译码单元对该接收指令进行译码,获得该接收指令的该基本指令信息;该译码单元将该接收指令的该基本指令信息存入该私有寄存器;该执行新增指令的系统从该私有寄存器读取该基本指令信息,并将读取到的该基本指令信息存入该系统管理内存。
49.如权利要求47所述的执行新增指令的系统,其中,在该系统管理模式下,该执行新增指令的系统根据该系统管理内存中存储的该接收指令的该基本指令信息产生该至少一个旧指令;该执行新增指令的系统执行该至少一个旧指令,以获得该接收指令的模拟执行结果。
50.如权利要求49所述的执行新增指令的系统,其中,当该接收指令为新增指令时,在该系统管理模式下,该执行新增指令的系统将该模拟执行结果存入该系统管理内存。
51.如权利要求50所述的执行新增指令的系统,还包含:
架构寄存器,在退出该系统管理模式时,该执行新增指令的系统将该系统管理内存中存储的该模拟执行结果写入该架构寄存器。
52.如权利要求47所述的执行新增指令的系统,其中,该基本指令信息包含该接收指令的指令指针、转义码、操作码、长度及操作数模式。
53.如权利要求52所述的执行新增指令的系统,其中,当该接收指令为新增指令时,如果在执行该至少一个旧指令的过程中没有产生异常,则该执行新增指令的系统将保存在该系统管理内存中的该接收指令的该指令指针的值更新为:EIP+Length,其中,EIP为该指令指针更新前的值,Length为该长度。
54.如权利要求52所述的执行新增指令的系统,其中,当该接收指令为新增指令时,如果在执行该至少一个旧指令的过程中产生了异常,并且该异常为陷阱时,则该执行新增指令的系统将保存在该系统管理内存中的该接收指令的该指令指针的值更新为:EIP+Length,其中,EIP为该指令指针更新前的值,Length为该长度。
55.如权利要求47所述的执行新增指令的系统,其中,该运行环境信息包含运行模式。
56.如权利要求55所述的执行新增指令的系统,其中,如果该接收指令不能在该运行模式下执行,则该执行新增指令的系统产生译码异常;该执行新增指令的系统将该译码异常存入该系统管理内存,并在该系统管理内存中设置异常标识。
57.如权利要求37所述的执行新增指令的系统,其中,在该系统管理模式下,该执行新增指令的系统判断在执行该至少一个旧指令的过程中是否产生了异常;若产生了该异常,则该执行新增指令的系统将该异常存入系统管理内存,并在该系统管理内存中设置异常标识。
58.如权利要求57所述的执行新增指令的系统,其中,该异常包含译码异常及运行时异常。
59.如权利要求57所述的执行新增指令的系统,其中,该执行新增指令的系统根据该系统管理内存中存储的该异常标识,判断是否产生了该异常;如果判断结果为产生了该异常,则该执行新增指令的系统在退出该系统管理模式后,执行该异常的微码处理程序。
60.如权利要求57所述的执行新增指令的系统,其中,当该异常为陷阱时,在退出该系统管理模式时,该执行新增指令的系统使用该系统管理内存中存储的信息,恢复架构寄存器中存储的值。
61.如权利要求37所述的执行新增指令的系统,其中,当该接收指令为新增指令,且该接收指令的操作数为新增架构寄存器时,在该系统管理模式下,该执行新增指令的系统将利用专用寄存器或系统管理内存模拟该新增架构寄存器。
62.如权利要求61所述的执行新增指令的系统,其中,当该新增架构寄存器为该接收指令的目的操作数时,模拟该接收指令的执行完成后,该执行新增指令的系统将该接收指令的模拟执行结果存入该专用寄存器或该系统管理内存。
63.如权利要求62所述的执行新增指令的系统,其中,当该新增架构寄存器为该接收指令的目的操作数时,退出该系统管理模式时,该执行新增指令的系统不把保存在该专用寄存器或该系统管理内存中的该模拟执行结果存入架构寄存器。
64.如权利要求62所述的执行新增指令的系统,其中,该执行新增指令的系统接收另一指令;当该另一指令为新增指令,且该新增架构寄存器为该另一指令的源操作数时,该执行新增指令的系统直接使用该专用寄存器或该系统管理内存中保存的该模拟执行结果,来模拟该另一指令的执行。
65.如权利要求37所述的执行新增指令的系统,其中,当该接收指令为新增指令时,模拟该接收指令的执行的过程对操作系统或应用程序是透明的,其中,该接收指令来自该操作系统或该应用程序。
66.如权利要求37所述的执行新增指令的系统,其中,该指令监视单元根据该接收指令的前缀、转义码及操作码判断该接收指令是否为新增指令。
67.如权利要求37所述的执行新增指令的系统,其中,当该接收指令为新增指令,且该接收指令包含内存操作数时,该执行新增指令的系统将该内存操作数的虚拟地址转换为物理地址,根据该物理地址读取该内存操作数的数值,其中,该物理地址不在系统管理内存中。
68.如权利要求67所述的执行新增指令的系统,其中,当该接收指令为新增指令,且该接收指令包含内存操作数时,该执行新增指令的系统通过硬件提供的物理内存直接访问接口,通过访问页表,将该内存操作数的虚拟地址转换为物理地址。
69.如权利要求67所述的执行新增指令的系统,其中,当该接收指令为新增指令,且该接收指令包含内存操作数时,该执行新增指令的系统通过模型特别寄存器,根据该物理地址读取该内存操作数的数值。
70.如权利要求69所述的执行新增指令的系统,其中,当该接收指令为新增指令,且该接收指令包含内存操作数时,该执行新增指令的系统将该模型特别寄存器的地址写入第一寄存器,将该物理地址写入第二寄存器,执行写模型特别寄存器指令,以将该内存操作数的数值存储到该模型特别寄存器中。
71.如权利要求70所述的执行新增指令的系统,其中,当该接收指令为新增指令,且该接收指令包含内存操作数时,该执行新增指令的系统执行读模型特别寄存器指令,以从该模型特别寄存器中读取该内存操作数的数值,并将读取到的该内存操作数的数值存储到该第二寄存器中。
72.如权利要求70所述的执行新增指令的系统,其中,当该接收指令为新增指令,且该接收指令包含内存操作数时,该执行新增指令的系统执行完该写模型特别寄存器指令后,通过执行从物理地址加载微指令,将该内存操作数的数值从系统内存加载到该模型特别寄存器中。
Priority Applications (9)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011591546.0A CN114691204A (zh) | 2020-12-29 | 2020-12-29 | 执行新增指令的系统及执行新增指令的方法 |
US17/471,371 US20220206809A1 (en) | 2020-12-29 | 2021-09-10 | Method and system for executing new instructions |
US17/471,423 US11803387B2 (en) | 2020-12-29 | 2021-09-10 | System for executing new instructions and method for executing new instructions |
US17/471,440 US11803383B2 (en) | 2020-12-29 | 2021-09-10 | Method and system for executing new instructions |
US17/471,359 US11914997B2 (en) | 2020-12-29 | 2021-09-10 | Method and system for executing new instructions |
US17/471,454 US11789736B2 (en) | 2020-12-29 | 2021-09-10 | Method and system for executing new instructions |
US17/471,343 US11669328B2 (en) | 2020-12-29 | 2021-09-10 | Method and system for converting instructions |
US18/337,166 US11995440B2 (en) | 2020-12-29 | 2023-06-19 | Method and system for executing new instructions |
US18/472,457 US20240012650A1 (en) | 2020-12-29 | 2023-09-22 | Method and processor for executing target instructions |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011591546.0A CN114691204A (zh) | 2020-12-29 | 2020-12-29 | 执行新增指令的系统及执行新增指令的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114691204A true CN114691204A (zh) | 2022-07-01 |
Family
ID=82132381
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011591546.0A Pending CN114691204A (zh) | 2020-12-29 | 2020-12-29 | 执行新增指令的系统及执行新增指令的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114691204A (zh) |
-
2020
- 2020-12-29 CN CN202011591546.0A patent/CN114691204A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11803387B2 (en) | System for executing new instructions and method for executing new instructions | |
US11604643B2 (en) | System for executing new instructions and method for executing new instructions | |
KR102116571B1 (ko) | 가상 머신을 나가자 마자 현재 프로세서 명령의 결과를 노출하기 위한 시스템 및 방법 | |
US6031992A (en) | Combining hardware and software to provide an improved microprocessor | |
JP6507435B2 (ja) | 命令エミュレーションプロセッサ、方法、およびシステム | |
KR100463810B1 (ko) | 어드레스되는 구성요소의 물리적 특성에 관한 추측 실패를 검출하는 마이크로프로세서용 메모리 제어기 | |
US5958061A (en) | Host microprocessor with apparatus for temporarily holding target processor state | |
US5926832A (en) | Method and apparatus for aliasing memory data in an advanced microprocessor | |
US7840776B1 (en) | Translated memory protection apparatus for an advanced microprocessor | |
KR100394967B1 (ko) | 개선된 마이크로프로세서를 위한 게이트 저장 버퍼 | |
US11625247B2 (en) | System for executing new instructions and method for executing new instructions | |
US8938605B2 (en) | Instruction cracking based on machine state | |
KR100443759B1 (ko) | 개선된 마이크로프로세서 | |
CN108885551B (zh) | 存储器复制指令、处理器、方法和系统 | |
JPH0782441B2 (ja) | シミユレーシヨン方法 | |
US20150186170A1 (en) | Implementing a jump instruction in a dynamic translator that uses instruction code translation and just-in-time compilation | |
US9183018B2 (en) | Dynamic on/off just-in-time compilation in a dynamic translator using instruction code translation | |
CN115357332A (zh) | 处理器间中断的虚拟化 | |
CN114691205A (zh) | 执行新增指令的系统及执行新增指令的方法 | |
KR100421687B1 (ko) | 개선된 마이크로프로세서를 위한 변환 메모리 보호 장치 | |
EP0998707B1 (en) | Host microprocessor with apparatus for temporarily holding target processor state | |
CN114691204A (zh) | 执行新增指令的系统及执行新增指令的方法 | |
CN114691208A (zh) | 执行新增指令的系统及执行新增指令的方法 | |
Ma et al. | Rapid prototyping and compact testing of CPU emulators | |
US20090319994A1 (en) | System for debugging computer program |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: Room 301, 2537 Jinke Road, Zhangjiang High Tech Park, Pudong New Area, Shanghai 201203 Applicant after: Shanghai Zhaoxin Semiconductor Co.,Ltd. Address before: Room 301, 2537 Jinke Road, Zhangjiang High Tech Park, Pudong New Area, Shanghai 201203 Applicant before: VIA ALLIANCE SEMICONDUCTOR Co.,Ltd. |
|
CB02 | Change of applicant information |