7. Instrukce větvení

Ty způsobí, že vykonávání skočí na cílové umístění, obvykle určené návěštím (viz assemblerová direktiva label()). Podmíněná větvení a instrukce it a ite testují příznaky N (záporný), Z (nula), C (přenos) a V (přetečení) registru Application Program Status Register (APSR), aby určily, zda by se větvení mělo provést.

Většina vystavených assemblerových instrukcí (včetně přesunových operací) nastavuje příznaky, ale existují explicitní porovnávací instrukce umožňující testování hodnot.

Další podrobnosti o významu příznaků podmínek jsou uvedeny v sekci porovnávací instrukce.

7.1. Konvence dokumentu

Notace: Rm označuje ARM registry R0-R15. LABEL označuje návěští definované assemblerovou direktivou label(). <condition> udává jeden z následujících specifikátorů podmínky:

  • eq Rovno (výsledek byl nula)

  • ne Není rovno

  • cs Přenos nastaven

  • cc Přenos vymazán

  • mi Mínus (záporný)

  • pl Plus (kladný)

  • vs Přetečení nastaveno

  • vc Přetečení vymazáno

  • hi > (porovnání bez znaménka)

  • ls <= (porovnání bez znaménka)

  • ge >= (porovnání se znaménkem)

  • lt < (porovnání se znaménkem)

  • gt > (porovnání se znaménkem)

  • le <= (porovnání se znaménkem)

7.2. Větvení na návěští

  • b(LABEL) Nepodmíněné větvení

  • beq(LABEL) větvení, pokud rovno

  • bne(LABEL) větvení, pokud není rovno

  • bge(LABEL) větvení, pokud větší nebo rovno

  • bgt(LABEL) větvení, pokud větší než

  • blt(LABEL) větvení, pokud menší než (<) (se znaménkem)

  • ble(LABEL) větvení, pokud menší nebo rovno (<=) (se znaménkem)

  • bcs(LABEL) větvení, pokud je nastaven příznak přenosu

  • bcc(LABEL) větvení, pokud je příznak přenosu vymazán

  • bmi(LABEL) větvení, pokud záporné

  • bpl(LABEL) větvení, pokud kladné

  • bvs(LABEL) větvení, pokud je nastaven příznak přetečení

  • bvc(LABEL) větvení, pokud je příznak přetečení vymazán

  • bhi(LABEL) větvení, pokud vyšší (bez znaménka)

  • bls(LABEL) větvení, pokud nižší nebo rovno (bez znaménka)

7.3. Dlouhá větvení

Kód produkovaný výše uvedenými instrukcemi větvení používá pevnou bitovou šířku k určení cíle větvení, který je relativní vůči PC. Následkem toho v dlouhých programech, kde je instrukce větvení vzdálená od svého cíle, assembler vyprodukuje chybu „branch not in range“. To lze překonat „wide“ variantami, jako například

  • beq_w(LABEL) dlouhé větvení, pokud rovno

Wide větvení používají k zakódování instrukce 4 bajty (oproti 2 bajtům u standardních instrukcí větvení).

7.4. Podprogramy (funkce)

Při vstupu do podprogramu procesor uloží návratovou adresu do registru r14, známého také jako link registr (lr). Návrat na instrukci za voláním podprogramu se provádí aktualizací program counteru (r15 nebo pc) z link registru. Tento proces zajišťují následující instrukce.

  • bl(LABEL)

Předá vykonávání instrukci za LABEL a uloží návratovou adresu do link registru (r14).

  • bx(Rm) Větvení na adresu určenou Rm.

Obvykle se k návratu z podprogramu použije bx(lr). U vnořených podprogramů musí být link registr vnějších rozsahů uložen (obvykle na zásobník) před prováděním vnitřních volání podprogramů.