本发明涉及计算机处理器技术领域,特别涉及基于MIPS架构的数据操作处理方法和装置。
背景技术:
复杂指令集计算机(Complex Instruction Set Computing,CISC)和精简指令计算机(Reduced Instruction Set Computing,RISC)是当前CPU的两种架构。不同架构的处理器只能执行自己的指令集,如Intel的机器只能执行X86的指令集(一种CISC指令集),不能执行RISC的指令集;而RISC处理器的计算不能执行X86的指令集。而由于这种硬件体系结构的不同,操作系统和各种应用软件通常只能在特定架构的计算机上执行,如RISC处理器不能充分利用X86系列机器已有的广泛的应用软件。
在RISC处理器,如MIPS指令集的RISC处理器中使用访存指令存储和读取数据单元时,目标地址必须是所访问的数据单元字节数的整数倍,称之为地址对齐。例如在无内部互锁流水级的微处理器(Microprocessor without interlocked piped stages,MIPS)指令集的RISC处理器上,读取一半字时,访存地址必须是2个字节的整数倍;读取一个字时,访存指令中地址必须是4个字节的整数倍;写入一个双字时,访存地址必须是8个字节的整数倍。
如果在进行内存访问的时候,目标地址没有对齐,则会引起异常。典型的是系统提示“总线错误”后,直接杀死进程。
而CISC下(如x86)访存时,如果目标地址不对齐,CPU不会陷入异常,因为其内部有处理非对齐访问的微程序。
MIPS指令集的RISC处理器对非对齐访存的解决方法是,提供特殊的访存地址非对齐的访存指令,其中,MIPS指令集中与地址非对齐访存有关的指令包括对32位数据的操作和对64位数据的操作,就读取32位数据来说,其提供两条指令来实现,这两条指令被称为“从左读取字”指令和“从右读取字”指令:lwr/lwl,swr/srl,ldr/ldl,sdr/sdl。
但是,如此一来,处理器的性能有很大的下降并且进程经常出现报错。如何提高处理器性能成为亟待解决的技术问题。
技术实现要素:
为此,本发明提供了一种MIPS架构的数据操作处理方法和装置,利用对待处理数据按照单个字节进行数据读取和/或数据写入的操作处理,对于原来的汇编函数而言既保证了数据读取和/或数据写入的正确性,同时比用C函数操作处理数据时的性能有所提高。
为了实现上述目的,本发明提供如下技术方案:
根据本发明实施例的一方面,提供了一种基于MIPS架构的数据操作处理方法,包括:获取数据操作处理指令,所述数据操作处理指令为汇编指令;
解析所述数据操作处理指令,得到待处理数据的目标地址,所述目标地址包括源地址和/或目的地址;
当所述目标地址与所述待处理数据非对齐时,对所述待处理数据按照单个字节进行操作处理,所述操作处理包括:数据读取和/或数据写入。
所述当所述目标地址与所述待处理数据非对齐时,对所述待处理数据按照单个字节进行操作处理之前,还包括:
确定所述目标地址是否在显存的地址范围之内;
所述当所述目标地址与所述待处理数据非对齐时,对所述待处理数据按照单个字节进行操作处理,包括:
当所述目标地址在显存的地址范围内且所述目标地址与所述待处理数据非对齐时,对所述待处理数据按照单个字节进行操作处理。
判断所述待处理数据的目标地址与所述待处理数据是否对齐;
当所述数据的目标地址为所述待处理数据大小的整数倍时,所述目标地址与所述待处理数据对齐;
当所述数据的目标地址不是所述待处理数据大小的整数倍时,所述目标地址与所述待处理数据非对齐。还包括:
当所述目标地址与所述待处理数据对齐时,按照所述待处理数据的大小对所述待处理数据进行操作处理。
根据本发明实施例的一方面,提供了一种基于MIPS架构的数据操作处理装置,包括:
获取模块,用于获取数据操作处理指令,所述数据操作处理指令为汇编指令;
解析模块,用于解析所述数据操作处理指令,得到待处理数据的目标地址,所述目标地址包括源地址和/或目的地址;
特殊处理模块,用当所述目标地址与所述待处理数据非对齐时,对所述待处理数据按照单个字节进行操作处理,所述操作处理包括:数据读取和/或数据写入。
所述装置应用于Vxworks系统,还包括:确定模块,用于所述当所述目标地址与所述待处理数据非对齐时,对所述待处理数据按照单个字节进行操作处理之前,
确定所述目标地址是否在显存的地址范围之内;
所述当所述目标地址与所述待处理数据非对齐时,对所述待处理数据按照单个字节进行操作处理,包括:
当所述目标地址在显存的地址范围内且所述目标地址与所述待处理数据非对齐时,对所述待处理数据按照单个字节进行操作处理。
所述判定模块,用于判断所述待处理数据的目标地址与所述待处理数据是否对齐;
当所述数据的目标地址为所述待处理数据大小的整数倍时,所述目标地址与所述待处理数据对齐;
当所述数据的目标地址不是所述待处理数据大小的整数倍时,所述目标地址与所述待处理数据非对齐。
所述装置还包括,一般处理模块,用于当所述目标地址与所述待处理数据对齐时,按照所述待处理数据的大小对所述待处理数据进行操作处理。
根据本发明实施例提供的基于MIPS架构的数据操作处理方法和装置,利用对待处理数据按照单个字节进行数据读取和/或数据写入的操作处理,对于原来的汇编函数而言既保证了数据读取和/或数据写入的正确性,同时比用C函数操作处理数据时的性能有所提高,同时可以节省待处理数据的目标地址不在内存的地址范围内的情况下,进行数据读取和/或数据写入尝试时,会浪费额外不必要的操作时间,降低了数据处理性能。通过本实施例提供的数据操作处理方法同时可以保证数据读取和/或数据写入的正确性,避免错误数据读取和/或数据占用显存进程,导致报错等问题,且提高了处理数据时的性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是本发明的一种实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图引伸获得其它的实施附图。
图1为现有技术中MIPS指令集的RISC处理器对非对齐访存的解决方法的示意图;
图2为本发明实施例提供的基于MIPS架构的数据操作处理方法的流程图;
图3为本发明另一实施例提供的基于MIPS架构的数据操作处理方法的流程图;
图4为本发明实施例提供的基于MIPS架构的数据操作处理装置的结构示意图;
图5为本发明另一实施例提供的基于MIPS架构的数据操作处理装置的结构示意图。
具体实施方式
图1为现有技术中MIPS指令集的RISC处理器对非对齐访存的解决方法,解决的是小端模式下的情况,大端模式的情况则相反:首先ldl t0,0(t1),然后再ldr t0,7(t1)。
可以看到无论大端模式还是小端模式,非对齐访问的解决都是将原来的一条指令(对齐访问)完成的事分两步完成,即首先取始地址addr到下一个对齐地址处的部分数据,置入寄存器右部(小端),(大端置入左部(高位)),然后取从该对齐地址到addr+len-1处的部分数据(len为数据单元长度,半字为2,双字为8),置入寄存器左部(小端)。
如小端机器上,始地址为t1=0x1022,则:
ldr t0,0(t1)取0x1022~0x1027到t0的右部
ldl t0,7(t1)取0x1028~0x1029到t0的左部
注意上述指令的后缀r(right),l(left)都是相对寄存器而言,load操作是把取到的部分数据,置入寄存器的left或者right,store操作是将寄存器中数据的left或者right部分,写入目标地址而已。无论大端和小端寄存器的格式都是固定的,即右端为低位,左端为高位。任意第一条ldr/ldl/lwr/lwl/sdr/sdl/swr/swl只能访问内存的始地址到下一个对齐地址处。
下面结合附图和实例对本发明作进一步说明:
请参阅图2所示,其为本发明实施例提供的基于MIPS架构的数据操作处理方法的流程图,该方法包括:
步骤301,获取数据操作处理指令,所述数据操作处理指令为汇编指令。
步骤302,解析所述数据操作处理指令,得到待处理数据的目标地址述目标地址包括源地址和/或目的地址。
步骤304,当所述目标地址与所述待处理数据非对齐时,对所述待处理数据按照单个字节进行操作处理,所述操作处理包括:数据读取和/或数据写入。
其中步骤304,包括:判断所述待处理数据的目标地址与所述待处理数据是否对齐;当所述数据的目标地址为所述待处理数据大小的整数倍时,所述目标地址与所述待处理数据对齐;当所述数据的目标地址不是所述待处理数据大小的整数倍时,所述目标地址与所述待处理数据非对齐。
其中步骤301、302、304中的操作处理指的是数据读取和/或数据写入。
并且,实现上述步骤的体系结构为MIPS体系结构,同时,应用于Vxworks系统。
另外,当所述目标地址与所述待处理数据对齐时,按照所述待处理数据的大小对所述待处理数据进行操作处理。
通过本实施例提供的基于MIPS架构的数据操作处理方法,可以保证数据读取和/或数据写入的正确性,避免错误数据读取和/或数据占用显存进程,导致报错等问题,同时提高了处理数据时的性能。
请参阅图3所示,其为本发明另一实施例提供的基于MIPS架构数据操作处理方法的流程图,该方法包括:
步骤301,获取数据操作处理指令,所述数据操作处理指令为汇编指令。
步骤302,解析所述数据操作处理指令,得到待处理数据的目标地址述目标地址包括源地址和/或目的地址。
步骤303,确定所述目标地址是否在显存的地址范围之内;
步骤304,当所述目标地址与所述待处理数据非对齐时,对所述待处理数据按照单个字节进行操作处理,所述操作处理包括:数据读取和/或数据写入。
其中步骤303,具体表现为,应用于Vxworks系统,所述当所述目标地址与所述待处理数据非对齐时,对所述待处理数据按照单个字节进行操作处理之前,还包括:确定所述目标地址是否在显存的地址范围之内;所述当所述目标地址与所述待处理数据非对齐时,对所述待处理数据按照单个字节进行操作处理,包括:当所述目标地址在显存的地址范围内且所述目标地址与所述待处理数据非对齐时,对所述待处理数据按照单个字节进行操作处理。
其中步骤304,包括:判断所述待处理数据的目标地址与所述待处理数据是否对齐;当所述数据的目标地址为所述待处理数据大小的整数倍时,所述目标地址与所述待处理数据对齐;当所述数据的目标地址不是所述待处理数据大小的整数倍时,所述目标地址与所述待处理数据非对齐。
其中步骤301、302、303、304中的操作处理指的是数据读取和/或数据写入。
并且,实现上述步骤的体系结构为MIPS体系结构,同时,应用于Vxworks系统。
另外,当所述目标地址与所述待处理数据对齐时,按照所述待处理数据的大小对所述待处理数据进行操作处理。
通过本实施例提供的基于MIPS架构的数据操作处理方法,在增加了步骤303,即确定所述目标地址是否在显存的地址范围之内这个步骤后,可以节省待处理数据的目标地址不在内存的地址范围内的情况下,进行数据读取和/或数据写入尝试时,会浪费额外不必要的操作时间,降低了数据处理性能。通过本实施例提供的数据操作处理方法同时可以保证数据读取和/或数据写入的正确性,避免错误数据读取和/或数据占用显存进程,导致报错等问题,且提高了处理数据时的性能。
具体实现的一种实施例的代码举例如下:
通过双字逻辑左右移指令:dsrl t0,a1,28;dsll32t0,t0,28;dsrl32t0,t0,0;将32位地址的后28位清零,只保存高4位的值。
在此之后,确定所述目标地址否则在显存的地址范围之内,li t1,addr,其中所述addr指代显存地址。
当目标地址不在显存的地址范围之内的时候,跳转到srcV处,bne t1,t0,srcV,本指令为条件转移指令,当两个寄存器中内容不等时转移发生操作处理。
当目标地址中的数据与待处理数据相遇时,andi t0,a1,3;bnez t0,bloop;判断t0是否是4字节对齐,如果非对齐跳转到bloop处,对所述待处理数据按照单个字节进行操作处理。
通过双字逻辑左右移指令:dsrl t0,a1,28;dsll32t0,t0,28;dsrl32t0,t0,0;将32位地址的后28位清零,只保存高4位的值。
在此之后,确定所述目标地址否则在显存的地址范围之内,li t1,addr,其中所述addr指代显存地址。
当目标地址不在显存的地址范围之内的时候,跳转到srcV处,bne t1,t0,srcV,本指令为条件转移指令,当两个寄存器中内容不等时转移发生操作处理。
当目标地址中的数据与待处理数据相遇时,andi t0,a1,3;bnez t0,bloop;判断t0是否是4字节对齐,如果非对齐跳转到bloop处,对所述待处理数据按照单个字节进行操作处理。
具体操作处理函数表达如下:
bloop:
addiu a1,a1,1
lbu t2,0(a0)
.set noat
sltu AT,a1,v0
addiu a0,a0,1
bne AT,zero,bloop
.set at
sbt2,-1(a1)
bEnd:
jra
nop…
通过上述基于MIPS架构数据操作处理方法,可以节省待处理数据的目标地址不在内存的地址范围内的情况下,进行数据读取和/或数据写入尝试时,会浪费额外不必要的操作时间,降低了数据处理性能。通过本实施例提供的数据操作处理方法同时可以保证数据读取和/或数据写入的正确性,避免错误数据读取和/或数据占用显存进程,导致报错等问题,且提高了处理数据时的性能。
本发明实施例除了提供以上方法之外,还提供了一种基于MIPS架构的数据操作处理装置,如图4所示,该装置包括:
获取模块401,用于获取数据操作处理指令,所述数据操作处理指令为汇编指令;
解析模块402,用于解析所述数据操作处理指令,得到待处理数据的目标地址,所述目标地址包括源地址和/或目的地址;
特殊处理模块404,用于当所述目标地址与所述待处理数据非对齐时,对所述待处理数据按照单个字节进行操作处理,所述操作处理包括:数据读取和/或数据写入。
其中模块401、402、404中进行的数据处理指的是数据读取和/或数据写入。
并且,上述模块的体系结构为MIPS体系结构,同时,应用于Vxworks系统。
另外,当所述目标地址与所述待处理数据对齐时,按照所述待处理数据的大小对所述待处理数据进行操作处理。
通过本实施例提供的基于MIPS架构的数据操作处理装置,可以保证数据读取和/或数据写入的正确性,避免错误数据读取和/或数据占用显存进程,导致报错等问题,同时提高了处理数据时的性能。
除了图4所示的结构之外,在本发明的另一个可选实施例中,如图5所示,该装置包括:
获取模块401,用于获取数据操作处理指令,所述数据操作处理指令为汇编指令;
解析模块402,用于解析所述数据操作处理指令,得到待处理数据的目标地址述目标地址包括源地址和/或目的地址;
确定模块403,用于确定所述目标地址是否在显存的地址范围之内;
特殊处理模块404,用于当所述目标地址与所述待处理数据非对齐时,对所述待处理数据按照单个字节进行操作处理,所述操作处理包括:数据读取和/或数据写入。
其中确定模块403所执行的步骤303,具体表现为,应用于Vxworks系统,所述当所述目标地址与所述待处理数据非对齐时,对所述待处理数据按照单个字节进行操作处理之前,还包括:确定所述目标地址是否在显存的地址范围之内;所述当所述目标地址与所述待处理数据非对齐时,对所述待处理数据按照单个字节进行操作处理,包括:当所述目标地址在显存的地址范围内且所述目标地址与所述待处理数据非对齐时,对所述待处理数据按照单个字节进行操作处理。
其中特殊处理模块404所执行的步骤304,包括:判断所述待处理数据的目标地址与所述待处理数据是否对齐;当所述数据的目标地址为所述待处理数据大小的整数倍时,所述目标地址与所述待处理数据对齐;当所述数据的目标地址不是所述待处理数据大小的整数倍时,所述目标地址与所述待处理数据非对齐。
其中模块401、402、403、404所执行的操作处理指的是数据读取和/或数据写入。
并且,实现上述模块的体系结构为MIPS体系结构,同时,应用于Vxworks系统。
另外,当所述目标地址与所述待处理数据对齐时,按照所述待处理数据的大小对所述待处理数据进行操作处理。
通过本实施例提供的基于MIPS架构的数据操作处理装置,在增加了模块303,即确定模块,执行确定所述目标地址是否在显存的地址范围之内这个步骤后,可以节省待处理数据的目标地址不在内存的地址范围内的情况下,进行数据读取和/或数据写入尝试时,会浪费额外不必要的操作时间,降低了数据处理性能。通过本实施例提供的数据操作处理方法同时可以保证数据读取和/或数据写入的正确性,避免错误数据读取和/或数据占用显存进程,导致报错等问题,且提高了处理数据时的性能。
本发明上述实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,另外,在本申请各个实施例中的各功能模块可以集成在一个处理器中,也可以是单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
模块401、402、403、404中运行的具体实现的一种实施例的代码举例如下:
通过双字逻辑左右移指令:dsrl t0,a1,28;dsll32t0,t0,28;dsrl32t0,t0,0;将32位地址的后28位清零,只保存高4位的值。
在此之后,确定所述目标地址否则在显存的地址范围之内,li t1,addr,其中所述addr指代显存地址。
当目标地址不在显存的地址范围之内的时候,跳转到srcV处,bne t1,t0,srcV,本指令为条件转移指令,当两个寄存器中内容不等时转移发生操作处理。
当目标地址中的数据与待处理数据相遇时,andi t0,a1,3;bnez t0,bloop;判断t0是否是4字节对齐,如果非对齐跳转到bloop处,对所述待处理数据按照单个字节进行操作处理。
通过双字逻辑左右移指令:dsrl t0,a1,28;dsll32t0,t0,28;dsrl32t0,t0,0;将32位地址的后28位清零,只保存高4位的值。
在此之后,确定所述目标地址否则在显存的地址范围之内,li t1,addr,其中所述addr指代显存地址。
当目标地址不在显存的地址范围之内的时候,跳转到srcV处,bne t1,t0,srcV,本指令为条件转移指令,当两个寄存器中内容不等时转移发生操作处理。
当目标地址中的数据与待处理数据相遇时,andi t0,a1,3;bnez t0,bloop;判断t0是否是4字节对齐,如果非对齐跳转到bloop处,对所述待处理数据按照单个字节进行操作处理。
具体操作处理函数表达如下:
bloop:
addiu a1,a1,1
lbu t2,0(a0)
.set noat
sltu AT,a1,v0
addiu a0,a0,1
bne AT,zero,bloop
.set at
sbt2,-1(a1)
bEnd:
jra
nop…
本发明上述实施例中对模块及功能的划分是示意代表性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分和实施方式。在另一个可选实施例中,步骤301,获取数据操作处理指令,该数据操作处理指令为汇编指令;所述汇编指令可为图标移动指令、图形变换指令或图片显示指令等待操作指令。
步骤302,解析所述数据操作处理指令,得到待处理数据的目标地址,所述目标地址包括源地址和/或目的地址;当所述目标地址与所述待处理数据非对齐时,对所述待处理数据按照单个字节进行操作处理,所述操作处理包括:数据读取和/或数据写入。此时,步骤302具体可表现为,将图标移动至操作者指定的位置进行显示,或变换为操作者指定的图形状态,或在显存中显示成指定的图片形式等等。
在应用于Vxworks系统时,所述当所述目标地址与所述待处理数据非对齐时,对所述待处理数据按照单个字节进行操作处理之前,还包括:
步骤303,确定所述目标地址是否在显存的地址范围之内;
所述当所述目标地址与所述待处理数据非对齐时,步骤302,包括:
当所述目标地址在显存的地址范围内且所述目标地址与所述待处理数据非对齐时,对所述待处理数据按照单个字节进行操作处理。因为对每个图标或图形或图片执行操作处理时,按照单个字节进行操作处理,会保证对每个图标或图形或图片的每个字节执行了到位的操作处理,这里的操作处理可以是读取操作,也可以是写入操作,具体可以表现为将图标移动至操作者指定的位置进行显示,或变换为操作者指定的图形状态,或在显存中显示成指定的图片形式等具体的执行形式,包括以上执行形式的一种或多种组合,但不限于上述示例。
步骤304,还包括:判断所述待处理数据的目标地址与所述待处理数据是否对齐;当所述数据的目标地址为所述待处理数据大小的整数倍时,所述目标地址与所述待处理数据对齐;当所述数据的目标地址不是所述待处理数据大小的整数倍时,所述目标地址与所述待处理数据非对齐。该步骤给出了一种判断数据对齐的方法,但不限于此一种判断对齐的方法,还可以有其他中判断对齐方法,在此不一一列举。
还包括,步骤305:当所述目标地址与所述待处理数据对齐时,按照所述待处理数据的大小对所述待处理数据进行操作处理。当判断待处理的图标、图形、图片的数据与显存内的地址不存在非对齐的特殊状况下,随即对所述图标、图形、图片进行相对应的操作处理。
本实施例具体表现在Vxworks显示方面,应用本发明提供的一种基于MIPS架构的数据操作处理方法,具体解决了原有的汇编函数鼠标显示拖影现象,图形测试拷贝数据错误的技术问题。
通过本发明实施例提供的一种基于MIPS架构的数据操作处理方法和装置,利用对待处理数据按照单个字节进行数据读取和/或数据写入的操作处理,对于原来的汇编函数而言既保证了数据读取和/或数据写入的正确性,同时比用C函数操作处理数据时的性能有所提高,同时可以节省待处理数据的目标地址不在内存的地址范围内的情况下,进行数据读取和/或数据写入尝试时,会浪费额外不必要的操作时间,降低了数据处理性能。通过本实施例提供的数据操作处理方法同时可以保证数据读取和/或数据写入的正确性,避免错误数据读取和/或数据占用显存进程,导致报错等问题,且提高了处理数据时的性能。
本发明上述实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,另外,在本申请各个实施例中的各功能模块可以集成在一个处理器中,也可以是单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的原理或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。