CMP可以比較兩個(gè)數(shù)的關(guān)系,其本質(zhì)就是一條減法指令,只是不會(huì)將運(yùn)算結(jié)果保存到寄存器,因?yàn)閷τ贑PU而言,比較兩個(gè)數(shù)時(shí)只關(guān)心結(jié)果是false還是true
站在用戶的角度思考問題,與客戶深入溝通,找到曹縣網(wǎng)站設(shè)計(jì)與曹縣網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國際域名空間、雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋曹縣地區(qū)。指令格式:CMP?<第一操作寄存器><第二操作數(shù)>
目錄
1、CMP實(shí)現(xiàn)條件判斷的本質(zhì)
2、條件碼以及條件碼的使用
3、小練習(xí):使用ARM指令進(jìn)行條件判斷,并執(zhí)行相應(yīng)的語句
CMP 的本質(zhì)就是一條減法指令,減法的結(jié)果會(huì)影響CPSR寄存器,CPU實(shí)際上是根據(jù)CPSR中的N、Z、C、V狀態(tài)位來進(jìn)行判斷。以下面這條語句為例( 假設(shè)R1和R2中存的是無符號數(shù))
CMP R1, R2
如果R1 == R2,即 R1 - R2 = 0,CPSR中的狀態(tài)位 Z = 1
如果R1 != R2,即 R1 - R2 != 0,CPSR中的狀態(tài)位 Z = 0
如果R1
如果R1<= R2,即 R1 - R2 運(yùn)算過程中產(chǎn)生了借位 或者?R1 - R2 = 0,此時(shí) C = 0 或 Z = 1
如果R1 >R2,即 R1 - R2 運(yùn)算過程中沒有產(chǎn)生借位,而且?R1 - R2 != 0,此時(shí) C = 1 且 Z = 0
如果R1 >= R2,即 R1 - R2 運(yùn)算過程中沒有產(chǎn)生借位 或者 R1 - R2 = 0,則 C = 1
2、條件碼以及條件碼的使用在實(shí)際使用的時(shí)候,我們不可能像上面那樣,使用CPSR中的狀態(tài)位去比較兩個(gè)數(shù)的大小,因此,ARM給我們提供了更簡潔的指令,那就是“條件碼”。
使用時(shí),主要關(guān)注第二列“后綴符”和第四列“含義”。
MOV R1, #1 @ R1 = 1
MOV R2, #2 @ R2 = 2
CMP R1, R2 @ 本質(zhì): R1 - R2,記錄運(yùn)算結(jié)果狀態(tài)是否為0、是否借位,保存到CPSR寄存器
SUBGT R3, R1, R2 @ 含義: 如果CMP的比較結(jié)果是R1 >R2,那就執(zhí)行SUB R3, R1, R2
@ SUBGT: 運(yùn)算符SUB + 后綴符GT
@ SUB: 減法運(yùn)算
@ GT: 表示大于,ARM指令集中大多數(shù)指令都可以帶條件碼后綴
注意:ARM指令集中大多數(shù)指令都可以帶條件碼后綴
3、小練習(xí):使用ARM指令進(jìn)行條件判斷,并執(zhí)行相應(yīng)的語句現(xiàn)在有這么一段C語言的代碼,用ARM指令將其表示出來。
int R1 = 9; // MOV R1. #9
int R2 = 15; // MOV R2, #15
START:
// CMP R1, R2
if(R1 == R2) // BLEQ STOP
{
STOP();
}
else if(R1 >R2) // SUBGT R1, R1, R2
{
R1 = R1 - R2;
}
else // SUBLT R2, R2, R1
{
R2 = R2 - R1;
}
STOP:
B STOP
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