CN112269596B - 一种指令处理方法及处理器 - Google Patents
一种指令处理方法及处理器 Download PDFInfo
- Publication number
- CN112269596B CN112269596B CN202011121732.8A CN202011121732A CN112269596B CN 112269596 B CN112269596 B CN 112269596B CN 202011121732 A CN202011121732 A CN 202011121732A CN 112269596 B CN112269596 B CN 112269596B
- Authority
- CN
- China
- Prior art keywords
- register
- integer
- operand
- instruction
- address
- 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
Links
- 238000003672 processing method Methods 0.000 title abstract description 7
- 238000000034 method Methods 0.000 claims abstract description 5
- 238000012545 processing Methods 0.000 claims description 3
- 230000006870 function Effects 0.000 abstract description 9
- 230000000694 effects Effects 0.000 abstract description 2
- 238000013461 design Methods 0.000 description 3
- 210000003813 thumb Anatomy 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000011410 subtraction method Methods 0.000 description 1
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/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
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
本发明涉及一种指令处理方法及处理器,该方法将16个通用寄存器均分成两组,其中一组定义为地址寄存器,另一组定义为整数寄存器;所述地址寄存器用于存放内存地址,所述整数寄存器用于存放整数数据;解析特定指令时,分别使用3bit操作数指向作为源寄存器或目标寄存器的地址寄存器或整数寄存器。本发明能够在几乎不影响指令集的灵活性和高效性的基础上,减少指令集使用的bit数,使得16bits压缩指令集的能够容纳更多的功能。达到更少混用32位指令或不混用32位指令的效果,进一步的提高代码密度和执行效率。
Description
技术领域
本发明涉及计算机指令集,具体的涉及一种指令处理方法及处理器。
背景技术
指令集是控制计算机硬件工作的最低层的机器指令,也是CPU能够直接识别的二进制指令。指令集决定了一种计算机硬件设计和体系结构。随着计算机系统的发展,要求计算机指令系统的构造能使计算机的整体性能更快更高效,对于一个设计良好的指令集的基本要求是:完整性、规整性和高效性。
目前人们熟知的指令集分为两类:复杂指令集(Complex Instruction SetComputing,简称为CISC)和精简指令集(Reduced Instruction Set Computing,简称为RISC)。复杂指令集的特点是指令集的格式复杂,规整性不好,体现在指令的长度不一致,从1个字节、2个字节到5个字节等等甚至更多,指令的个数比较多,至少都有上百条指令。还有就是指令集的功能复杂不单一,一条指令可能完成内存读写,计算等多个功能,有的指令甚至可以再增加一些前缀来具有更多的功能。复杂指令集的代表是x86指令集和x86_64指令集。复杂指令集一般在CPU内部采用微程序(微码)的方式来实现。
精简指令集的特点是指令集的格式简单固定,比如指令采用16位或32位的固定的长度,并且指令中的操作码字段、操作数字段都尽可能具有统一的格式。指令的功能都尽量单比如一种指令就只在寄存器中做计算、或者只做读内存的操作,或写内存操作。这样指令的译码和执行都比较简单高效,不需要用微码来实现。精简指令集的第二个特点是采用大量的寄存器,使大部分指令操作都在寄存器之间进行,提高了处理速度。由于RISC处理器指令简单、采用硬布线控制逻辑、处理能力强、速度快,所以目前世界上存在并广泛使用的指令集绝大多数都是精简指令集。
常用精简指令集的长度一般都是32位,比如arm和mips指令集,这是因为arm处理器设计中同时能访问到16个寄存器,那么在指令中就需要4bits来表示一个寄存器,arm的计算指令采用三操作数模式,需要指定三个寄存器,所以操作数就需要12bits,再加上4个bits的操作码字段,仅仅这一条指令就占用了16bits,所以整个指令集的长度只能选择32bits。在mips处理器中有32个寄存器,需要5bits来表示一个寄存器,所以mips的指令长度也是32bits。
以16个通用寄存器为例,一个典型的寄存器三操作数整数运算指令如下:
源寄存器1 | 源寄存器2 | 目标寄存器 | 操作码 |
4bits | 4bits | 4bits | 4bits |
一个典型的基地址寄存器加偏移寄存器的读内存指令形式如下:
基地址寄存器 | 偏移寄存器 | 目标寄存器 | 有无符号位 | 读取长度 |
4bits | 4bits | 4bits | 1bit | 3bits |
采用32bits固定长度的指令集的一个缺点就是指令集的密度不高,编译出的程序体积偏大。所以出现了16bits的压缩的arm指令集,被称为thumb指令集。与等价的32位代码相比较,thumb指令集在保留了32位代码运行速度的同时,节省了程序代码30%的存储空间。但是thumb指令集不是一个完整功能的指令集,比如在计算指令中,寄存器的访问有限制,不能完整访问16个寄存器,并且操作码也不全,没有某些移位指令和乘法指令。跳转指令和内存访问指令也有限制。MIPS指令集也出现了16位的压缩指令集,当然同样也有这些类似的限制。
所以不能指望处理器只执行16位指令而不需要32位指令。为了提高二进制代码密度,同时保证指令集功能的完整性,目前只能是混用16位指令和32位指令,并且有相当一部分功能需要32位指令来实现。这样就带来指令模式切换,指令译码和执行复杂等问题。
发明内容
本发明针对现有技术中存在的技术问题,提供一种指令处理方法及处理器,能够在几乎不影响指令集的灵活性和高效性的基础上,减少指令集使用的bit数,使得16bits压缩指令集的能够容纳更多的功能。达到更少混用32位指令或不混用32位指令的效果,进一步的提高代码密度和执行效率。
本发明解决上述技术问题的技术方案如下:
一方面,本发明提供一种指令处理方法,包括:
将16个通用寄存器均分成两组,其中一组定义为地址寄存器,另一组定义为整数寄存器;所述地址寄存器用于存放内存地址,所述整数寄存器用于存放整数数据;
解析特定指令时,分别使用3bits操作数指向作为源寄存器或目标寄存器的地址寄存器或整数寄存器;所述特定指令至少包括基于寄存器的三操作数整数运算指令或基于基地址寄存器和偏移寄存器的读内存指令;
针对基于寄存器的三操作数整数运算指令:
1)若三个操作数均指向整数寄存器,则分别采用3bits操作数替换原操作数,修改原运算指令;
2)若三个操作数中至少存在一个操作数既不指向整数寄存器,也不指向地址寄存器,则将该操作数写入整数寄存器,然后采用三个指向整数寄存器或地址寄存器的3bits操作数替换原操作数修改原运算指令;
针对基于基地址寄存器和偏移地址寄存器的读内存指令:
1)若指令中的操作数所指向的基地址寄存器属于地址寄存器,偏移寄存器属于整数寄存器,目标寄存器属于整数寄存器,则分别采用3bits操作数替换原操作数,修改原运算指令;
2)若指令中操作数所指向的基地址寄存器是地址寄存器,偏移寄存器是整数寄存器,目标寄存器是地址寄存器,则删除原指令中的符号位、读取长度,并分别采用3bits操作数替换原操作数,修改原运算指令;
3)若指令中操作数所指向的基地址寄存器不是地址寄存器,则将该操作数写入一个地址寄存器;若指令中操作数所指向的偏移寄存器不是整数寄存器,则将该操作数写入一个整数寄存器,若指令中操作数所指向的目标寄存器不是整数寄存器,则将该操作数写入一个整数寄存器;然后采用指向上述地址寄存器或整数寄存器的3bits操作数替换原操作数,修改原运算指令。
另一方面,本发明还提供一种处理器,包括:
16个通用寄存器,所述16个通用寄存器均分为两组,其中一组定义为地址寄存器,另一组定义为整数寄存器;所述地址寄存器用于存放内存地址,所述整数寄存器用于存放整数数据;
所述处理器在解析特定指令时,分别使用3bit操作数指向作为源寄存器或目标寄存器的地址寄存器或整数寄存器;
所述特定指令至少包括基于寄存器的三操作数整数运算指令或基于基地址寄存器和偏移寄存器的读内存指令;
针对基于寄存器的三操作数整数运算指令:
1)若三个操作数均指向整数寄存器,则分别采用3bits操作数替换原操作数,修改原运算指令;
2)若三个操作数中至少存在一个操作数既不指向整数寄存器,也不指向地址寄存器,则将该操作数写入整数寄存器,然后采用三个指向整数寄存器或地址寄存器的3bits操作数替换原操作数修改原运算指令;
针对基于基地址寄存器和偏移地址寄存器的读内存指令:
1)若指令中的操作数所指向的基地址寄存器属于地址寄存器,偏移寄存器属于整数寄存器,目标寄存器属于整数寄存器,则分别采用3bits操作数替换原操作数,修改原运算指令;
2)若指令中操作数所指向的基地址寄存器是地址寄存器,偏移寄存器是整数寄存器,目标寄存器是地址寄存器,则删除原指令中的符号位、读取长度,并分别采用3bits操作数替换原操作数,修改原运算指令;
3)若指令中操作数所指向的基地址寄存器不是地址寄存器,则将该操作数写入一个地址寄存器;若指令中操作数所指向的偏移寄存器不是整数寄存器,则将该操作数写入一个整数寄存器,若指令中操作数所指向的目标寄存器不是整数寄存器,则将该操作数写入一个整数寄存器;然后采用指向上述地址寄存器或整数寄存器的3bits操作数替换原操作数,修改原运算指令。
本发明的有益效果是:在现有指令集设计中,大多数寄存器都是通用寄存器,通用寄存器中既可以存放需要计算的整数数据,也可以存放读写内存的地址,比如栈地址、某个变量的内存地址或某段代码的内存首地址。所以在指令的操作数字段要安排足够多的bit能够访问所有的通用寄存器。
一个典型的寄存器三操作数整数运算指令,需要16个bit编码空间,通过本发明方法,就把一条原本需要16个bits的指令变换成三条分别需要13、12、7bits的指令来实现。使用原有指令的地方都可以用新的指令来等价替换,并且绝大多数时候都是一条新指令替换一条旧指令,几乎不影响原有指令的灵活性和高效性。
原本需要2^16个编码点,新指令只需要(2^13+2^12+2^7)个编码点,减少了大约81%的编码空间范围。
而对于一个典型的基地址寄存器加偏移寄存器的读内存指令,同样需要16bit编码空间,通过本发明方法,则至多只需要(2^13+2^9)编码空间。由此减少了编码空间范围。
具体实施方式
以下结合实施例对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
本发明实施例提供一种处理器,该处理器包括16个通用寄存器,所述16个通用寄存器均分为两组,其中一组定义为地址寄存器,另一组定义为整数寄存器;所述地址寄存器用于存放内存地址,所述整数寄存器用于存放整数数据。
该处理器在解析特定指令时,结合两组通用寄存器,采用一种特殊的指令处理方法,以实现在几乎不影响指令集的灵活性和高效性的基础上,减少指令集使用的bit数,使得16bits压缩指令集的能够容纳更多的功能。
具体的,在解析特定指令时,分别使用3bits操作数指向作为源寄存器或目标寄存器的地址寄存器或整数寄存器;所述特定指令至少包括基于寄存器的三操作数整数运算指令或基于基地址寄存器和偏移寄存器的读内存指令;
针对基于寄存器的三操作数整数运算指令:
1)若三个操作数均指向整数寄存器,则分别采用3bits操作数替换原操作数,修改原运算指令;
2)若三个操作数中至少存在一个操作数既不指向整数寄存器,也不指向地址寄存器,则将该操作数写入整数寄存器,然后采用三个指向整数寄存器或地址寄存器的3bits操作数替换原操作数修改原运算指令;
针对基于基地址寄存器和偏移地址寄存器的读内存指令:
1)若指令中的操作数所指向的基地址寄存器属于地址寄存器,偏移寄存器属于整数寄存器,目标寄存器属于整数寄存器,则分别采用3bits操作数替换原操作数,修改原运算指令;
2)若指令中操作数所指向的基地址寄存器是地址寄存器,偏移寄存器是整数寄存器,目标寄存器是地址寄存器,则删除原指令中的符号位、读取长度,并分别采用3bits操作数替换原操作数,修改原运算指令;
3)若指令中操作数所指向的基地址寄存器不是地址寄存器,则将该操作数写入一个地址寄存器;若指令中操作数所指向的偏移寄存器不是整数寄存器,则将该操作数写入一个整数寄存器,若指令中操作数所指向的目标寄存器不是整数寄存器,则将该操作数写入一个整数寄存器;然后采用指向上述地址寄存器或整数寄存器的3bits操作数替换原操作数,修改原运算指令。
以16个通用寄存器为例,一个典型的寄存器三操作数整数运算指令如下:
源寄存器1 | 源寄存器2 | 目标寄存器 | 操作码 |
4bits | 4bits | 4bits | 4bits |
每个寄存器字段必须是4个bits,操作码表示进行什么运算,全部的16个操作码如表1所示:
表1 操作码及其运算
0000 | 加法 | 0001 | 带进位加 |
0010 | 减法 | 0011 | 带借位减 |
0100 | 比较CMP | 0101 | 拷贝MOV |
0110 | 算术左移 | 0111 | 算术右移 |
1000 | 逻辑右移 | 1001 | 逻辑与 |
1010 | 逻辑或 | 1011 | 逻辑异或 |
1100 | 有符号乘法 | 1101 | 无符号乘法 |
1110 | 有符号除法 | 1111 | 无符号除法 |
那些存放内存地址的寄存器其实是很少参与到整数计算的。即使内存地址需要做整数计算,也是简单的加法、减法。内存地址几乎不可能会进行乘法,除法和逻辑运算等。这样我们把16个通用寄存器分为两组:一组有8个寄存器,只存放内存地址,叫做地址寄存器;另一组也是8个寄存器,只存放整数数据,叫做整数寄存器。那么上面的基于寄存器的三操作数整数运算指令可以设计成如下三条指令:
1整数寄存器运算指令
源整数寄存器1 | 源整数寄存器2 | 目标整数寄存器 | 操作码 |
3bits | 3bits | 3bits | 4bits |
2地址寄存器运算指令
因为内存地址的运算比较少,只需要3个bits(甚至2个bits)就可以满足。
源地址寄存器1 | 源整数寄存器2 | 目标地址寄存器 | 操作码 |
3bits | 3bits | 3bits | 3bits |
3整数寄存器和地址寄存器拷贝指令
地址寄存器 | 整数寄存器 | 拷贝方向 |
3bits | 3bits | 1bit |
具体的,原始的三操作数指令如何分解成上述三条指令,有以下几种情况:
情况1:如果源寄存器1,源寄存器2和目标寄存器都是整数寄存器,就可以直接转换成下面一条指令:
源整数寄存器1 | 源整数寄存器2 | 目标整数寄存器 | 操作码 |
3bits | 3bits | 3bits | 4bits |
情况2:如果源寄存器1是地址寄存器,源寄存器2是整数寄存器,目标整数寄存器是地址寄存器,操作码是表1中的前8个操作码,转换成下面一条指令:
源地址寄存器1 | 源整数寄存器2 | 目标地址寄存器 | 操作码 |
3bits | 3bits | 3bits | 3bits |
情况3:不属于上述两种情况,转换成下面若干条指令:
1、把2个源寄存器中不是整数寄存器的拷贝到整数寄存器中。如果没有找到空闲整数寄存器,就先把任意2个整数寄存器压栈保存,然后再拷贝。
地址寄存器 | 整数寄存器 | 拷贝方向 |
3bits | 3bits | 地址到整数 |
2、如果目标寄存器不是整数寄存器,也需要另一个整数寄存器,如果没有找到空闲整数寄存器,也把一个整数寄存器压栈保存。
3、执行整数运算。
4、如果目标寄存器不是整数寄存器,需要把整数运算结果拷贝回目标寄存器。
地址寄存器 | 整数寄存器 | 拷贝方向 |
3bits | 3bits | 整数到地址 |
5、整数寄存器出栈,恢复压栈的整数寄存器。
原始的4bits三操作数指令按照上述情况都可以等价的翻译成3bits操作数指令,并且大多数情况都是情况1和2,即大多数情况都可以只用一条指令翻译和代替。
上述指令中的寄存器字段只需要3个bits,这样就把一条原本需要16个bits的指令变换成三条分别需要13、12、7bits的指令来实现。使用原有指令的地方都可以用新的指令来等价替换,并且绝大多数时候都是一条新指令替换一条旧指令,几乎不影响原有指令的灵活性和高效性。
原本需要2^16个编码点,新指令只需要(2^13+2^12+2^7)个编码点,减少了大约81%的编码空间范围。
以16个通用寄存器为例,一个典型的基地址寄存器加偏移寄存器的读内存指令形式如下:
基地址寄存器 | 偏移寄存器 | 目标寄存器 | 有无符号位 | 读取长度 |
4bits | 4bits | 4bits | 1bit | 3bits |
基地址寄存器中存放一个内存地址,偏移寄存器中存放一个偏移值,由(内存地址+偏移值)确定要读取的内存起始地址,读取指定长度(1个字节、2个字节、4个字节、8个字节、16个字节等等)的内存内容到目标寄存器。如果寄存器不分组,那么每个寄存器字段必须是4个bits,这一条指令就需要16bits(表示读取长度的3bits可以精简到2bits)。
如果寄存器分组成地址寄存器和整数寄存器,因为基地址寄存器中存放的是内存地址,所以只能是地址寄存器;偏移寄存器存放的是偏移值,所以也只能是整数寄存器。并且把目标寄存器也分为整数寄存器和地址寄存器,这样可以把基地址加偏移寄存器的读内存指令设计成如下的两条指令:
1基地址加偏移寄存器读内存加载整数寄存器指令
基地址寄存器 | 偏移寄存器 | 目标整数寄存器 | 有无符号位 | 读取内存的长度 |
3bits | 3bits | 3bits | 1bit | 3bits |
2基地址加偏移寄存器读内存加载地址寄存器指令
基地址寄存器 | 偏移寄存器 | 目标地址寄存器 |
3bits | 3bits | 3bits |
加载地址寄存器不需要指定有无符号位,因为内存地址都是无符号的;也不需要指定读取内存的长度,因为指针的长度都是固定的。
具体的,原始的基地址寄存器加偏移寄存器的读内存指令形式如下:
基地址寄存器 | 偏移寄存器 | 目标寄存器 | 有无符号位 | 读取长度 |
4bits | 4bits | 4bits | 1bit | 3bits |
按如下几种情况对上述中进行分解:
情况1:基地址寄存器属于地址寄存器,偏移寄存器属于整数寄存器,目标寄存器属于整数寄存器,翻译成下面一条指令:
基地址寄存器 | 偏移寄存器 | 目标整数寄存器 | 有无符号位 | 读取内存的长度 |
3bits | 3bits | 3bits | 1bit | 3bits |
情况2:基地址寄存器是地址寄存器,偏移寄存器是整数寄存器,目标寄存器是地址寄存器,无符号,内存读取长度是当前指针长度,翻译成下面一条指令:
基地址寄存器 | 偏移寄存器 | 目标地址寄存器 |
3bits | 3bits | 3bits |
情况3:不属于上述两种情况:
1、如果基地址寄存器不是地址寄存器,把它拷贝到一个地址寄存器,如果没有空闲的地址寄存器,就先把任意1个地址寄存器压栈保存,然后再拷贝。
地址寄存器 | 整数寄存器 | 拷贝方向 |
3bits | 3bits | 整数到地址 |
2、如果偏移寄存器不是整数寄存器,把它拷贝到一个整数寄存器,如果没有空闲的整数寄存器,就先把任意1个整数寄存器压栈保存,然后再拷贝。
地址寄存器 | 整数寄存器 | 拷贝方向 |
3bits | 3bits | 地址整数 |
3、如果目标寄存器不是整数寄存器,也需要另一个整数寄存器,如果没有找到空闲整数寄存器,也把一个整数寄存器压栈保存。
4、执行。
基地址寄存器 | 偏移寄存器 | 目标整数寄存器 | 有无符号位 | 读取内存的长度 |
3bits | 3bits | 3bits | 1bit | 3bits |
5、如果目标寄存器不是整数寄存器,需要把整数运算结果拷贝回目标寄存器。
地址寄存器 | 整数寄存器 | 拷贝方向 |
3bits | 3bits | 整数到地址 |
6、前面压栈的整数寄存器和地址寄存器出栈。
原始的基地址寄存器加偏移寄存器的4bits读内存指令按照上述情况都可以等价的翻译成3bits读内存指令,并且大多数情况都是情况1和2,即大多数情况都可以只用一条指令翻译和代替。
上述指令中的寄存器字段只需要3个bits,这样就把一条原本需要16个bits的指令变换成两条分别需要13、9bits的指令来实现。原本需要2^16个编码点,新指令只需要(2^13+2^9)个编码点。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (2)
1.一种指令处理方法,其特征在于,包括:
将16个通用寄存器均分成两组,其中一组定义为地址寄存器,另一组定义为整数寄存器;所述地址寄存器用于存放内存地址,所述整数寄存器用于存放整数数据;
解析特定指令时,分别使用3bits操作数指向作为源寄存器或目标寄存器的地址寄存器或整数寄存器;所述特定指令至少包括基于寄存器的三操作数整数运算指令或基于基地址寄存器和偏移寄存器的读内存指令;
针对基于寄存器的三操作数整数运算指令:
若三个操作数均指向整数寄存器,则分别采用3bits操作数替换原操作数,修改原运算指令;若三个操作数中至少存在一个操作数既不指向整数寄存器,也不指向地址寄存器,则将该操作数写入整数寄存器,然后采用三个指向整数寄存器或地址寄存器的3bits操作数替换原操作数修改原运算指令;
将三操作数整数运算指令分解成三条指令,包含以下几种情况:
情况1:如果源寄存器1,源寄存器2和目标寄存器都是整数寄存器,就可以直接转换成下面一条指令:
情况2:如果源寄存器1是地址寄存器,源寄存器2是整数寄存器,目标整数寄存器是地址寄存器,操作码是表1中的前8个操作码,转换成下面一条指令:
情况3:不属于上述两种情况,转换成下面若干条指令:
(1)把2个源寄存器中不是整数寄存器的拷贝到整数寄存器中,如果没有找到空闲整数寄存器,就先把任意2个整数寄存器压栈保存,然后再拷贝;
(2)如果目标寄存器不是整数寄存器,也需要另一个整数寄存器,如果没有找到空闲整数寄存器,也把一个整数寄存器压栈保存;
(3)执行整数运算;
(4)如果目标寄存器不是整数寄存器,需要把整数运算结果拷贝回目标寄存器;
(5)整数寄存器出栈,恢复压栈的整数寄存器;
针对基于基地址寄存器和偏移地址寄存器的读内存指令:
1)若指令中的操作数所指向的基地址寄存器属于地址寄存器,偏移寄存器属于整数寄存器,目标寄存器属于整数寄存器,则分别采用3bits操作数替换原操作数,修改原运算指令;
2)若指令中操作数所指向的基地址寄存器是地址寄存器,偏移寄存器是整数寄存器,目标寄存器是地址寄存器,则删除原指令中的符号位、读取长度,并分别采用3bits操作数替换原操作数,修改原运算指令;
若指令中操作数所指向的基地址寄存器不是地址寄存器,则将该操作数写入一个地址寄存器;若指令中操作数所指向的偏移寄存器不是整数寄存器,则将该操作数写入一个整数寄存器,若指令中操作数所指向的目标寄存器不是整数寄存器,则将该操作数写入一个整数寄存器;然后采用指向上述地址寄存器或整数寄存器的3bits操作数替换原操作数,修改原运算指令;具体的:
(1)如果基地址寄存器不是地址寄存器,把它拷贝到一个地址寄存器,如果没有空闲的地址寄存器,就先把任意1个地址寄存器压栈保存,然后再拷贝;
(2)如果偏移寄存器不是整数寄存器,把它拷贝到一个整数寄存器,如果没有空闲的整数寄存器,就先把任意1个整数寄存器压栈保存,然后再拷贝;
(3)如果目标寄存器不是整数寄存器,也需要另一个整数寄存器,如果没有找到空闲整数寄存器,也把一个整数寄存器压栈保存;
(4)执行;
(5)如果目标寄存器不是整数寄存器,需要把整数运算结果拷贝回目标寄存器;
(6)前面压栈的整数寄存器和地址寄存器出栈。
2.一种处理器,其特征在于,包括:
16个通用寄存器,所述16个通用寄存器均分为两组,其中一组定义为地址寄存器,另一组定义为整数寄存器;所述地址寄存器用于存放内存地址,所述整数寄存器用于存放整数数据;
所述处理器在解析特定指令时,分别使用3bit操作数指向作为源寄存器或目标寄存器的地址寄存器或整数寄存器;
所述特定指令至少包括基于寄存器的三操作数整数运算指令或基于基地址寄存器和偏移寄存器的读内存指令;
针对基于寄存器的三操作数整数运算指令:
若三个操作数均指向整数寄存器,则分别采用3bits操作数替换原操作数,修改原运算指令;若三个操作数中至少存在一个操作数既不指向整数寄存器,也不指向地址寄存器,则将该操作数写入整数寄存器,然后采用三个指向整数寄存器或地址寄存器的3bits操作数替换原操作数修改原运算指令;
将三操作数整数运算指令分解成三条指令,包含以下几种情况:
情况1:如果源寄存器1,源寄存器2和目标寄存器都是整数寄存器,就可以直接转换成下面一条指令:
情况2:如果源寄存器1是地址寄存器,源寄存器2是整数寄存器,目标整数寄存器是地址寄存器,操作码是表1中的前8个操作码,转换成下面一条指令:
情况3:不属于上述两种情况,转换成下面若干条指令:
(1)把2个源寄存器中不是整数寄存器的拷贝到整数寄存器中,如果没有找到空闲整数寄存器,就先把任意2个整数寄存器压栈保存,然后再拷贝;
(2)如果目标寄存器不是整数寄存器,也需要另一个整数寄存器,如果没有找到空闲整数寄存器,也把一个整数寄存器压栈保存;
(3)执行整数运算;
(4)如果目标寄存器不是整数寄存器,需要把整数运算结果拷贝回目标寄存器;
(5)整数寄存器出栈,恢复压栈的整数寄存器;
针对基于基地址寄存器和偏移地址寄存器的读内存指令:
1)若指令中的操作数所指向的基地址寄存器属于地址寄存器,偏移寄存器属于整数寄存器,目标寄存器属于整数寄存器,则分别采用3bits操作数替换原操作数,修改原运算指令;
2)若指令中操作数所指向的基地址寄存器是地址寄存器,偏移寄存器是整数寄存器,目标寄存器是地址寄存器,则删除原指令中的符号位、读取长度,并分别采用3bits操作数替换原操作数,修改原运算指令;
若指令中操作数所指向的基地址寄存器不是地址寄存器,则将该操作数写入一个地址寄存器;若指令中操作数所指向的偏移寄存器不是整数寄存器,则将该操作数写入一个整数寄存器,若指令中操作数所指向的目标寄存器不是整数寄存器,则将该操作数写入一个整数寄存器;然后采用指向上述地址寄存器或整数寄存器的3bits操作数替换原操作数,修改原运算指令
具体的:
(1)如果基地址寄存器不是地址寄存器,把它拷贝到一个地址寄存器,如果没有空闲的地址寄存器,就先把任意1个地址寄存器压栈保存,然后再拷贝;
(2)如果偏移寄存器不是整数寄存器,把它拷贝到一个整数寄存器,如果没有空闲的整数寄存器,就先把任意1个整数寄存器压栈保存,然后再拷贝;
(3)如果目标寄存器不是整数寄存器,也需要另一个整数寄存器,如果没有找到空闲整数寄存器,也把一个整数寄存器压栈保存;
(4)执行;
(5)如果目标寄存器不是整数寄存器,需要把整数运算结果拷贝回目标寄存器;
(6)前面压栈的整数寄存器和地址寄存器出栈。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011121732.8A CN112269596B (zh) | 2020-10-19 | 2020-10-19 | 一种指令处理方法及处理器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011121732.8A CN112269596B (zh) | 2020-10-19 | 2020-10-19 | 一种指令处理方法及处理器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112269596A CN112269596A (zh) | 2021-01-26 |
CN112269596B true CN112269596B (zh) | 2023-11-28 |
Family
ID=74337561
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011121732.8A Active CN112269596B (zh) | 2020-10-19 | 2020-10-19 | 一种指令处理方法及处理器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112269596B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113254073B (zh) * | 2021-05-31 | 2022-08-26 | 厦门紫光展锐科技有限公司 | 数据处理方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1993001543A1 (en) * | 1991-07-08 | 1993-01-21 | S-Mos Systems, Inc. | Risc microprocessor architecture implementing multiple typed register sets |
JPH06110685A (ja) * | 1990-06-29 | 1994-04-22 | Digital Equip Corp <Dec> | 高性能プロセッサにおける分岐予想方法 |
WO1997022932A1 (en) * | 1995-12-15 | 1997-06-26 | Intel Corporation | Computer implemented method for transferring packed data between register files and memory |
CN102221987A (zh) * | 2011-05-11 | 2011-10-19 | 西安电子科技大学 | 基于嵌入式专用指令集处理器的指令集编码方法 |
CN110175048A (zh) * | 2019-05-15 | 2019-08-27 | 童先娥 | 一种指令处理方法及处理器 |
-
2020
- 2020-10-19 CN CN202011121732.8A patent/CN112269596B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH06110685A (ja) * | 1990-06-29 | 1994-04-22 | Digital Equip Corp <Dec> | 高性能プロセッサにおける分岐予想方法 |
WO1993001543A1 (en) * | 1991-07-08 | 1993-01-21 | S-Mos Systems, Inc. | Risc microprocessor architecture implementing multiple typed register sets |
WO1997022932A1 (en) * | 1995-12-15 | 1997-06-26 | Intel Corporation | Computer implemented method for transferring packed data between register files and memory |
CN102221987A (zh) * | 2011-05-11 | 2011-10-19 | 西安电子科技大学 | 基于嵌入式专用指令集处理器的指令集编码方法 |
CN110175048A (zh) * | 2019-05-15 | 2019-08-27 | 童先娥 | 一种指令处理方法及处理器 |
Also Published As
Publication number | Publication date |
---|---|
CN112269596A (zh) | 2021-01-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
RU2292581C2 (ru) | Команды загрузки/перемещения и копирования для процессора | |
US7216138B2 (en) | Method and apparatus for floating point operations and format conversion operations | |
US6263426B1 (en) | Conversion from packed floating point data to packed 8-bit integer data in different architectural registers | |
JP3958662B2 (ja) | プロセッサ | |
KR101231556B1 (ko) | 선택된 비트들의 회전 후 연산 기능 및 그 명령어 | |
CN112099852A (zh) | 可变格式、可变稀疏矩阵乘法指令 | |
US6266769B1 (en) | Conversion between packed floating point data and packed 32-bit integer data in different architectural registers | |
US6247116B1 (en) | Conversion from packed floating point data to packed 16-bit integer data in different architectural registers | |
CN110968346A (zh) | 用于执行用于快速元素解包到二维寄存器中的指令的系统 | |
US10678540B2 (en) | Arithmetic operation with shift | |
US6292815B1 (en) | Data conversion between floating point packed format and integer scalar format | |
WO1999056245A2 (en) | Color conversion from floating point format to integer format | |
WO2009087158A2 (en) | Compare and branch facility and instruction therefore | |
EP2229622A1 (en) | Execute relative instruction | |
Lee et al. | 64-bit and Multimedia Extensions in the PA-RISC 2.0 Architecture | |
CN112269596B (zh) | 一种指令处理方法及处理器 | |
CN116880906A (zh) | 用于8位浮点矩阵点积指令的装置、方法和系统 | |
CN114721624A (zh) | 用于处理矩阵的处理器、方法和系统 | |
CN110175048A (zh) | 一种指令处理方法及处理器 | |
GB2410097A (en) | Constant generation in floating point processing | |
CN108427573B (zh) | 用于处理器的适于短操作数的扩展指令执行方法及装置 | |
Gwennap | MICROPROCESSOR | |
Hor et al. | The design and programming of a powerful short wordlength processor using context-dependent machine instructions |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20231214 Address after: 8004-26, 8th Floor, Longyue Building, No. 42 Guanggu 1st Road, Donghu New Technology Development Zone, Wuhan City, Hubei Province, 430000 Patentee after: Wuhan Byte Shuangcheng Technology Co.,Ltd. Address before: 441000 No.5, North Street, Yicheng city, Xiangyang City, Hubei Province Patentee before: Tong Xiane |