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

 

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM