实现灵活且低成本的指令替换方法及装置的制作方法

文档序号:6356065阅读:324来源:国知局
专利名称:实现灵活且低成本的指令替换方法及装置的制作方法
技术领域
本发明涉及指令替换技术,特别涉及一种实现灵活且低成本的指令替换方法及装置。
背景技术
中央处理器(CPU, Computer Progress Unit)执行指令的过程可以简述为如下过程取指令单元从程序空间取指令、并传输给译码单元;译码单元执行译码、并将译码结果传输给执行单元;执行单元执行指令。在CPU芯片制成后,指令固化在CPU芯片的掩膜只读存储器(MASK ROM7Read OnlyMemory)中,有时需要对上述指令进行替换,现有技术中包括以下三种指令替换的方式 第一、图I为现有技术中第一种指令替换方法的示意图。以Intel 80251为例,假设需要将地址为0ff43f2h开始的指令MOV sp, #80h替换为MOV sp, #89h。需要直接修改MASK ROM中的指令,并重新流片,成本较高且浪费时间。第二、图2为现有技术中第二种指令替换方法的示意图。仍以Intel 80251为例,假设需要修改函数functionl。图2中斜线阴影所示区域为修改前的函数functionl,横线阴影所示区域为修改后的函数functionl。假设所有函数都可能出错,将所有函数的入口地址存放在函数入口地址表中,这个表存放在一次性编程存储器(0ΤΡ,One Time Programming)、外扩的只读存储器(R0M,Read Only Memery)或闪存(FLASH ROM)中,使用指令ecall OWRj执行函数调用,其中WRj指的是一个函数入口地址。当需要修改函数functionl时,修改functionl在函数地址入口表中的函数入口地址,并新增修改后的functionl函数与这个新的函数入口地址对应。但在实际的CPU芯片中,函数写错的概率是非常小的,只有少数的函数代码有错,因此这种指令替换的方式浪费了大量的空间存放函数入口地址表,并且目前的有些C语言编译器还无法支持这种指令替换方式。第三、图3为现有技术中第三种指令替换方法的流程图,该流程包括步骤301 :判断当前是否满足指令替换条件,如果是,则产生中断,然后执行步骤302 ;否则执行步骤303。步骤302 :调用中断服务程序到中断向量表,执行代码替换,然后执行步骤303。步骤303 :对地址线上当前地址中的指令译码并执行。预先设置修改点位置,如果当前地址与某个修改点位置匹配,则产生一个中断,在中断服务程序中实现代码替换,这种指令替换方式需要修改中断控制器,并且会与不带中断请求的中断源(通常包括软件调制中断、异常中断和非可屏蔽中断)产生冲突。

发明内容
本发明提供一种实现灵活且低成本的指令替换方法,在现有CPU的结构不作大改动、且不改变编译器的前提下,使用该方法可以灵活且低成本的替换MASK ROM中的单条指令或一系列指令的组合。本发明提供一种实现灵活且低成本的指令替换装置,在现有CPU的结构不作大改动、且不改变编译器的前提下,该装置可以灵活且低成本的替换MASK ROM中的单条指令或一系列指令的组合。本发明的技术方案是这样实现的一种实现灵活且低成本的指令替换方法,关键在于,该方法包括A、判断当前是否满足指令替换条件,如果是,替换从地址线上当前地址中读出的指令操作码,然后执行步骤B ;否则执行步骤C ;B、检测从当前地址中读出的指令操作码是否指示陷阱指令,如果是,执行预设地址中的替换代码,并结束流程;否则执行步骤C ;
C、对所述当前地址中的指令译码并执行。一种实现灵活且低成本的指令替换装置,关键在于,该装置包括代码替换单元、陷阱指令检测单元和陷阱指令执行单元;所述代码替换单元,用于判断当前是否满足指令替换条件,如果是,替换从地址线上当前地址中读出的指令操作码,否则将所述当前地址中的指令输出给译码单元;所述陷阱指令检测单元,用于检测代码替换单元处理后的指令中的指令操作码是否指示陷阱指令;所述陷阱指令执行单元,用于在所述陷阱指令检测单元得出的检测结果为是时,执行预设地址中的替换代码,在所述陷阱指令检测单元得出的检测结果为否时,将所述当前地址中的指令输出给译码单元。可以看出,本发明中实现灵活且低成本的指令替换方法中,在当前满足指令替换条件时,替换指令操作码。对于那些仅需替换指令操作码的指令,后续继续进行译码和执行即可。对于那些替换内容较多的指令,设置了一种陷阱指令,当替换指令操作码后的指令为陷阱指令时,执行预设地址中的替换代码,间接实现了指令替换。使用本发明中的指令替换方法,可以在现有CPU在结构不作大改动、且不改变编译器的前提下,灵活替换固化在CPU的MASK ROM中的单条指令或一系列指令的组合,并且由于无需修改MASK ROM,也无需建立函数入口地址表,实现成本较低。


