打印
[国产单片机]

《酷能指令集》及相关专利技术

[复制链接]
楼主: 吾要单片机
手机看帖
扫描二维码
随时随地手机跟帖
41
吾要单片机|  楼主 | 2017-5-18 23:50 | 只看该作者 回帖奖励 |倒序浏览
当然,如果要新推出一套指令集,那么这套指令集就必须具有创新性和先进性,不能是平庸之辈,特别像我这种不是体制内的人士,要获得国家的认可那要费巨大的努力。

使用特权

评论回复
42
wenunit| | 2017-5-19 12:48 | 只看该作者
厉害,不过这个东西的IP核设计才是重点吧,够小,够快,够稳定。

使用特权

评论回复
43
吾要单片机|  楼主 | 2017-5-20 10:26 | 只看该作者
资料有更新,请回头查看。

使用特权

评论回复
44
吾要单片机|  楼主 | 2017-5-25 19:30 | 只看该作者
本帖最后由 吾要单片机 于 2017-12-9 16:10 编辑

32位指令集----逻辑运算指令(6条)

  
汇编指令
  
  
操作说明
  
  IMM
  
  PSW
  
  T
  
  AND        Rd, Rn, #uimm16
  
  Rd=Rn& #uimm16
  
  
  
  NZ
  
  1
  
  OR         Rd, Rn, #uimm16
  
  Rd=Rn| #uimm16
  
  
  
  NZ
  
  1
  
  XOR        Rd, Rn, #uimm16
  
  Rd=Rn^ #uimm16
  
  
  
  NZ
  
  1
  
  AND<cond>  Rd, Rn, Rj, [E]JMP  #v_6
  
  Rd=Rn&Rj
  
/WIMM
  
  NZ
  
  1
  
  OR<cond>   Rd, Rn, Rj, [E]JMP  #v_6
  
  Rd=Rn|Rj
  
/WIMM
  
  NZ
  
  1
  
  XOR<cond>  Rd, Rn, Rj, [E]JMP  #v_6
  
  Rd=Rn^Rj
  
/ WIMM
  
  NZ
  
  1
  
  
  




注明:*如果前缀有WIMM   #imm28指令,此时Rj就变为#imm4,两者组成32位立即数。

使用特权

评论回复
45
吾要单片机|  楼主 | 2017-5-25 19:38 | 只看该作者
本帖最后由 吾要单片机 于 2017-5-27 12:36 编辑

32指令集---移位操作指令(8条)

  
汇编指令
  
  
操作说明
  
  IMM
  
  PSW
  
  T
  
  LSL<cond> Rd, Rn, #uimm5,[E]JMP #v_6
  
  Rd=Rn<< #uimm5
  
  
  
  NZC
  
  1
  
  LSR<cond> Rd, Rn, #uimm5,[E]JMP #v_6
  
  Rd=Rn>> #uimm5
  
  
  
  NZC
  
  1
  
  ASR<cond> Rd, Rn, #uimm5,[E]JMP #v_6
  
  Rd=(signed)Rn>>  #uimm5
  
  
  
  NZC
  
  1
  
  ROR<cond> Rd, Rn, #uimm5,[E]JMP #v_6
  
  Rd=Rn右环移 #uimm5位
  
  
  
  NZC
  
  1
  
  LSL<cond> Rd, Rn, Rj, [E]JMP #v_6
  
  Rd=Rn<<Rj
  
  
  
  NZC
  
  1
  
  LSR<cond> Rd, Rn, Rj, [E]JMP #v_6
  
  Rd=Rn>>Rj
  
  
  
  NZC
  
  1
  
  ASR<cond> Rd, Rn, Rj, [E]JMP #v_6
  
  Rd=(signed)Rn>>Rj
  
  
  
  NZC
  
  1
  
  ROR<cond> Rd, Rn, Rj, [E]JMP #v_6
  
  Rd=Rn>> Rn右环移Rj位
  
  
  
  NZC
  
  1
  

使用特权

评论回复
46
吾要单片机|  楼主 | 2017-5-25 19:40 | 只看该作者
本帖最后由 吾要单片机 于 2018-2-4 17:41 编辑

