6. Instrukcije usporedbe

One izvode aritmetičku ili logičku instrukciju nad dvama argumentima, odbacujući rezultat, ali postavljajući zastavice uvjeta. Obično se koriste za ispitivanje vrijednosti podataka bez njihove promjene prije izvršavanja uvjetnog grananja.

6.1. Konvencije dokumenta

Notacija: Rd, Rm, Rn označavaju ARM registre R0-R7. imm8 označava neposrednu vrijednost širine 8 bitova.

6.2. Application Program Status Register (APSR)

Ovaj sadrži četiri bita koje ispituju instrukcije uvjetnog grananja. Obično će uvjetno grananje ispitati više bitova, na primjer bge(LABEL). Značenje uvjetnih kodova može ovisiti o tome promatraju li se operandi aritmetičke instrukcije kao predznačeni ili nepredznačeni cijeli brojevi. Tako bhi(LABEL) pretpostavlja da su obrađeni nepredznačeni brojevi, dok bgt(LABEL) pretpostavlja predznačene operande.

6.3. Bitovi APSR-a

  • Z (nula)

Postavlja se ako je rezultat operacije nula ili su operandi usporedbe jednaki.

  • N (negativan)

Postavlja se ako je rezultat negativan.

  • C (prijenos)

Zbrajanje postavlja zastavicu prijenosa kada se rezultat prelije iz MSB-a, na primjer zbrajanjem 0x80000000 i 0x80000000. Po prirodi aritmetike dvojnog komplementa ovo se ponašanje obrće pri oduzimanju, gdje je posudba označena brisanjem bita prijenosa. Tako se 0x10 - 0x01 izvršava kao 0x10 + 0xffffffff što će postaviti bit prijenosa.

  • V (prelijevanje)

Zastavica prelijevanja postavlja se ako rezultat, promatran kao broj dvojnog komplementa, ima „pogrešan” predznak u odnosu na operande. Na primjer, dodavanje 1 broju 0x7fffffff postavit će bit prelijevanja jer je rezultat (0x80000000), promatran kao cijeli broj dvojnog komplementa, negativan. Imajte na umu da u ovom slučaju bit prijenosa nije postavljen.

6.4. Instrukcije usporedbe

One postavljaju zastavice N (negativan), Z (nula), C (prijenos) i V (prelijevanje) registra APSR (Application Program Status Register).

  • cmp(Rn, imm8) Rn - imm8

  • cmp(Rn, Rm) Rn - Rm

  • cmn(Rn, Rm) Rn + Rm

  • tst(Rn, Rm) Rn & Rm

6.5. Uvjetno izvršavanje

Instrukcije it i ite pružaju način za uvjetno izvršavanje od jedne do četiri sljedeće instrukcije bez potrebe za oznakom.

  • it(<condition>) If then

Izvrši sljedeću instrukciju ako je <condition> istinit:

cmp(r0, r1)
it(eq)
mov(r0, 100) # runs if r0 == r1
# execution continues here
  • ite(<condition>) If then else

Ako je <condition> istinit, izvrši sljedeću instrukciju, inače izvrši onu nakon nje. Tako:

cmp(r0, r1)
ite(eq)
mov(r0, 100) # runs if r0 == r1
mov(r0, 200) # runs if r0 != r1
# execution continues here

Ovo se može proširiti za upravljanje izvršavanjem do četiri sljedeće instrukcije: it[x[y[z]]] gdje su x,y,z=t/e; npr. itt, itee, itete, ittte, itttt, iteee, itd.