本人特别推介:《酷能指令集》及相关专利技术

发布: 2017-5-16 23:34 | 作者: 吾要单片机 | 来源: EETOP 赛灵思(Xilinx) 社区

[i=s] 本帖最后由 吾要单片机 于 2017-5-25 21:00 编辑

在介绍本人的《酷能指令集》之前先介绍与之先关的专利技术:

第一项专利技术:专利号:201310153746.1,专利名:《一种在计算机数据处理指令中附加跳转功能的方法及CPU模块》。这项专利的主要思想是:在计算机数据处理指令中增加设置执行的条件码、反条件码和跳转矢量,从而使得数据处理指令不再是单一的数据处理,而且具备跳转能力,其好处是提高程序的密度和执行效率。(具体内容参见专利的说明书)

通过上述技术方法实施后数据处理指令具有跳转功能了,在此我称之为具有跳转功能的数据处理指令。这些具有跳转功能的数据处理指令的汇编格式如下所示:

操作码<条件码>   [操作数1] , [操作数2], [操作数3],[E][JMP  跳转标号]

其中E是反条件码,跳转矢量是相对PC的跳转矢量。

注意观察该汇编指令格式,我们发现比现在传统的数据处理指令指令多出了“[E][JMP  跳转标号]”字段,这个字段就是用于描述跳转功能。其中E是反条件码助记符,JMP是立即跳转助记符。如果E被隐去,则表示同条件跳转,即附加的跳转条件和操作码后缀的条件码相同;如果E被显现,则表示反条件跳转,即附加的跳转条件和操作码后缀的条件码相反。