6.2.5 位操作指令(3条)
  
  汇编指令  
  
  操作说明  
  IMM
  PSR
周期
  BFEX     Rd, Rj,  #width5,#lsb5
  位段提取  
   
  Z
1
  BFIN     Rd, Rj,  #width5,#lsb5
  位段插入  
   
   
1
RBIT<cond>  Rd, Rj, [E]JMP  #v6
位序反转
  
  
1
      说明:

使用特权

评论回复
47
吾要单片机|  楼主 | 2017-5-25 19:42 | 只看该作者
本帖最后由 吾要单片机 于 2017-12-23 23:31 编辑

32位指令集---数制转换指令(3条)

  
汇编指令
  
  
操作说明
  
  IMM
  
  PSW
  
  T
  
  SEXTB<cond>  Rd, Rj, [E]JMP  #v_6
  
  字节符号位扩展
  
  
  
  NZ
  
  1
  
  SEXTH<cond>  Rd, Rj, [E]JMP  #v_6
  
  半字符号位扩展
  
  
  
  NZ
  
  1
  
  CLZ<cond>   Rn, Rj,[E]JMP  #v_6
  
  计算前导0的个数
  
  
  
  Z
  
  1
  

  

  
  
  
  
  
  
  

使用特权

评论回复
48
吾要单片机|  楼主 | 2017-5-25 19:45 | 只看该作者
本帖最后由 吾要单片机 于 2018-2-4 17:43 编辑

6.2.7  数据转送指令(33条)
  
  汇编指令  
  
  操作说明  
  IMM  
  PSR
周期
  MOV<cond>  Rd,  Rj,  [E]JMP  #v6
  Rd=Rj  
/WIMM
   
1
  CPL<cond>   Rd,  Rj,  [E]JMP  #v6
  Rd=~Rj  
/WIMM
  NZ
1
  MOV<cond>    RC,  Rj, [E]JMP  #v6
  RC=Rj  
/WIMM
   
1
  MOV<cond>    Rd,  RC, [E]JMP  #v6
  Rd=RC  
   
   
1
  MOV<cond>    Rd,  PSR, [E]JMP  #v6
  Rd=PSR  
   
   
1
  MOV<cond>   PSR, Rj, [E]JMP  #v6
  PSR=Rj  
/WIMM
   
1
XCHG<cond> Rd, [Rn], Rj, [E]JMP #v6
  Rd=[Rn], [Rn]=Rj  
   
   
1
ULD.type<cond>     Rd, [Rn+],
  
#imm1, [E]JMP #v6
Rd=(Utype)MEM[Rn],
  
Rn+=#imm1<< type
1
SLD.type<cond>     Rd, [Rn+],
  
#imm1, [E]JMP #v6
Rd=(Stype)MEM[Rn],
  
Rn+=#imm1<< type
1
STR.type<cond>    Rd, [Rn+],
  
#imm1, [E]JMP #v6
(type)MEM[Rn]=Rd,
  
Rn+=#imm1<< type
1
ULD.type<cond>     Rd, [+Rn],
  
#imm1, [E]JMP #v6
Rn+=#imm1<< type  ,
  
Rd=(Utype)MEM[Rn]
1
SLD.type<cond>     Rd, [+Rn],
  
#imm1, [E]JMP #v6
Rn+=#imm1<< type  ,
  
Rd=(Stype)MEM[Rn]
1
STR.type<cond>    Rd, [+Rn],
  
#imm1, [E]JMP #v6
Rn+=#imm1<< type  ,
  
(type)MEM[Rn]=Rd
1
SLB<cond>  Rd,  [Rn,  Rj], [E]JMP #v6
  Rd=(Sbyte)MEM[Rn+Rj]  
/WIMM
   
