CMP(compare)比較指令
CMP把一個(gè)寄存器的內(nèi)容和另一個(gè)寄存器的內(nèi)容或立即數(shù)進(jìn)行比較。但不存儲(chǔ)結(jié)果,只是正確的更改標(biāo)志;
一般CMP做完判斷后,會(huì)進(jìn)行跳轉(zhuǎn),后面通常會(huì)跟上B指令;
- BL 標(biāo)號(hào):跳轉(zhuǎn)到標(biāo)號(hào)出執(zhí)行;
- B.ET 標(biāo)號(hào):比較結(jié)果是大于(greater than),執(zhí)行標(biāo)號(hào),否則不跳轉(zhuǎn);
- B.GE 標(biāo)號(hào):比較結(jié)果是大于等于(greater than or equal to),執(zhí)行標(biāo)號(hào),否則不跳轉(zhuǎn);
- B.EQ 標(biāo)號(hào):比較結(jié)果是等于(equal to),執(zhí)行標(biāo)號(hào),否則不跳轉(zhuǎn);
- B.HI 標(biāo)號(hào):比較結(jié)果是無(wú)符號(hào)大于,執(zhí)行標(biāo)號(hào),否則不跳轉(zhuǎn);
Switch
- 假如Switch的分支比較少的時(shí)候(例如3,小于4沒(méi)有意義),沒(méi)有必要使用此結(jié)構(gòu),相當(dāng)于if;
- 各個(gè)分支常量的差值較大的時(shí)候,編譯器會(huì)在效率和內(nèi)存進(jìn)行取舍,這個(gè)時(shí)候編譯器還是會(huì)編譯成if、else的結(jié)構(gòu);
- 在分支較多的時(shí)候,在編譯的時(shí)候,會(huì)生成一個(gè)表(跳轉(zhuǎn)表每個(gè)地址四個(gè)字節(jié));