Thumb指令集之:Thumb數(shù)據(jù)處理指令
11.4.4寄存器加法指令A(yù)DD(3)
(1)編碼格式
寄存器加法指令A(yù)DD(3)的編碼格式如圖11.10所示。
圖11.10ADD(3)指令的編碼格式
此種形式的加法指令將兩個寄存器的值相加,將結(jié)果放入第三個目標(biāo)寄存器,并根據(jù)操作結(jié)果更新標(biāo)志位。
(2)指令的語法格式
ADDRd>,Rn>,Rm>
①Rd>
加法操作的目標(biāo)寄存器。
②Rn>
操作數(shù)寄存器。存放加法操作的第一個操作數(shù)。
③Rm>
操作數(shù)寄存器。存放加法操作的第二個操作數(shù)。
(3)指令操作的偽代碼
Rd=Rn+Rm
NFlag=Rd[31]
ZFlag=ifRd==0then1else0
CFlag=CarryFrom(Rn+Rm)
VFlag=OverflowFrom(Rn+Rm)
11.4.5寄存器加法指令A(yù)DD(4)
(1)編碼格式
寄存器加法指令A(yù)DD(4)的編碼格式如圖11.11所示。
圖11.11ADD(4)指令的編碼格式
此種形式的加法指令將兩個寄存器的值相加,將結(jié)果放入第三個目標(biāo)寄存器。該指令不更新程序狀態(tài)字的標(biāo)志位。
注意 | 該指令與ADD(3)的區(qū)別在于其操作數(shù)寄存器。該指令的操作數(shù)寄存器為r8~r14和PC高寄存器。操作結(jié)果對程序狀態(tài)字的標(biāo)志位沒有影響。 |
(2)指令的語法格式
ADDRd>,Rm>
①Rd>
指令的操作數(shù)寄存器,其中保存加法操作的一個操作數(shù),并將指令的操作結(jié)果放入該寄存器。取值范圍為r0~r15。
②Rm>
操作數(shù)寄存器。存放加法操作的第二個操作數(shù)??梢詾閞0~r15的任意寄存器。
(3)指令操作的偽代碼
Rd=Rd+Rm
11.4.6PC相關(guān)加法指令A(yù)DD(5)
(1)編碼格式
寄存器加法指令A(yù)DD(5)的編碼格式如圖11.12所示。
圖11.12ADD(5)指令的編碼格式
該指令將一個立即數(shù)和PC值相加,并將PC相關(guān)地址寫入目標(biāo)寄存器。立即數(shù)可以是0~1020范圍內(nèi)的任意數(shù)值的4倍。該指令不更新程序狀態(tài)字的標(biāo)志位。
(2)指令的語法格式
ADDRd>,PC,#immed_8>×4
①Rd>
指令的目的寄存器,存放指令的操作結(jié)果。
②PC
PC相關(guān)地址。
③immed_8>
加到PC值上的8位立即數(shù)。
(3)指令操作的偽代碼
Rd=(PCAND0xfffffffc)+(immed_82)
評論