高效的C編程之:條件執(zhí)行
4.3條件執(zhí)行
ARM指令都是可以條件執(zhí)行的。在代碼中使用條件執(zhí)行指令可以減小代碼密度并提高程序執(zhí)行效率。典型的條件執(zhí)行語句用在比較指令之后,形成程序的分支跳轉(zhuǎn)結(jié)構(gòu)。下面的例子顯示了條件執(zhí)行指令的典型用法。
本文引用地址:http://cafeforensic.com/article/257022.htmCMPx,#0
MOVGEy,#1
MOVLTy,#0
但當(dāng)代碼中連續(xù)的條件執(zhí)行指令超過4條時(shí),就會(huì)影響程序的執(zhí)行速度。所以編譯器在編譯程序時(shí),限制條件指令連續(xù)出現(xiàn)的次數(shù)。
ARM編譯器常把C語言中的if…else結(jié)構(gòu)編譯成條件執(zhí)行指令,但子程序調(diào)用一般是不能條件執(zhí)行的。所以在編程時(shí)盡可以地使用簡(jiǎn)單的if…else結(jié)構(gòu)完成程序的分支操作,而避免使用過多的子程序調(diào)用。
下面的例子顯示了編譯器如何利用ARM指令的條件執(zhí)行。
intg(inta,intb,intc,intd)
{if(a>0b>0c0d0)/*程序分組條件*/
returna+b+c+d;
return-1;
}
g
CMPa1,#0
CMPGTa2,#0
BLE|L000024.J4.g|
CMPa3,#0
CMPLTa4,#0
ADDLTa1,a1,a2
ADDLTa1,a1,a3
ADDLTa1,a1,a4
MOVLTpc,lr
|L000024.J4.g|
MVNa1,#0
MOVpc,lr
評(píng)論