6. הוראות השוואה¶
אלה מבצעות הוראה אריתמטית או לוגית על שני ארגומנטים, מבטלות את התוצאה אך מגדירות את דגלי התנאי. בדרך כלל הן משמשות לבדיקת ערכי נתונים מבלי לשנותם, לפני ביצוע הסתעפות מותנית.
6.1. מוסכמות התיעוד¶
סימון: Rd, Rm, Rn מציינים אוגרי ARM R0-R7. imm8 מציין ערך מיידי ברוחב 8 סיביות.
6.2. אוגר מצב תוכנית היישום (APSR)¶
זה מכיל ארבע סיביות הנבדקות על ידי הוראות ההסתעפות המותנית. בדרך כלל הסתעפות מותנית תבדוק מספר סיביות, למשל bge(LABEL). משמעות קודי התנאי יכולה להיות תלויה בשאלה אם האופרנדים של הוראה אריתמטית נתפסים כמספרים שלמים מסומנים או בלתי-מסומנים. כך bhi(LABEL) מניח שעובדו מספרים בלתי-מסומנים בעוד bgt(LABEL) מניח אופרנדים מסומנים.
6.3. סיביות APSR¶
Z (אפס)
מוגדר אם תוצאת פעולה היא אפס או אם האופרנדים של השוואה שווים.
N (שלילי)
מוגדר אם התוצאה שלילית.
C (נשא)
חיבור מגדיר את דגל הנשא כאשר התוצאה גולשת מחוץ ל-MSB, למשל חיבור 0x80000000 ו-0x80000000. מטבעה של אריתמטיקת המשלים-לשתיים התנהגות זו הפוכה בחיסור, כאשר שאילה מסומנת על ידי כך שסיבית הנשא מנוקה. כך 0x10 - 0x01 מבוצע כ-0x10 + 0xffffffff שיגדיר את סיבית הנשא.
V (גלישה)
דגל הגלישה מוגדר אם לתוצאה, הנתפסת כמספר משלים-לשתיים, יש את הסימן ה“שגוי“ ביחס לאופרנדים. לדוגמה, חיבור 1 ל-0x7fffffff יגדיר את סיבית הגלישה משום שהתוצאה (0x80000000), הנתפסת כמספר שלם משלים-לשתיים, היא שלילית. שימו לב שבמקרה זה סיבית הנשא אינה מוגדרת.
6.4. הוראות השוואה¶
אלה מגדירות את דגלי N (שלילי), Z (אפס), C (נשא) ו-V (גלישה) של ה-APSR (אוגר מצב תוכנית היישום).
cmp(Rn, imm8)
Rn - imm8cmp(Rn, Rm)
Rn - Rmcmn(Rn, Rm)
Rn + Rmtst(Rn, Rm)
Rn & Rm
6.5. ביצוע מותנה¶
ההוראות it ו-ite מספקות אמצעי לביצוע מותנה של אחת עד ארבע הוראות עוקבות מבלי שיהיה צורך בתווית.
it(<condition>) If then
בצע את ההוראה הבאה אם <condition> אמת:
cmp(r0, r1)
it(eq)
mov(r0, 100) # runs if r0 == r1
# execution continues here
ite(<condition>) If then else
אם <condition> אמת, בצע את ההוראה הבאה, אחרת בצע את העוקבת. כך:
cmp(r0, r1)
ite(eq)
mov(r0, 100) # runs if r0 == r1
mov(r0, 200) # runs if r0 != r1
# execution continues here
ניתן להרחיב זאת כדי לשלוט בביצוע של עד ארבע הוראות עוקבות: it[x[y[z]]] כאשר x,y,z=t/e; למשל itt, itee, itete, ittte, itttt, iteee וכו«.