Thumb指令集之:Thumb數(shù)據(jù)處理指令
11.4.13比較指令CMN
(1)編碼格式
比較指令CMN的編碼格式如圖11.19所示。
圖11.19CMN指令的編碼格式
比較指令CMN將一個(gè)寄存器的值和另一個(gè)寄存器的值取負(fù)做比較,并根據(jù)比較結(jié)果更新程序狀態(tài)字的標(biāo)志位。程序中比較指令后通常跟條件執(zhí)行指令。
(2)指令的語(yǔ)法格式
CMNRn>,Rm>
①Rn>
操作數(shù)寄存器。用于存放指令的第一個(gè)操作數(shù)。
②Rm>
操作數(shù)寄存器。用于存放指令的第二個(gè)操作數(shù)。
(3)指令操作的偽代碼
Alu_out=Rn+Rm
NFlag=alu_out[31]
ZFlag=ifalu_out==0then1else0
CFlag=NOTBorrowFrom(Rn+Rm)
VFlag=OverflowFrom(Rn+Rm)
(4)對(duì)應(yīng)的ARM指令
CMNRn>,Rm>
11.4.14比較指令CMP(1)
(1)編碼格式
比較指令CMP(1)的編碼格式如圖11.20所示。
圖11.20CMP(1)指令的編碼格式
比較指令CMP(1)將一個(gè)寄存器的值和8位立即數(shù)做比較,并根據(jù)比較結(jié)果更新程序狀態(tài)字的標(biāo)志位。程序中比較指令后通常跟條件執(zhí)行指令。
(2)指令的語(yǔ)法格式
CMPRn>,#immed_8>
①Rn>
操作數(shù)寄存器。
②immed_8>
8位常數(shù)。將與寄存器Rn>的值做比較。
(3)指令操作的偽代碼
Alu_out=Rn–immed_8
NFlag=alu_out[31]
ZFlag=ifalu_out==0then1else0
CFlag=NOTBorrowFrom(Rn–immed_8)
VFlag=OverflowFrom(Rn–immed_8)
(4)對(duì)應(yīng)的ARM指令
CMPRn>,#immed_8>
11.4.15比較指令CMP(2)
(1)編碼格式
比較指令CMP(2)的編碼格式如圖11.21所示。
圖11.21CMP(2)指令的編碼格式
比較指令CMP(2)將兩個(gè)寄存器的值做比較,并根據(jù)比較結(jié)果更新程序狀態(tài)字的標(biāo)志位。程序中比較指令后通常跟條件執(zhí)行指令。
(2)指令的語(yǔ)法格式
CMPRn>,Rm>
①Rn>
操作數(shù)寄存器,存放比較的第一個(gè)操作數(shù)。
②Rm>
操作數(shù)寄存器,存放比較的第二個(gè)操作數(shù)。
(3)指令操作的偽代碼
alu_out=Rn–Rm
NFlag=alu_out[31]
ZFlag=ifalu_out==0then1else0
CFlag=NOTBorrowFrom(Rn-Rm)
VFlag=OverflowFrom(Rn-Rm)
(4)對(duì)應(yīng)的ARM指令
CMPRn>,Rm>
評(píng)論