汇编指令格式:操作符<cond> 操作数1,操作数2,..,[E][JMP #v]

其中:   cond------条件码,其意思是:如果满足条件码的要求,则执行操作符定义的操作;如果没有条件码,其意思是:无条件执行操作符定义的操作。

E—-------反条件码,意思是否则(Else)。

JMP  #v---意思是立即跳转#v条指令。

例如:
SUB<cond>  Rd, Rn, Rj, [E][JMP  #v_5]

需要特别指出的是:有些数据处理指令是无条件执行,没有条件码、反条件码、跳转矢量。

实际应用举例如下:

SUBEQ  R3, R1, R2, EJMP  lab_1;//如果相等,则执行R3ßR1-R2;否则立即跳到lab_1处。属于反条件跳转。这种情况下它顶得3条MIPS指令。

SUBEQ  R3,
R1,  R2, JMP  lab_1;//如果相等,则执行R3ßR1-R2,并且立即跳到lab_1处。属于同条件跳转。这种情况下它顶得3条MIPS指令。

SUB    R3,
R1,  R2;//无条件执行R3ßR1-R2。没有跳转功能,属于反条件跳转。这种情况下它只//顶得1条MIPS指令。

SUB    R3,
R1,  R2, JMP  lab_1;// 无条件执行R3ßR1-R2,并且立即跳到lab_1处。属于同条件//跳转。这种情况下它顶得2条MIPS指令。

SUBRE  R3,
R1,  R2, JMP  lab_1;//无条件执行RCßRC-1的操作,如果Z==1&&RC>0,则执行R3ßR1-R2并且立即跳到lab_1处。属于同条件跳转。这种情况下有最高效率,它顶得5条MIPS指令!



从上面可以看出:在数据处理指令(含数据转送指令)中附加执行条件码、反条件码和跳转矢量后,可以使得数据处理指令不但有条件执行,而且具有跳转功能。这种指令的效率显然高于现在主流的RISC指令,不过由于附加的跳转矢量位数有限(6位或7位),所以跳转的范围都比较小,属于短跳转。

吾要单片机 (2017-5-18 09:12:48)
第二项专利:专利号:201512153746.1,专利名:《一种将计算机指令中立即数扩展的方法和装置》
    技术背景:RISC指令可以携带的立即数一般都不大,比如ARM的数据运算指令携带的立即数最大是12位,而MIPS指令系统的数据运算指令携带的立即数最大是16位,要这些RISC指令系统携带32位的立即数是不可能的,因为其指令长度只有32位,所以在RISC指令系统中要取得32位立即数就费不少周折了,目前常用的方法有两种:第一种是分段读取法,具体是先读取高16位的立即数,再读取低16位的立即数,从而组成32位立即数,为了支持这种分段读取法,几乎所有的RISC指令系统都是专门制定了相应的指令,比如ARM的MOVW和MOVT指令、MIPS的LUI和ADDIU指令;第二种是访存法,具体是把32位立即数当做常数放在离当前PC值不太远的地方,然后使用一条与PC相关的访存指令读取它。但是不管使用哪种读取方法,要获取一个32位的立即数都是费时,怎么都要花2个周期才能完成。
比如要处理表达式:R2=R3&0x87654321,当前ARM的做法是:
     使用分段读取法的是:
         MOVT   R1,#8765H;(取得高16位常数,要花1个周期时间)
         MOVW   R1,#4321H;(取得低16位常数,要花1个周期时间)
         AND    R2,R3,R1;
     使用访存法的是:
LDR   R1, [PC,  #offest];(这条指令要花2个周期时间)
         AND   R2,R3,R1;
由此可见,ARM处理R2=R3&0x87654321共需要花3个周期时间,其中获取32位常数0x87654321需要花2个周期时间。
发明内容:为了解决现有的RISC指令系统获取大立即数执行效率低下的不足,又要维持RISC指令系统精简、统一长度的优点,本人提出了一种将计算机指令中立即数扩展的专利方法,其方法是:在RISC指令系统中至少新增一条立即数扩展指令,该指令包含有操作码和立即数域,具体应用是将一个大的立即数分成两段,一段是高位立即数,另一段是低位立即数,将高位立即数经过有符号或无符号扩展后装入该立即数扩展指令的立即数域,而将低位立即数装满执行指令的立即数域,并且规定该立即数扩展指令要前缀于携带该低位立即数的执行指令,中间不能插入别的指令。在取指令时,取指令电路将该立即数扩展指令和紧随其后的执行指令同步送入它们各自的译码器进行译码,立即数扩展指令译码器输出高位立即数经过逻辑左移位后再和执行指令译码器输出的低位立即数进行合并,合并结果输出的立即数再经过有符号数或无符号数扩展后还原为原来的大的立即数。该立即数扩展指令是一条非执行指令,它到译码这一阶段就终结了,它不需要经历执行、回写的阶段。具体内容见本人的专利资料详细说明(专利号:201512153746.1,专利名:一种将计算机指令中立即数扩展的方法和装置)。
通过使用本发明的方法,同样要处理上述的表达式:R2=R3&0x87654321,其做法是:
        HIMM   #8765h;         (这是新增的立即数扩展指令,其携带高位立即数#8765h)
        AND    R2, R3,  #4321h;(执行指令携带低16位立即数#4321h)
如果取指令电路工作于单倍速取指令模式(即程序存贮器每次只能在其接口总线上输出1条指令),则处理R2=R3&0x87654321共需要花2个周期时间,其中立即数扩展指令(HIMM  #8765h)需要延迟 1条指令的时间,以等待紧随其后的执行指令(AND   R2, R3,  #4321h)的到来,才能同步译码。
如果取指令电路工作于双倍速取指令模式(即程序存贮器每次都能在其接口总线上输出2条指令),则处理R2=R3&0x87654321仅需要花1个周期时间,此时立即数扩展指令(HIMM    #8765h)不需要任何延迟就可以和紧随其后的执行指令(AND   R2, R3,  #4321h)同步译码,所以它不花任何时间!
对比ARM和本发明的做法可以看出,使用本发明的方法可以极大改善RISC指令集计算机执行程序的效率,既节省时间又节省空间。
吾要单片机 (2017-5-18 09:17:44)
第三项专利:(尚未公开,公开之后再来补充,先占位置)
吾要单片机 (2017-5-18 10:02:51)
现在可以介绍指令集和CPU了,先介绍CPU的寄存器组:寄存器介绍:寄存器的宽度是32位,所以本CPU是32位CPU。
R0--------零寄存器,它是只读寄存器,并且只读出零值,所以称之为零寄存器,这个零寄存器将为数据运算、变量清零以及变量寻址等指令提高灵活性。
当CPU处于16位指令模式时,其通用寄存器为R1—R15,R16(HR0)--R31(HR15)用特别的指令访问。
当CPU处于32位指令模式时,其通用寄存器为R1—R31。
其中:R1-----UMAC指令的目的寄存器。
R26---LO寄存器,用于存贮乘法或乘加的64位结果的低32位,或者用于存贮32位除法运算的商。
R27---HI寄存器,用于存贮乘法或乘加的64位结果的高32位,或者用于存贮32位除法运算的余数。
R28---EPC,即错误指令地址。
R29---INT,即中断的信息。
R30---SP寄存器,即推栈指针。当CPU处于用户态时是PSP;而当CPU处于管理态时是PSP或MSP,由PSR.P选择。
R31---LR寄存器,即子程序返回链接寄存器。
另外,CPU设置2个系统控制寄存器,它们定义如下:
PC寄存器,即程序计数器。
PSR寄存器,即程序状态寄存器,里面有程序状态标志位以及系统状态和控制信息。


寄存器组.png

吾要单片机 (2017-5-18 10:06:20)
[i=s] 本帖最后由 吾要单片机 于 2017-5-18 10:11 编辑


PSR.png

吾要单片机 (2017-5-18 10:38:12)
[i=s] 本帖最后由 吾要单片机 于 2017-5-18 10:51 编辑

条件码表
本指令集定义的反条件码:E=0表示相反条件跳转,E=1表示相同条件跳转。

从条件码表可以看出本指令集使用的条件码和ARM有所不同,主要是加入了与RC(重复计数器)相关的条件码(RE、RN、RP),本系统就是靠这3种条件码控制RC(重复计数器)进行减1操作的。


条件码.png

吾要单片机 (2017-5-18 10:53:14)
定义的操作数扩展指令,其中:RIMM指令用于扩展寄存器号,CIMM指令用于扩展条件码(cond)、反条件码(E)、跳转矢量(V),HIMM指令用于扩展高12位立即数,WIMM指令用于扩展高28位立即数。在16位指令集中,可以使用的前缀扩展指令是RIMM、CIMM、HIMM以及WIMM。
在32位指令集中,只能使用的前缀扩展指令是WIMM,用于扩展32位立即数。


扩展指令.png


吾要单片机 (2017-5-18 10:54:00)
本16位指令集的技术特点:
1.支持的通用寄存器16个,即R0---R15(其中R0是零寄存器),这比其他的16位指令集大一倍,为用户提供更多的寄存器变量空间,有利于提高效能。
2.可以携带16位或32位的立即数,这一优势是其他16位指令集不能比拟的。
3.LOAD/STORE寻址方式灵活多样,支持EA=Rn、EA=Rn+#imm12、EA=Rn+#imm28、EA=Rn+Ra.比其他16位指令集强。
4.有布尔处理指令,有位与指令bit_and、位或指令bit_or、位异或指令bit_xor、位取反指令bit_not、位运算结果保存指令zmb.。这一特点比MCS-51或ARM的位操作指令更通用,位变量定义不再受限制。
5.本16位指令集自成一体,不用借助32位指令集就能实现所有功能,代码密度更高,与32位指令集相比,其性能损失非常小。
吾要单片机 (2017-5-18 10:54:38)
需要说明的是:1、16位指令集和32位指令集都是完整独立的,这和ARM不同。2、16位指令集前缀的立即数扩展指令为16位或32位,因此该16位指令的长度等效于16位、32和48位。3、32位指令集前缀的立即数扩展指令位32位,因此该32位指令的长度等效于32位或64位。
吾要单片机 (2017-5-18 10:56:31)
本人已经完成基于这3项专利的CPU设计,根据仿真结果表明,设计达到预期效果,振奋人心!
该CPU使用verilog HDL编写,五级流水线,同时支持16位指令集(81条指令)和32位指令集(95条指令),与Thumb/microMIPS有所不同,本指令系统规定:一个子程序(即函数)只能使用一套指令集,也就是说,在一个子程序(即函数)中,要么全部使用16位的指令集,或要么全部使用32位指令集!这是因为译码器是根据该指令的地址的第0位(PC.0)的状态来区分该指令是16位指令集还是32位指令集,而只有CALL指令、int指令、硬件中断响应、中断返回指令iret和子程序返回指令ret才可以改变PC.0的状态值。本CPU设定:当PC.0为0时,指令为16位指令集;当PC.0为1时,指令为32位指令集。
吾要单片机 (2017-5-18 10:57:48)
特别说明:在发生分支跳转时,如果跳转的目标无法获得完整的指令(有前缀的立即数扩展指令)时,那么立即数扩展指令要延时一个周期,以等待紧随其后的执行指令的到来,除此以外立即数扩展指令不用延迟。仿真结果也证明了这一点。
吾要单片机 (2017-5-18 11:02:07)
[i=s] 本帖最后由 吾要单片机 于 2017-5-21 01:19 编辑

关于中断系统:
      本CPU的硬件中断系统有:
复位,不可屏蔽,优先级0(最高), 抢占型中断,入口地址:0x80000000
MEM错误,不可屏蔽,优先级1,             抢占型中断,入口地址:0x80000100
ROM错误,不可屏蔽,优先级2,             完整型中断,入口地址:0x80000200
EXT中断,    可屏蔽,优先级3(最低), 完整型中断,入口地址:0x80000300
注明:抢占型中断指的是不管指令处于哪个阶段都立即终止指令执行,即夭折; 完整型中断指的是指令执行完成后才可以中断。
吾要单片机 (2017-5-18 11:03:33)
看看立即数扩展指令的使用(16位指令集):(例如计算R3=#76543210+#fedcba98)
f765        
4321
0100        ;mov        R1, #76543210
ffed
cba9
7318        ;add        R3, R1,#fedcba98
计算这个表达式只需要2个周期,比ARM和MIPS快了不少啊。
吾要单片机 (2017-5-18 11:05:59)
需要说明的是:1、本CPU是哈佛结构,即指令总线和数据总线分开,指令总线64位,这样可以实现前缀的操作数扩展指令和紧随其后的执行指令同步送入译码器,才能达到最高效能。
2、本CPU包含有基于历史记录表的转移预测功能(记录最近的4个分支点),对于循环体的提速很有效。
吾要单片机 (2017-5-18 16:00:08)
CPU结构图

CPU.pdf
(2017-05-18 15:59:55, Size: 73.2 KB, Downloads: 10)

student321 (2017-5-18 21:15:03)
xuexi yixia
吾要单片机 (2017-5-18 22:20:05)
[i=s] 本帖最后由 吾要单片机 于 2017-5-18 22:25 编辑

32位指令集比16位指令集具有的优点是:
1、32位指令集拥有32个通用寄存器,而16位指令集只有16个通用寄存器,所以面向大型数据运算时,32位指令集具有优势。
2、32位指令集前缀有立即数扩展指令WIMM时,其32位数据处理指令仍然可以包含有跳转功能。
吾要单片机 (2017-5-23 18:19:08)
没有人愿意讨论,是不是我不够格呢?
吾要单片机 (2017-5-23 18:23:07)
有谁做过汇编器,我需要帮助。
吾要单片机 (2017-5-25 20:39:55)
[i=s] 本帖最后由 吾要单片机 于 2017-5-31 00:04 编辑

16位指令集介绍

(共81条)

表1 加法、减法运算指令(10条)











  

汇编指令

  
  

操作说明

  
  

IMM

  
  PSW
  
  T
  
  ADD   Rd, Rn, Rj
  
  Rd=Rn+Rj
  
  NULL/WIMM/HIMM/CIMM
  
  NZCV
  
  1
  
  SUB   Rd, Rn, Rj
  
  Rd=Rn-Rj
  
  NULL/WIMM/HIMM/CIMM
  
  NZCV
  
  1
  
  ADD   Rd, #uimm4
  
  Rd=Rd+ #uimm4
  
  NULL/WIMM/HIMM/CIMM
  
  NZCV
  
  1
  
  SUB   Rd, #uimm4
  
  Rd=Rd- #uimm4
  
  NULL/WIMM/HIMM/CIMM
  
  NZCV
  
  1
  
  ADD   Rd, SP, #uimm4
  
  Rd=SP+ #uimm4<<2
  
  NULL/WIMM/HIMM/CIMM
  
  
  
  1
  
  ADD   SP, #uimm8
  
  SP=SP+ #uimm8<<2
  
  NULL/WIMM/HIMM/CIMM
  
  
  
  1
  
  SUB   SP,#uimm8
  
  SP=SP- #uimm8<<2
  
  NULL/WIMM/HIMM/CIMM
  
  
  
  1
  
  ADD   Rd, PC, #0
  
  Rd=PC+ #0
  
  NULL/WIMM/HIMM/CIMM
  
  
  
  1
  
  
  
  
  
  NULL/WIMM/HIMM/CIMM
  
  
  
  1
  
  
  
  
  
  NULL/WIMM/HIMM/CIMM
  
  
  
  1
  
说明:

                                  表2 乘法、除法运算指令(10条)










  

汇编指令

  
  

操作说明

  
  

IMM

  
  PSW
  
  T
  
  MUL    Rd, Rn, Rj
  
  Rd=Rn*Rj
  
  NULL/WIMM/CIMM
  
  
  
  1
  
  UMAC   Rd, Rn, #uimm16
  
  R1=Rd+Rn[15:0] * #uimm16
  
  HIMM
  
  
  
  1
  
  SMULT  Rd, Rj
  
  (有符号){HI: LO}=Rd*Rj
  
  NULL/WIMM/HIMM/CIMM
  
  
  
  1
  
  UMULT  Rd, Rj
  
  (无符号){HI:LO}=Rd*Rj
  
  NULL/WIMM/HIMM/CIMM
  
  
  
  1
  
  SMLA   Rd, Rj
  
  (有符号){HI:LO}={HI:LO}+Rd*Rj
  
  NULL/WIMM/HIMM/CIMM
  
  
  
  2
  
  UMLA   Rd, Rj
  
  (无符号){HI:LO}={HI:LO}+Rd*Rj
  
  NULL/WIMM/HIMM/CIMM
  
  
  
  2
  
  SMLS   Rd, Rj
  
  (有符号){HI:LO}=-{HI:LO}Rd*Rj
  
  NULL/WIMM/HIMM/CIMM
  
  
  
  2
  
  UMLS   Rd, Rj
  
  (无符号){HI:LO}={HI:LO}-Rd*Rj
  
  NULL/WIMM/HIMM/CIMM
  
  
  
  2
  
  SDIV   Rd, Rj
  
  (有符号)LO=Rd/Rj, HI=Rd%Rj
  
  NULL/WIMM/HIMM/CIMM
  
  
  
  32
  
  UDIV   Rd, Rj
  
  (无符号)LO=Rd/Rj, HI=Rd%Rj
  
  NULL/WIMM/HIMM/CIMM
  
  
  
  32
  
说明:
                                                              表3  逻辑运算指令(3条)



  

汇编指令

  
  

操作说明

  
  

IMM

  
  PSW
  
  T
  
  AND  Rd, Rn, Rj
  
  Rd=Rn&Rj
  
  NULL/WIMM/HIMM/CIMM
  
  NZ
  
  1
  
  OR   Rd, Rn, Rj
  
  Rd=Rn|Rj
  
  NULL/WIMM/HIMM/CIMM
  
  NZ
  
  1
  
  XOR  Rd, Rn, Rj
  
  Rd=Rn^Rj
  
  NULL/WIMM/HIMM/CIMM
  
  NZ
  
  1
  
说明:
                                                                     表4  移位操作指令(4条)




  

汇编指令

  
  

操作说明

  
  

IMM

  
  PSW
  
  T
  
  LSL  Rd, Rj
  
  Rd=Rd<<Rj
  
  NULL/CIMM/RIMM/HIMM
  
  NZC
  
  1
  
  LSR  Rd, Rj
  
  Rd=Rd>>Rj
  
  NULL/CIMM/RIMM/HIMM
  
  NZC
  
  1
  
  ASR  Rd, Rj
  
  Rd=(signed)Rd>>Rj
  
  NULL/CIMM/RIMM/HIMM
  
  NZC
  
  1
  
  ROR  Rd, Rj
  
  Rd=Rd>>Rj
  
  NULL/CIMM/RIMM/HIMM
  
  NZC
  
  1
  
说明:

                                                                             表5 位操作指令(7条)








  

汇编指令

  
  

操作说明

  
  

IMM

  
  PSW
  
  T
  
  BFEX   Rd, Rj, #width5,#lsb5
  
  位段提取
  
  HIMM
  
  NZ
  
  1
  
  BFIN   Rd, Rj, #width5,#lsb5
  
  位段插入
  
  HIMM
  
  NZ
  
  1
  
  BITA   Rd, Rj, #bitd3, #bitj3
  
   布尔与
  
  HIMM
  
  Z
  
  1
  
  BITO    Rd, Rj, #bitd3, #bitj3
  
   布尔或
  
  HIMM
  
  Z
  
  1
  
  BITX   Rd, Rj, #bitd3, #bitj3
  
   布尔异或
  
  HIMM
  
  Z
  
  1
  
  BITN  Rd, #bitd3
  
   布尔反
  
  NULL/CIMM
  
  Z
  
  1
  
  ZMB   Rd,  #bitd3
  
   保存~Z位
  
  NULL/CIMM
  
  
  
  1
  
说明:
                                                                  表6  数制转换指令(4条)




  

汇编指令

  
  

操作说明

  
  

IMM

  
  PSW
  
  T
  
  SEXTB   Rj
  
  字节符号位扩展
  
  NULL/CIMM
  
  NZ
  
  1
  
  SEXTH   Rj
  
  半字符号位扩展
  
  NULL/CIMM
  
  NZ
  
  1
  
  CLZ     Rd, Rj
  
  计算前导0的个数
  
  NULL/CIMM
  
  
  
  1
  
  CLO     Rd, Rj
  
  计算前导1的个数
  
  NULL/CIMM
  
  
  
  1
  
说明:
                                                                  表7  数据转送指令(23条)























  

汇编指令

  
  

操作说明

  
  

IMM

  
  PSW
  
  T
  
  MOV     Rd,  Rj
  
  Rd=Rj
  
  NULL/WIMM/HIMM/CIMM
  
  
  
  1
  
  CPL     Rd,  Rj
  
  Rd=~Rj
  
  NULL/WIMM/HIMM/CIMM
  
  NZ
  
  1
  
  MOV    Rd,  HRj
  
  Rd=HRj
  
  NULL/CIMM
  
  
  
  1
  
  MOV    HRd, Rj
  
  HRd=Rj
  
  NULL/WIMM/HIMM/CIMM
  
  
  
  1
  
  MOV    RC,  Rj
  
  RC=Rj
  
  NULL/WIMM/HIMM/CIMM
  
  
  
  1
  
  MOV    Rd, RC
  
  Rd=RC
  
  NULL/CIMM
  
  
  
  1
  
  MOV    Rd,  PSR
  
  Rd=PSR
  
  NULL/CIMM
  
  
  
  1
  
  MOV    PSR, Rj
  
  PSR=Rj
  
  NULL/WIMM/HIMM/CIMM
  
  VNCZ
  
  1
  
  XCHG   Ra,Rb,[Rc]
  
  Ra=[Rc], [Rc]=Rb
  
  RIMM
  
  
  
  1
  
  SLB    Rd, [Rn, #0]
  
  Rd=(Sbyte)MEM[Rn+ #0]
  
  NULL/WIMM/HIMM/CIMM/RIMM
  
  
  
  1
  
  SLH    Rd, [Rn, #0]
  
  Rd=(Shalf)MEM[Rn+ #0<<1]
  
  NULL/WIMM/HIMM/CIMM/RIMM
  
  
  
  1
  
  ULB    Rd, [Rn, #0]
  
  Rd=(Ubyte)MEM[Rn+ #0]
  
  NULL/WIMM/HIMM/CIMM/RIMM
  
  
  
  1
  
  ULH    Rd, [Rn, #0]
  
  Rd=(Uhalf)MEM[Rn+ #0<<1]
  
  NULL/WIMM/HIMM/CIMM/RIMM
  
  
  
  1
  
  ULW    Rd, [Rn, #0]
  
  Rd=(Uword)MEM[Rn+ #0<<2]
  
  NULL/WIMM/HIMM/CIMM/RIMM
  
  
  
  1
  
  STRB   Rd, [Rn, #0]
  
  (byte)MEM[Rn+ #0]=Rd
  
  NULL/WIMM/HIMM/CIMM/RIMM
  
  
  
  1
  
  STRH   Rd, [Rn, #0]
  
  (half)MEM[Rn+ #0<<1]=Rd
  
  NULL/WIMM/HIMM/CIMM/RIMM
  
  
  
  1
  
  STRW   Rd, [Rn, #0]
  
  (word)MEM[Rn+ #0<<2]=Rd
  
  NULL/WIMM/HIMM/CIMM/RIMM
  
  
  
  1
  
  ULD    Rd, [SP, #uimm4]
  
  Rd=(Uword)MEM[SP+ #uimm4<<2]
  
  NULL/WIMM/HIMM/CIMM/
  
  
  
  1
  
  STR    Rd, [SP, #uimm4]
  
  (Uword)MEM[SP+ #uimm4<<2]=Rd
  
  NULL/WIMM/HIMM/CIMM/
  
  
  
  1
  
  PUSH   Rj
  
  寄存器压栈:
  SP=SP-4,
  (word)MEM[SP]=Rj
  
  

NULL/CIMM

  
  
  
  
  
  

1

  
  
  POP     Rj
  
  寄存器弹栈:
  Rj=(word)MEM[SP],
  SP=SP+4。
  
  

NULL/CIMM

  
  
  
  
  
  

1

  
  
  PUSHG   #uimm3
  
  寄存器组压栈:
  SP=SP-16,
  (4x word)MEM[SP]=第#uimm3组
  
  NULL
  
  
  
  
  
  

4

  
  
  
  POPG    #uimm3
  
  寄存器组弹栈:
  SP=SP+16,
  第#uimm3组=(4x word)MEM[SP]
  
  NULL
  
  
  
  
  
  

4

  
  
  
说明:

表8 程序转移指令(14条)















  

汇编指令

  
  

操作说明

  
  

IMM

  
  PSW
  
  T
  
  
  
  
  
  
  
  
  
  
  
  CALL    #simm11
  
  直接相对调用子程序
  
  

NULL/WIMM/HIMM

  
  
  
  
  

2

  
  
  CALL    Rj
  
  间接绝对调用子程序
  
  
  NULL
  
  
  

2

  
  J<cond> #simm4
  
  直接相对跳转
  
  NULL/HIMM
  
  
  
  2
  
  JMP      Rj
  
  间接绝对跳转
  
  NULL
  
  
  
  2
  
  JVS    #simm4
  
  If V==1 then jmp
  
  NULL/HIMM
  
  
  
  2
  
  JVC    #simm4
  
  If V==0 then jmp
  
  NULL/HIMM
  
  
  
  2
  
  CJZ    Rd, Rj,#simm12
  
  If (Rd^Rj)==0 then jmp
  
  HIMM
  
  
  
  
  

2

  
  
  CJNZ   Rd, Rj,#simm12
  
  If (Rd^Rj)!=0 then jmp
  
  HIMM
  
  
  
  
  

2

  
  
  TJZ    Rd, Rj,#simm12
  
  If (Rd&Rj)==0 then jmp
  
  HIMM
  
  
  
  
  

2

  
  
  TJNZ   Rd, Rj,#simm12
  
  If (Rd&Rj)!=0 then jmp
  
  HIMM
  
  
  
  
  

2

  
  
  INT     #uimm8
  
  软件中断
  
  NULL
  
  
  
  

6

  
  IRET
  
  中断返回
  
  NULL
  
  
  
  

6

  
  RET
  
  子程序返回
  
  NULL
  
  
  
  2
  
说明:

表9   控制指令(3条)




  汇编指令    操作说明    IMM    PSW
  
  T
  
  SLEEP        
  
  睡眠,等待中断唤醒
  
  NULL
  
  
  
  1
  
  SET     PSR,  #uimm4
  
  将PSR的控制位置1
  
  NULL
  
  I,P
  
  
  
  CLR     PSR,  #uimm4
  
  将PSR的控制位清0
  
  NULL
  
  I,P
  
  
  



表10 立即数扩展指令(4条)





  

汇编指令

  
  

操作说明

  
  WIMM     #imm28
  
  提供高28位立即数
  
  HIMM     #imm12
  
  提供高12位立即数
  
  RIMM     Ra, Rb, Rc
  
  提供寄存器操作数Ra, Rb, Rc
  
  CIMM     cond  [E]jmp  #v7
  
  提供执行条件码cond、反条件码E和跳转矢量#v7
  

   说明:

-----------16位指令集到这结束,等待第三项专利公开后再来补充---------
吾要单片机 (2017-5-25 20:44:15)
回复也要审查?

网络资源