לדלג לתוכן

1.2 שלום עולם תרגול

תרגול 1 – הבנת רגיסטרים

  1. אילו רגיסטרים כללים קיימים במעבד 8086, ולמה משמש כל אחד מהם?

  2. מה ההבדל בין AX ל־AH ול־AL?

  3. אם כתוב הקוד הבא:

    mov ax, 0x5A3C
    

    מה יהיו הערכים ב־AH וב־AL לאחר פקודה זו?


תרגול 2 – שימוש ב־MOV ו־LEA

  1. כתוב קוד שמכניס את הערך 1000 לרגיסטר BX, ולאחר מכן מעתיק את הערך הזה ל־DX.

  2. כתוב קוד שמכניס את הערך 5 לזיכרון בכתובת offset 200h (בהנחה ש־DS כבר מאותחל כראוי).

  3. כתוב קוד שמחשב את הכתובת bx + 10 בעזרת LEA ושומר את התוצאה ב־SI.


תרגול 3 – פעולות חשבוניות

  1. כתוב קוד שמכניס ל־AX את הערך 20, ומוסיף לו את הערך 15.

  2. כתוב קוד שמחסר את הערך שב־BX מהערך שב־AX.

  3. כתוב קוד שמבצע שלוש פעמים INC על רגיסטר CX.

  4. כתוב קוד שמבצע פעולה הפוכה (שלוש פעמים DEC) על רגיסטר CX.


תרגול 4 – כפל וחילוק

  1. כתוב קוד שמבצע כפל של 8 ביט בין AL ל־BL. השתמש בפקודת MUL.

  2. כתוב קוד שמכפיל מספר 16 ביט ב־BX. ודא שהמחולל (AX) מקבל ערך מתאים.

  3. כתוב קוד שמחלק את הערך AX בערך BL. השתמש ב־DIV. מה קורה אם BL שווה 0?

  4. כתוב קוד שמחלק את הערך DX:AX ב־CX. ודא ש־DX מאותחל ל־0.


תרגול 5 – פעולות לוגיות

  1. כתוב קוד שמכניס לרגיסטר AL את הערך הבינארי 11110000 ומבצע עליו AND עם 00001111. מה תהיה התוצאה?

  2. כתוב קוד שמפעיל (מדליק) את שני הביטים האחרונים בערך הקיים ב־AL באמצעות OR.

  3. כתוב קוד שמבצע XOR בין AL לערך 11111111. מה תהיה התוצאה?

  4. כתוב קוד שמאפס את AX בעזרת XOR.

  5. כתוב קוד שמבצע NOT על ערך כלשהו ברגיסטר BL.


תרגול 6 – קריאה וכתיבה לזיכרון

  1. כתוב קוד שמכניס את הערך 9 לכתובת 0300h בזיכרון.

  2. כתוב קוד שמטען את הערך מכתובת 0400h לרגיסטר AL.

  3. כתוב קוד שמעתיק את הערך ב־BX לזיכרון ב־offset 0600h.


תרגול 7 – תרגול מסכם

  1. כתוב תוכנית שמבצעת את הפעולות הבאות:

    • מאפס את AX

    • מעלה אותו ל־100 על ידי חיבור

    • מכפיל את הערך ב־2

    • שומר את התוצאה בזיכרון בכתובת 0500h

  2. כתוב תוכנית שמבצעת פעולה לוגית AND בין שני ערכים שנמצאים בזיכרון, ושומרת את התוצאה ב־AL.

  3. כתוב תוכנית שמחשבת את הביט המשלים של ערך שנמצא בזיכרון (NOT) ושומרת אותו ברגיסטר אחר.