图I为现有技术中第一种指令替换方法的示意图;图2为现有技术中第二种指令替换方法的示意图;图3为现有技术中第三种指令替换方法的流程图;图4为本发明实施例中的实现灵活且低成本的指令替换方法流程图;图5为图4所示方法的一个实施例中的方法流程图;图6为图5所示流程中步骤504的实现方法流程图;图7为本发明实施例中的实现灵活且低成本的指令替换装置的结构示意图;图8为图7所示装置的一个实施例中代码替换单元的结构示意图;图9为图7所示装置的一个实施例中陷阱指令执行单元的结构示意图。
具体实施例方式为使本发明实施例的目的和优点更加清楚,下面结合附图对本发明实施例作进一步的详细说明。图4为本发明实施例中的指令替换装置的指令替换方法流程图,该流程包括步骤401 :判断当前是否满足指令替换条件,如果是,替换从地址线上当前地址中读出的指令操作码,然后执行步骤402 ;否则执行步骤403。步骤402 :检测从当前地址中读出的指令操作码是否指示陷阱指令,如果是,执行预设地址中的替换代码,并结束流程;否则执行步骤403。在本发明实施例中,陷阱指令为预先设置的、指示执行预设地址中的替换代码的 一种指令,陷阱指令的指令操作码可以从CPU现在未使用的机器码中任选,例如可以选择OxbS作为陷阱指令的指令操作码。步骤403 :对所述当前地址中的指令译码并执行。可以看出,本发明中实现灵活且低成本的指令替换方法中,在当前满足指令替换条件时,替换指令操作码。对于那些仅需替换指令操作码的指令来说,后续继续进行译码和执行即可,对于那些替换内容较多的指令来说,设置了一种陷阱指令,当替换指令操作码后的指令为陷阱指令时,执行预设地址中的替换代码,间接实现了指令替换。使用上述指令替换方法可以在现有CPU在结构不作大改动、且不改变编译器的前提下,灵活的替换固化在CPU的MASK ROM中的单条指令或一系列指令的组合,并且由于无需修改MASK ROM,也无需建立函数入口地址表,实现成本较低。下面给出图4所示方法的一个具体实施例。图5为图4所示方法的一个实施例的方法流程图,包括初始化流程和指令替换流程。图5中虚线框内为上述初始化流程,包括初始化修改点数量η、设置修改点位置及每个修改点位置对应的替换指令操作码、设置指令替换服务程序入口地址、使能指令替换功能。上述指令替换流程包括步骤501 :判断当前是否为取指令操作且存在与地址线上的当前值相同的修改点位置,如果是,执行步骤502,否则执行步骤505。地址线上的当前值,指示的就是当前地址。步骤502 :使用与地址线上的当前值相同的修改点位置对应的待替换的指令操作码,替换从地址线上当前地址中读出的指令操作码,将替换后的指令填入指令FIFO。步骤503 :检测从地址线上当前地址中读出的指令操作码是否指示陷阱指令,如果是,执行步骤504,否则执行步骤506。步骤504:保护地址线上的当前地址,跳转到指令服务替换程序的入口地址,并调用指令替换服务程序执行预设地址中的替换代码,结束流程。本步骤中,调用指令替换服务程序执行预设地址中的替换代码的方法流程如图6所示,图6所示流程包括步骤601 :计算当前地址的堆栈指针。本步骤中,由于指令替换服务程序并不知道地址线上的当前地址,所以通过公式SPfixpos = SPnOT-服务程序入口地址寄存器中的字节数来计算当前地址的堆栈指针。步骤602 :从当前地址的堆栈指针指向的位置读出当前地址的程序指针。本步骤中,根据SPfix ptjs指向的位置读出当前地址的程序指针PC_ent。步骤603 :判断当前地址是否与第i个修改点位置相同,如果是,执行步骤604,否则执行步骤605。步骤604 :执行第i个修改点位 置对应的预设地址中的替换代码,结束流程。步骤605 :判断i是否小于等于修改点数量n,如果是,计算i = i+Ι,并返回步骤603,否则结束流程。经过上述步骤601 步骤605调用指令替换服务程序执行预设地址中的替换代码。步骤505 :将程序空间读到的数据填入指令FIFO。步骤506 :对地址线上的当前地址中的指令译码。步骤507 :执行译码后的指令。图7为本发明实施例中实现灵活且低成本的指令替换装置的结构示意图,该装置包括代码替换单元、陷阱指令检测单元和陷阱指令执行单元。上述代码替换单元,用于判断当前是否满足指令替换条件,如果是,替换从所述当前地址中读出的指令操作码,否则将地址线上当前地址中的指令输出给译码执行单元。上述陷阱指令检测单元,用于检测代码替换单元处理后的指令中的指令操作码是否指示陷阱指令。上述陷阱指令执行单元,用于在陷阱指令检测单元得出的检测结果为是时,执行预设地址中的替换代码,在所述陷阱指令检测单元得出的检测结果为否时,将地址线上当前地址中的指令输出给译码执行单元。下面提供图7所示装置的一个具体实施例。本实施例中,指令替换装置中除了包括代码替换单元、陷阱指令检测单元和陷阱指令执行单元外,还包括服务程序入口地址寄存器,用于存储指令替换服务程序的入口地址。图8为图7所示装置的一个实施例中代码替换单元的结构示意图,该代码替换单元包括取指令和取数据判决子单元、修改点数量寄存器、N选一多路复用器、N个程序地址比较器、N个比较匹配子单元、N个修改点位置寄存器、N个替换指令操作码寄存器、N个二选一多路复用器和N个与门。每个修改点位置寄存器与一个程序地址比较器、一个比较匹配子单元、一个与门、一个替换指令代码寄存器及一个二选一多路复用器具有对应关系,N为整数。上述修改点数量寄存器,用于存储修改点数量的初始值η,使能η个比较匹配子单元。这里的η < N,按照图4所示,可以使能开始的η个比较匹配子单元。上述每个替换指令操作码寄存器,用于存储一个修改点位置待替换的指令操作码。常规的指令操作码可以有很多种,例如指令orl a,0x83 (对应的机器码为0x45 0x83)中,0x45为指令操作码。在本实施例中,还有一种特殊的指令操作码,用于指示陷阱指令,这种指令操作码可以从CPU现在未使用的机器码中任选,例如可以选择0xb8。上述取指令和取数据判决子单元,用于判决当前是取指令操作还是取数据操作,将判决结果发送给每个与门。假设高电平信号代表取指令操作,低电平信号代表取数据操作。上述每个程序地址比较器,用于获取地址线上的当前值,发送给对应的比较匹配子单元。地址线上的当前值指示当前地址。上述每个比较匹配子单元,用于从对应的修改点位置寄存器中获取修改点位置,比较地址线上的当前值与获取的修改点位置是否相同,将比较结果提供给对应的与门,并将比较结果提供给N选一多路复用器。假设高电平信号代表判断结果为是,低电平信号代表判断结果为否。由于本实施例中的修改点数量寄存器有使能比较匹配子单元的功能,所以未被使能的比较匹配子单元将不执行任何操作。
上述每个与门,用于在接收到判决结果为取指令操作且接收到的比较结果为是时,向对应的二选一多路复用器输出触发信号。这里的触发信号是触发对应的二选一多路复用器执行指令操作码的替换操作。上述每个二选一多路复用器,用于在对应的与门输出触发信号时,获取对应的替换指令操作码寄存器中的待替换的指令操作码,使用获取的待替换的指令操作码替换从当前地址中读出的指令操作码,将替换后的指令提供给N选一多路复用器;在对应的与门未输出触发信号时,将从程序空间读到的数据提供给N选一多路复用器。上述N选一多路复用器,用于在一个比较匹配子单元得出的比较结果为是时,选择输出该比较结果的比较匹配子单元对应的二选一多路复用器输出的指令,并输出到指令先入先出(FIFO,First In First Out);在所有比较匹配子单元得出的比较结果都为否时,选择任一个接收到的指令,输出到指令FIFO。在同一时间,N选一多路复用器只可能接收到一个比较匹配子单元发送的比较结果为是。图9为图7所示装置的一个实施例中的陷阱指令执行单元的结构示意图,该陷阱指令执行单元包括程序地址保护子单元和调用子单元。上述程序地址保护子单元,用于将当前地址的程序指针PCcmrait放入堆栈,对应的堆栈指针为SPfix,。上述调用子单元,用于从服务程序入口地址寄存器中获取指令替换服务程序的入口地址,将程序指针修改为指令替换服务程序的入口地址,对应的堆栈指针为SPmw,则SPmw=SPfixpos+服务程序入口地址寄存器中的字节数;按照指令替换服务程序的入口地址调用存储在可修改存储介质中的指令替换服务程序,计算当前地址的堆栈指针SPfixjws,其中SPfixpos = SPnew-服务程序入口地址寄存器中的字节数,从当前地址的堆栈指针指向的位置读出当前地址的程序指针PCcmrait,确定与当前地址匹配的修改点位置,获取匹配的修改点位置对应的预设地址,执行所述预设地址中的替换代码。可以看出,本发明中实现灵活且低成本的指令替换方法和装置,在当前满足指令替换条件时,替换指令操作码。对于那些仅需替换指令操作码的指令来说,后续继续进行译码和执行即可,对于那些替换内容较多的指令来说,设置了一种陷阱指令,当替换指令操作码后的指令为陷阱指令时,执行预设地址中的替换代码,间接实现了指令替换。使用上述指令替换方法可以在现有CPU在结构不作大改动、且不改变编译器的前提下,灵活的替换固化在CPU的MASK ROM中的单条指令或一系列指令的组合,并且由于无需修改MASK ROM,也无需建立函数入口地址表,实现成本较低。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明 的保护范围之内。
权利要求
1.一种实现灵活且低成本的指令替换方法,其特征在于,该方法包括 A、判断当前是否满足指令替换条件,如果是,替换从地址线上当前地址中读出的指令操作码,然后执行步骤B ;否则执行步骤C ; B、检测从当前地址中读出的指令操作码是否指示陷阱指令,如果是,执行预设地址中的替换代码,并结束流程;否则执行步骤C ; C、对所述当前地址中的指令译码并执行。
2.如权利要求I所述的方法,其特征在于,所述步骤A之前进一步包括初始化的步骤,具体包括初始化修改点数量、设置修改点位置、设置每个修改点位置对应的替换指令操作码、设置指令替换服务程序入口地址及使能指令替换功能。
3.如权利要求2所述的方法,其特征在于,步骤A中的所述指令替换条件为当前为取指令操作且存在与地址线上的当前值相同的修改点位置; 步骤A中的所述替换从地址线上当前地址中读出的指令操作码为使用与地址线上的当前值相同的修改点位置对应的待替换的指令操作码,替换从所述当前地址中读出的指令操作码。
4.如权利要求2所述的方法,其特征在于,步骤B中所述执行预设地址中的替换代码为保护所述当前地址,跳转到指令服务替换程序的入口地址,调用所述指令替换服务程序执行预设地址中的替换代码。
5.如权利要求4所述的方法,其特征在于,所述保护所述当前地址为将所述当前地址的程序指针PCc^mt放入堆栈,对应的堆栈指针为SPfix rrost5
6.如权利要求5所述的方法,其特征在于,所述跳转到指令服务替换程序的入口地址,调用所述指令替换服务器程序执行预设地址中的替换代码包括 从服务程序入口地址寄存器中获取所述服务程序入口地址; 将程序指针修改为所述服务程序入口地址,对应的堆栈指针为SPmw,其中SPnOT = SPfixpos+服务程序入口地址寄存器中的字节数; 根据所述修改后的程序指针调用存储在可修改存储介质中的指令替换服务程序; 计算当前地址的堆栈指针SPfixjws,其中SPhxjkjs = SPmw-服务程序入口地址寄存器中的字节数; 从当前地址的堆栈指针指向的位置读出当前地址的程序指针PCmt ; 确定所述PCmt与第i个修改点位置是否匹配,如果是执行第i个修改点位置对应的预设地址中的替换代码,否则计算i = i+1、并继续执行所述确定的步骤,直至i > n。
7.如权利要求I或2所述的方法,其特征在于,所述预设地址为预先设置的固定值,或者为寄存器中的临时配置值。
8.一种实现灵活且低成本的指令替换装置,其特征在于,该装置包括代码替换单元、陷阱指令检测单元和陷阱指令执行单元; 所述代码替换单元,用于判断当前是否满足指令替换条件,如果是,替换从地址线上当前地址中读出的指令操作码,否则将所述当前地址中的指令输出给译码单元; 所述陷阱指令检测单元,用于检测代码替换单元处理后的指令中的指令操作码是否指不陷讲指令; 所述陷阱指令执行单元,用于在所述陷阱指令检测单元得出的检测结果为是时,执行预设地址中的替换代码,在所述陷阱指令检测单元得出的检测结果为否时,将所述当前地址中的指令输出给译码单元。
9.如权利要求8所述的装置,其特征在于,所述代码替换单元中包括 取指令和取数据判决子单元,用于判决当前是取指令操作还是取数据操作,将判决结果发送给每个与门; 修改点数量寄存器,用于存储修改点数量的初始值n,使能n个比较匹配电路; N选一多路复用器,用于在有一个所述比较结果为是时,选择输出该比较结果的比较匹配子单元对应的二选一多路复用器输出的指令,并输出到指令先入先出FIFO ;在所有所述比较结果为否时,选择任一个接收到的指令,输出到指令FIFO; N个程序地址比较器,每个程序地址比较器用于获取地址线上的当前值,发送给对应的比较匹配子单元; N个比较匹配子单元,每个比较匹配子单元用于从对应的修改点位置寄存器中获取修改点位置,比较地址线上的当前值与获取的修改点位置是否相同,将比较结果提供给对应的与门和N选一多路复用器; N个修改点位置寄存器,每个修改点位置寄存器用于存储修改点位置; N个替换指令操作码寄存器,每个替换指令操作码寄存器用于存储一个修改点位置的待替换的指令操作码; N个二选一多路复用器,每个二选一多路复用器用于在对应的与门输出触发信号时,获取对应的替换指令操作码寄存器中的待替换的指令操作码,使用获取的待替换的指令操作码替换从当前地址中读出的指令操作码,将替换后的指令提供给N选一多路复用器;在对应的与门未输出触发信号时,将从程序空间读到的数据提供给N选一多路复用器; N个与门,每个与门用于在所述判决结果为取指令操作且所述比较结果为是时,向对应的二选一多路复用器输出触发信号; 所述N为整数,且n < N。
10.如权利要求9所述的装置,其特征在于,该装置中进一步包括服务程序入口地址寄存器,用于存储指令替换服务程序入口地址。
11.如权利要求10所述的装置,其特征在于,所述陷阱指令执行单元包括 程序地址保护子单元,用于将所述当前地址的程序指针PCmt放入堆栈,对应的堆栈指针为SPfix lros ; 调用子单元,用于从服务程序入口地址寄存器中获取指令替换服务程序的入口地址,将程序指针修改为指令替换服务程序的入口地址,对应的堆栈指针为SPmw,其中SPmw =SPfix _+服务程序入口地址寄存器中的字节数;按照指令替换服务程序的入口地址调用存储在可修改存储介质中的指令替换服务程序,计算当前地址的堆栈指针SPfix ptjs,其中SPfixpos = SPnew-服务程序入口地址寄存器中的字节数,从当前地址的堆栈指针指向的位置读出当前地址的程序指针PCeuraent,确定所述PCeunent与第i个修改点位置是否匹配,如果是执行第i个修改点位置对应的预设地址中的替换代码,否则计算i = i+1、并继续执行所述确定操作,直至i > n。
全文摘要
本发明公开了一种指令替换装置及方法,在当前满足代码指令替换条件时,替换从地址线上当前地址中读出的指令操作码。对于那些仅需替换指令操作码的指令,后续继续进行译码和执行即可。对于那些替换内容较多的指令,当检测到当前地址中读出的指令操作码指示陷阱指令时,执行预设地址中的替换代码,间接实现了指令替换。应用本发明,可以让现有中央处理器CPU在结构不作大改动、且不改变编译器的前提下,灵活替换固化在CPU的掩膜只读存储器MASK ROM中的指令,并且由于无需修改MASK ROM,也无需建立函数入口地址表,实现成本较低。
文档编号G06F9/30GK102681819SQ20111006221
公开日2012年9月19日 申请日期2011年3月10日 优先权日2011年3月10日
发明者彭洪, 汤江逊 申请人:炬力集成电路设计有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1