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