ARM指令集

 

 

 

1.Branch,Exception generating.System instruction

1.1 条件分支:

B.cond指令

  指令格式:

 

其中,cond这4位是决定是否满足分支跳转的条件,根据相应的译法有相应的条件位,label是imm19,是一个偏移地址,下一次分支地址=当前PC+label

 

CBNZ指令

  指令格式:

其中,wt和xt代表的是Rt的译码得到的通用目的寄存器的号码,0-31,当这个寄存器的值(64位)非零,那么执行跳转,地址当前PC+label偏移地址。

 

CBZ

  CBZ和CBNZ的区别在于判定寄存器的值是非零还是零,与CBNZ类似。

 

TBNZ

  指令格式:

  测试位不为0发生跳转,imm指定目的寄存器的某一个位,『b5:b40』组成,0-63或者0-31,有b5决定。哪个目的寄存器由Rt指定,

label是偏移地址。

 

TBZ

  与TBNZ类似。

 

1.2 非条件分支,立即(branch unconditional,immediate)

B

  指令格式:

 

   label=imm26,为branch的分支指令

BL

  指令格式:

  直接跳往label+PC地址,并且往X30这个寄存器写入当前PC+4作为地址标签。LINK指令与非LINK指令的差别就在于在某个寄存器

写入当前的地址+4,下一次程序返回(RET),那么就可以直接从这个寄存器拿地址返回,不用指定具体的地址。

 

1.3 非条件分支,寄存器

  非条件branch带R(寄存器)和imme(立即数)的差别就是跳转的范围差别,imme跳转的范围小,通过指定当前的偏移地址来跳,

带R的指令寄存器号码进行跳转,可以跳到整个地址空间的任意一个地方。

 

BLR

  指令格式:

  直接跳转到目的寄存器的地址,目的寄存器有Rn进行译码,并且把当前PC+4回写到X30

 

BR

  指令格式:

  与BLR差别在于有无回写。

 

RET

  指令格式:

  Xn有Rn译码,如果舍弃的话那么默认X30!(什么样的方式来暗示舍弃?)

 

1.4 中断产生和返回

BRK(breakpoint Instruction)

  指令格式:

 

   imm=imm16,PE会记住中断状态,在ESR_ELx这个寄存器,x由中断等级决定,EC值=0X3C

并且将相应的imm写入到ESR_ELx的ISS部分。BRK是16位的imm。

 

HLT(halt instruction):产生一个halt debug事件(event)

  指令格式:

HVC(Generate exception targeting exception level2)

  when el0 and secure el1,when SCR_EL3.HCE = 0, this instruction is undefined.

  执行这条中断,PE会在ESR_ELx的EC段写入0x16,将imm16写入其ISS段。

 

SMC(Generate exception targeting exception level3)

Secure Monitor Call cause exception on EL3.

  这条指令旨在软件中断等级大于等于1的时候有效。当HCR_EL2.TSC和SCR_EL3.SMD都是0的时候,

SMC指令会使PE在ESR_ELx的EC段写入0x17,并将此带到EL3,如果HCR_EL2.TSC=1,执行这个指令在

NO-SECURE EL1会产生一个中断带到EL2,不用care SCR_EL3.SMD。当HCR_EL2.TSC=0并且SCR_EL3.

SMD =1,这个指令没有定义。

 

 SVC:supervisor call causes an exception to be taken to el1

 

 

 

  

 

posted @ 2018-09-26 16:04  特立独行的101  Views(29218)  Comments(0Edit  收藏  举报