1
  SLB         Rd, [Rn, #uimm16]  
Rd=(Sbyte)MEM[Rn+ #uimm16]
   
   
1
SLH<cond>  Rd,  [Rn,  Rj], [E]JMP #v6
  Rd=(Shalf)MEM[Rn+Rj<<1]  
/WIMM
   
1
  SLH         Rd, [Rn, #uimm16]  
  Rd=(Shalf)MEM[Rn+  #uimm16<<1]  
   
   
1
ULB<cond>  Rd, [Rn, Rj], [E]JMP  #v6
  Rd=(Ubyte)MEM[Rn+Rj]  
/WIMM
   
1
  ULB         Rd, [Rn, #uimm16]  
  Rd=(Ubyte)MEM[Rn+ #uimm16]  
   
   
1
ULH<cond> Rd, [Rn,  Rj], [E]JMP  #v6
  Rd=(Uhalf)MEM[Rn+Rj<<1]
/WIMM
   
1
  ULH         Rd, [Rn, #uimm16]  
  Rd=(Uhalf)MEM[Rn+  #uimm16<<1]  
   
   
1
ULW<cond> Rd, [Rn, Rj], [E]JMP #v6
  Rd=(Uword)MEM[Rn+Rj<<2]
/WIMM
   
1
  ULW         Rd, [Rn, #uimm16]  
  Rd=(Uword)MEM[Rn+ #uimm16<<2]  
   
   
1
STRB<cond> Rd, [Rn, Rj], [E]JMP #v6
  (byte)MEM[Rn+Rj]=Rd  
/WIMM
   
1
  STRB       Rd, [Rn,  #uimm16]  
(byte)MEM[Rn+ #uimm16]=Rd
   
   
1
STRH<cond> Rd, [Rn, Rj], [E]JMP #v6
  (half)MEM[Rn+Rj<<1]=Rd  
/WIMM
   
1
  STRH       Rd, [Rn,  #uimm16]  
  (half)MEM[Rn+  #uimm16<<1]=Rd  
   
   
1
STRW<cond>  Rd, [Rn, Rj], [E]JMP #v6
  (word)MEM[Rn+Rj<<2]=Rd  
/WIMM
   
1
  STRW       Rd, [Rn,  #uimm16]
  (word)MEM[Rn+  #uimm16<<2]=Rd  
   
   
1
ULD<cond>  Rd, [SP, #uimm5],
  
[E]JMP  #v6
Rd=(Uword)MEM[SP+ #uimm5<<2]  
   
   
1
STR<cond>  Rd, [SP, #uimm5],
  
[E]JMP  #v6
  (Uword)MEM[SP+ #uimm5<<2] =  Rd  
   
   
1
  PUSH<cond> Rd,  #uimm5,
  
[E]JMP  #v6
  (#uimm5+1)个寄存器入栈  
   
   
#uimm5
  
+1
  POP<cond>  Rd, #uimm5,
  
[E]JMP  #v6
  (#uimm5+1)个寄存器出栈  
   
   
#uimm5
  
+1
说明:
1、如果前缀有WIMM   #imm28指令,此时Rj就变为#imm4,两者组成32位立即数。
2、指令 MOV<cond> Rd,  PSR, [E]JMP  #v6和MOV<cond> PSR, Rj, [E]JMP  #v6都是特权级指令。
3、在指令ULD/SLD.type<cond>  Rd, [Rn+], #imm1, [E]JMP #v6中,type表示字长(即byte / half / word), 与此对应的操作说明中的type∈(0,1,2),#imm1∈(-1, 1).
4、在指令ULD/SLD.type<cond>  Rd, [+Rn], #imm1, [E]JMP #v6中,type表示字长(即byte / half / word),与此对应的操作说明中的type∈(0,1,2),#imm1∈(-1,1).
5、在指令STR.type<cond>   Rd,[Rn+], #imm1, [E]JMP #v6中,type表示字长(即byte / half / word), 与此对应的操作说明中的type∈(0,1,2),#imm1∈(-1,1).
       6、在指令STR.type<cond>   Rd,[+Rn], #imm1, [E]JMP #v6中,type表示字长(即byte / half / word), 与此对应的操作说明中的type∈(0,1,2),#imm1∈(-1, 1).
       7、表中Stype指的是Sbyte、Shalf。Utype指的是Ubyte、Uhalf或Uword。

使用特权

评论回复
49
吾要单片机|  楼主 | 2017-5-25 19:54 | 只看该作者
本帖最后由 吾要单片机 于 2017-12-23 20:02 编辑

表8 程序转移指令(12条)
  
汇编指令
  
  
操作说明
  
  IMM
  
  PSW
  
  T
  
  MJZ        #uimm16
  
  分散转移指令
  
/WIMM
  
  
  
  2
  
  CALL       #simm26
  
  
  
/WIMM
  
  
  
  2
  
  CALL       Rj
  
  
  
  
  
  
  
  2
  
  J<cond>    #simm16
  
  
  
  
  
  
  
  2
  
  JMP        Rj
  
  
  
  
  
  
  
  2
  
  CJZ        Rd, Rj,#simm11
  
  If (Rd^Rj)==0 then jmp
  
/WIMM
  
  
  
  2
  
  CJNZ       Rd, Rj,#simm11
  
  If (Rd^Rj)!=0 then jmp
  
/WIMM
  
  
  
  2
  
  TJZ        Rd, Rj,#simm11
  
  If (Rd&Rj)==0 then jmp
  
/WIMM
  
  
  
  2
  
  TJNZ       Rd, Rj,#simm11
  
  If (Rd&Rj)!=0 then jmp
  
/WIMM
  
  
  
  2
  
  INT        #uimm8
  
  软件中断
  
  
  
  
  2
  
  IRET
  
  中断返回
  
  
  
  
  
  2
  
  RET

  子程序返回
  
  
  
  
  
  2
  
说明:

使用特权

评论回复
50
吾要单片机|  楼主 | 2017-5-25 19:58 | 只看该作者
本帖最后由 吾要单片机 于 2017-12-24 23:37 编辑

32位指令集--控制指令(3条)

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

                                                     32位指令集--立即数扩展指令(1条)
  
汇编指令
  
  
操作说明
  
  WIMM        #imm28
  
  为紧随其后的可执行指令提供高28位立即数
  



---------------------------------------32位指令集到这里结束-------------------------------------------

使用特权

评论回复
51
吾要单片机|  楼主 | 2017-5-25 20:30 | 只看该作者
本帖最后由 吾要单片机 于 2018-2-4 17:50 编辑

16位指令集介绍
(共78条)
表1 加法、减法运算指令(10条)
  
汇编指令
  
  
操作说明
  
  
IMM
  
  PSW
  
  T
  
  ADD   Rd, Rn, Rj
  
  Rd=Rn+Rj
  
  /WIMM/HIMM/CIMM
  
  NZCV
  
  1
  
  SUB   Rd, Rn, Rj
  
  Rd=Rn-Rj
  
  /WIMM/HIMM/CIMM
  
  NZCV
  
  1
  
  ADD   Rd, #uimm4
  
  Rd=Rd+ #uimm4
  
  /WIMM/HIMM/CIMM
  
  NZCV
  
  1
  
  SUB   Rd, #uimm4
  
  Rd=Rd- #uimm4
  
  /WIMM/HIMM/CIMM
  
  NZCV
  
  1
  
  ADD   Rd, SP, #uimm4
  
  Rd=SP+ #uimm4<<2
  
  /WIMM/HIMM/CIMM
  
  
  
  1
  
  ADD   SP, #uimm8
  
  SP=SP+ #uimm8<<2
  
  /WIMM/HIMM/CIMM
  
  
  
  1
  
  SUB   SP,#uimm8
  
  SP=SP- #uimm8<<2
  
  /WIMM/HIMM/CIMM
  
  
  
  1
  
  ADD   Rd, PC, #0
  
  Rd={PC[31:1], 1’b0}+ #0
  
  /WIMM/HIMM/CIMM
  
  
  
  1
  
  CASEB      Rn, Rj
  
  查找相等的字节
  
  /WIMM/HIMM/CIMM
  
  Z, n
  
  1
  
   CASEH      Rn, Rj
  
  查找相等的半字
  
  /WIMM/HIMM/CIMM
  
  Z, n
  
  1
  
说明:
表2 乘法、除法运算指令(10条)

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

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

  
汇编指令
  
  
操作说明
  
  
IMM
  
  PSW
  
  T
  
  LSL  Rd, Rj
  
  Rd=Rd<<Rj
  
  /CIMM/RIMM/HIMM
  
  NZC
  
  1
  
  LSR  Rd, Rj
  
  Rd=Rd>>Rj
  
  /CIMM/RIMM/HIMM
  
  NZC
  
  1
  
  ASR  Rd, Rj
  
  Rd=(signed)Rd>>Rj
  
  /CIMM/RIMM/HIMM
  
  NZC
  
  1
  
  ROR  Rd, Rj
  
  Rd=Rd右环移Rj
  
  /CIMM/RIMM/HIMM
  
  NZC
  
  1
  
说明:
5 位操作指令(3条)
  
  汇编指令  
  
  操作说明  
  IMM
  PSR
  T  
  BFEX      Rd, Rj, #width5,#lsb5
  位段提取  

  NZ
  1  
  BFIN      Rd, Rj, #width5,#lsb5
  位段插入  

  NZ
  1  





  RBIT    Rd, Rj
按位反转

  
  1
      说明:

表6  数制转换指令(3条)

  
汇编指令
  
  
操作说明
  
  
IMM
  
  PSW
  
  T
  
  SEXTB   Rj
  
  字节符号位扩展
  
  /CIMM
  
  NZ
  
  1
  
  SEXTH   Rj
  
  半字符号位扩展
  
  /CIMM
  
  NZ
  
  1
  
  CLZ     Rd, Rj
  
  计算前导0的个数
  
  /CIMM
  
  Z
  
  1
  

  
说明:
表7  数据转送指令(21条)
  
汇编指令
  
  
操作说明
  
  
IMM
  
  PSW
  
  T
  
  MOV     Rd,  Rj
  
  Rd=Rj
  
  /WIMM/HIMM/CIMM
  
  
  
  1
  
  CPL     Rd,  Rj
  
  Rd=~Rj
  
  /WIMM/HIMM/CIMM
  
  NZ
  
  1
  
  MOV    Rd,  HRj
  
  Rd=HRj
  
  /CIMM
  
  
  
  1
  
  MOV    HRd, Rj
  
  HRd=Rj
  
  /WIMM/HIMM/CIMM
  
  
  
  1
  
  MOV    RC,  Rj
  
  RC=Rj
  
  /WIMM/HIMM/CIMM
  
  
  
  1
  
  MOV    Rj, RC
  
  Rj=RC
  
  /CIMM
  
  
  
  1
  
  MOV    Rj,  PSR
  
  Rj=PSR
  
  /CIMM
  
  
  
  1
  
  MOV    PSR, Rj
  
  PSR=Rj
  
  /WIMM/HIMM/CIMM
  
  
  
  1
  
  XCHG   Ra, [Rb], Rc
  
  Ra=[Rb], [Rb]=Rc
  
  RIMM
  
  
  
  1
  
  SLB    Rd, [Rn, #0]
  
  Rd=(Sbyte)MEM[Rn+ #0]
  
  /WIMM/HIMM/CIMM/RIMM
  
  
  
  1
  
  SLH    Rd, [Rn, #0]
  
  Rd=(Shalf)MEM[Rn+ #0<<1]
  
  /WIMM/HIMM/CIMM/RIMM
  
  
  
  1
  
  ULB    Rd, [Rn, #0]
  
  Rd=(Ubyte)MEM[Rn+ #0]
  
  /WIMM/HIMM/CIMM/RIMM
  
  
  
  1
  
  ULH    Rd, [Rn, #0]
  
  Rd=(Uhalf)MEM[Rn+ #0<<1]
  
  /WIMM/HIMM/CIMM/RIMM
  
  
  
  1
  
  ULW    Rd, [Rn, #0]
  
  Rd=(Uword)MEM[Rn+ #0<<2]
  
  /WIMM/HIMM/CIMM/RIMM
  
  
  
  1
  
  STRB   Rd, [Rn, #0]
  
  (byte)MEM[Rn+ #0]=Rd
  
  /WIMM/HIMM/CIMM/RIMM
  
  
  
  1
  
  STRH   Rd, [Rn, #0]
  
  (half)MEM[Rn+ #0<<1]=Rd
  
  /WIMM/HIMM/CIMM/RIMM
  
  
  
  1
  
  STRW   Rd, [Rn, #0]
  
  (word)MEM[Rn+ #0<<2]=Rd
  
  /WIMM/HIMM/CIMM/RIMM
  
  
  
  1
  
  ULD    Rd, [SP, #uimm4]
  
  Rd=(Uword)MEM[SP+ #uimm4<<2]
  
  /WIMM/HIMM/CIMM/
  
  
  
  1
  
  STR    Rd, [SP, #uimm4]
  
  (Uword)MEM[SP+ #uimm4<<2]=Rd
  
  /WIMM/HIMM/CIMM/
  
  
  
  1
  
  PUSH    Rd, #uimm4
  
   (#uimm4+1)个寄存器压栈
  
  /CIMM
  
  
  
#uimm4+1
  
  POP     Rd, #uimm4
  
   (#uimm4+1)个寄存器弹栈
  
  /CIMM
  
  
  
#uimm4+1
  
说明:

表8 程序转移指令(12条)
  
汇编指令
  
  
操作说明
  
  
IMM
  
  PSW
  
  T
  
  MJZ     #uimm4
  
分散转移指令
  
  WIMM/HIMM
  
  
  
  2
  
  CALL    #simm12
  
  
  
  /WIMM/HIMM
  
  
  
  2
  
  CALL    Rj
  
  
  
  
  
  
  
  
2
  
  J<cond> #simm4
  
  
  
  /WIMM/HIMM
  
  
  
  2
  
  JMP      Rj
  
  
  
  
  
  
  
  2
  
  CJZ    Rd, Rj,#simm12
  
  If (Rd^Rj)==0 then jmp
  
  WIMM/HIMM
  
  
  
  2
  
  CJNZ   Rd, Rj,#simm12
  
  If (Rd^Rj)!=0 then jmp
  
  WIMM/HIMM
  
  
  
  2
  
  TJZ    Rd, Rj,#simm12
  
  If (Rd&Rj)==0 then jmp
  
  WIMM/HIMM
  
  
  
  2
  
  TJNZ   Rd, Rj,#simm12
  
  If (Rd&Rj)!=0 then jmp
  
  WIMM/HIMM
  
  
  
  2
  
  INT     #uimm8
  
  软件中断
  

  
  
  
  
2
  
  IRET
  
  中断返回
  
  
  
  
  
  
2
  
  RET
  
  子程序返回
  
  
  
  
  
  2
  
说明:
表9 控制指令(3条)
  
汇编指令
  
  
操作说明
  
  
IMM
  
  PSW
  
  T
  
  SLEEP        
  
  睡眠,等待中断唤醒
  

  
  
  
  1
  
  SET     PSR,  #uimm4
  
  将PSR的控制位置1
  
  
  
  I,P,B
  
  1
  
  CLR     PSR,  #uimm4
  
  将PSR的控制位清0
  
  
  
  I,P,B
  
  1
  
说明:


表10 立即数扩展指令(4条)
  
汇编指令
  
  
操作说明
  
  WIMM     #imm28
  
  提供高28位立即数
  
  HIMM     #imm12
  
  提供高12位立即数
  
  RIMM     Ra, Rb, Rc
  
  提供寄存器操作数Ra, Rb, Rc
  
  CIMM     cond  [E]jmp  #v7
  
  提供执行条件码cond、反条件码E和跳转矢量#v7
  

   说明:

------------------------------------------16位指令集到这里结束-----------------------------------------



使用特权

评论回复
52
吾要单片机|  楼主 | 2017-5-26 12:47 | 只看该作者
请问各位大侠,有个信号量的事我有疑惑,我的XCHG指令能否满足信号量的互拆访问,大家帮我看看。

使用特权

评论回复
53
linqing171| | 2017-5-26 13:40 | 只看该作者
吾要单片机 发表于 2017-5-26 12:47
请问各位大侠,有个信号量的事我有疑惑,我的XCHG指令能否满足信号量的互拆访问,大家帮我看看。 ...

关于信号量,你的XCHG指令如果是原子的,则没有问题。
如果你的指令可以执行到一半(XCHG REG RAM,RAM到了REG,而reg还没有到RAM,被打断了,只有打断回来后才会到RAM)则有问题。
比如 变量 RAM00000800 里面为1,则表示资源被占用,需要等。 如果值为0,表示资源没有被占用。
则如下代码:
REG=1;
while((REG==1)
{
XCHG(REG,RAM))
//waiting for RAM is 1 and reg is 0;
}

//using resource.
//using resource.
//using resource.

//release resouce
RAM=0;

使用特权

评论回复
54
q331513266| | 2017-5-26 13:44 | 只看该作者
C编译器呢

使用特权

评论回复
评论
吾要单片机 2017-5-26 20:50 回复TA
还没有呢,没有那么容易啊 
55
linqing171| | 2017-5-26 13:45 | 只看该作者
刚看了,你的xchg指令不能被打断,是可以用来做信号量的。  你看看linux的信号量那个文件,都是不同的cpu的汇编代码。
比如关闭中断,然后RAM中存的值读到寄存器,寄存器自增1,寄存器自增后的值存回RAM,开启中断。
再比如CM3中的bitband,来修改寄存器中的一位。

现在基本上MCU的开发厂家的环境慢慢的都切换成eclipse了,编译器GCC移植比较多一些。毕竟gcc的c语言语法和其它厂家的c略有不同,操作系统移植什么的方便。

使用特权

评论回复
56
吾要单片机|  楼主 | 2017-5-26 20:44 | 只看该作者
本帖最后由 吾要单片机 于 2017-6-3 08:21 编辑

哦,明白了,谢谢linqing171,我的XCHG指令是原子操作,读和写是一指令完成,不会被中断异常打断,如果出现访存异常,那么这条指令也是夭折的。我昨天看了openMIPS有关信号量指令,它的做法和我不同,所以我质疑了我的XCHG指令是不是可行的呢,虚惊一场而已,再次感谢linqing171。

使用特权

评论回复
57
吾要单片机|  楼主 | 2017-5-30 23:17 | 只看该作者
请问各位大侠,右环移指令ROR主要用在哪个场合?C语言有用到这条指令吗?

使用特权

评论回复
58
吾要单片机|  楼主 | 2017-6-5 18:17 | 只看该作者
本帖最后由 吾要单片机 于 2017-12-19 22:00 编辑

更正XCHG指令,操作数有改动,更正为XCHG   Rd,    [Rn],    Rj
执行时间为1T,单周期完成读写操作。

使用特权

评论回复
59
linqing171| | 2017-6-7 17:06 | 只看该作者
吾要单片机 发表于 2017-5-30 23:17
请问各位大侠,右环移指令ROR主要用在哪个场合?C语言有用到这条指令吗?

右循环移位基本没有用。  我要说64bit整体右移一位,数据先存入R0R1,其中R0为低位,先清空标志位,带标志位循环右移R1,带标志位循环右移R0,这么偏门的也算么?
左循环移位用处比右的略多,但是用处也不大。
右移位高位补充0和补充最高位,均略有使用。
最多的还是左右移动 8  16  24 整8位,和无符号移动0~7位。
int A[3]; int i=1; int j=a; 的时候 ((unsigned char*)a)+(i<<2) 计算便宜地址。这些场合移位有一些,不过也都可以用算术运算来代替。

使用特权

评论回复
60
吾要单片机|  楼主 | 2017-6-7 23:45 | 只看该作者
本帖最后由 吾要单片机 于 2017-6-7 23:47 编辑
linqing171 发表于 2017-6-7 17:06
右循环移位基本没有用。  我要说64bit整体右移一位,数据先存入R0R1,其中R0为低位,先清空标志位,带标 ...

我看到RICS_V指令集中没有ROR指令了,但是ARM和MIPS都有,所以我决定还是保留吧,再说这条指令也没有占用多少资源。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则