לדלג לתוכן

1.3 בקרת זרימה ולולאות תרגול

תרגול 1 – דגלים בסיסיים

  1. הסבר מה קורה לדגלים ZF, CF, SF לאחר הביצוע של כל אחת מהפקודות הבאות:

    • mov ax, 5
      sub ax, 5

    • mov ax, 10
      sub ax, 20

    • mov ax, 0FFFFh
      add ax, 1

  2. מה ההבדל בין Overflow Flag (OF) ל־Carry Flag (CF)? מתי כל אחד מהם מופעל?

  3. האם הפעולה cmp ax, bx משנה את הערכים של AX או BX? אם לא, מה כן משתנה?


תרגול 2 – כתיבת תנאים עם cmp ופקודות קפיצה

  1. כתוב תוכנית שמשווה בין שני מספרים:

    • אם הם שווים, כתוב 1 למשתנה בשם equal

    • אם המספר הראשון גדול מהשני, כתוב 2 למשתנה בשם greater

    • אם המספר הראשון קטן מהשני, כתוב 3 למשתנה בשם less

  2. כתוב קוד שמבצע את הפעולה cmp al, 0, ואם AL שווה לאפס – כתוב 1 למשתנה zero_flagged, אחרת כתוב 0.

  3. כתוב קוד שבו נשמר ערך ב־AX. אם הערך שלילי (Signed), כתוב -1 ל־sign_status, ואם חיובי או אפס – כתוב 0.


תרגול 3 – לולאות עם קפיצות מותנות

  1. כתוב לולאה שרצה 10 פעמים (למשל באמצעות CX), ובכל סיבוב מגדילה משתנה בשם counter ב־1.

  2. כתוב לולאה שסופרת לאחור מ־20 עד 0 (כולל), ומכניסה את הערך האחרון למשתנה בשם done_value.

  3. כתוב לולאה שמריצה את עצמה כל עוד הערך ב־AL הוא אי זוגי.
    (טיפ: השתמש בפקודה test al, 1 כדי לבדוק זוגיות).


תרגול 4 – בחינה לפי דגלים ישירים

  1. כתוב קוד שמחשב mov al, 100 ואז add al, 200,
    ובודק האם התרחש overflow. אם כן, כתוב 1 למשתנה בשם overflow_happened.

  2. כתוב קוד שמבצע פעולת חיסור בין שני ערכים –
    אם התוצאה היא שלילית (Signed), כתוב 1 למשתנה is_negative.

  3. כתוב קוד שמחשב cmp ax, bx
    אם התוצאה אינה שווה, כתוב 99 למשתנה not_equal_flag.


תרגול 5 – סימולציה של תנאים עם קפיצות

  1. כתוב תוכנית שמבצעת בדיקה של ציון:

    • אם הציון מתחת ל־60 → כתוב "נכשל"

    • אם בין 60 ל־85 → כתוב "עובר"

    • אם מעל 85 → כתוב "מעולה"

    (טיפ: הציון יכול להיות במשתנה בזיכרון בשם grade)

  2. כתוב קוד שקופץ ל־label אחר רק אם לא קרתה נשיאה (Carry) אחרי חיבור בין שני ערכים.

  3. כתוב קוד שמבצע פעולה כלשהי רק אם התוצאה אינה אפס, תוך שימוש ב־TEST ו־JNZ.