ב-Assembly x86, תוויות (Labels) ותנאים הם מרכיבים חשובים לשליטה על זרימת התוכנית.
תוויות משמשות כנקודות התייחסות בקוד שאליהן ניתן לקפוץ, בעוד תנאים משמשים להחלטה האם לבצע קפיצה או לא בהתאם לתוצאה של פעולות אריתמטיות ולוגיות.
תוויות הן שמות שמציינים מיקום מסוים בקוד התוכנית. הן משמשות בעיקר לקפיצות (Jumps) בין חלקים שונים בקוד, מה שמאפשר שליטה גמישה בזרימת התוכנית.
דוגמה בסיסית לשימוש בתוויות:
_start:
MOV AX, 5
CMP AX, 10
JG greater_than
JL less_than
equal_to:
MOV BX, 1
JMP end
greater_than:
MOV BX, 2
JMP end - קופץ לסיום התוכנית
less_than:
MOV BX, 3
end:
MOV AX, 0x4C00 - סיום התוכנית עם קוד יציאה 0
INT 0x21 - קריאה למערכת לסיום התוכנית
הסבר על הדוגמא:
תנאים ב-Assembly מבוססים על תוצאות של פעולות קודמות כמו השוואה (CMP) או חיסור (SUB). תוצאה זו נשמרת בדגלים (Flags) של המעבד, ולאחר מכן ניתן לבצע קפיצות מותנות בהתאם לדגלים אלה.
דוגמה לשימוש בתנאים ובתוויות:
section .data
num1 dw 7
num2 dw 7
section .text
global _start
_start:
MOV AX, [num1]
MOV BX, [num2]
CMP AX, BX - AX == BX האם
JE equal - אם הם שווים קופץ לתווית
equal
JG greater - BX > AX אם התנאי נכון
קופץ לתווית
greater
JL less - BX < AX אם התנאי נכון
קופץ לתווית
less
equal:
MOV CX, 0
JMP end - קופץ לסיום
greater:
MOV CX, 1
JMP end - קופץ לסיום
less:
MOV CX, -1
end:
MOV AX, 0x4C00 - סיום התוכנית עם קוד יציאה 0
INT 0x21 - קריאה למערכת לסיום התוכנית
הסבר:
שימוש בתוויות ותנאים ב-Assembly מאפשר שליטה מתקדמת בזרימת התוכנית. על ידי השימוש בפקודות קפיצה מותנות, ניתן לכתוב תוכניות המגיבות בצורה דינאמית בהתאם לתוצאות של חישובים והשוואות.
תוויות מאפשרות לסמן נקודות בקוד שאליהן ניתן לחזור או לקפוץ, מה שמאפשר כתיבת קוד מסודר וקריא יותר.