1.2 - שלום עולם - תרגול
תרגול 1 - הבנת רגיסטרים¶
-
אילו רגיסטרים כללים קיימים במעבד 8086, ולמה משמש כל אחד מהם?
-
מה ההבדל בין AX ל-AH ול-AL?
-
אם כתוב הקוד הבא:
מה יהיו הערכים ב-AH וב-AL לאחר פקודה זו?
תרגול 2 - שימוש ב-MOV ו-LEA¶
-
כתוב קוד שמכניס את הערך 1000 לרגיסטר BX, ולאחר מכן מעתיק את הערך הזה ל-DX.
-
כתוב קוד שמכניס את הערך 5 לזיכרון בכתובת offset 200h (בהנחה ש-DS כבר מאותחל כראוי).
-
כתוב קוד שמחשב את הכתובת
bx + 10בעזרתLEAושומר את התוצאה ב-SI.
תרגול 3 - פעולות חשבוניות¶
-
כתוב קוד שמכניס ל-AX את הערך 20, ומוסיף לו את הערך 15.
-
כתוב קוד שמחסר את הערך שב-BX מהערך שב-AX.
-
כתוב קוד שמבצע שלוש פעמים
INCעל רגיסטר CX. -
כתוב קוד שמבצע פעולה הפוכה (שלוש פעמים
DEC) על רגיסטר CX.
תרגול 4 - כפל וחילוק¶
-
כתוב קוד שמבצע כפל של 8 ביט בין AL ל-BL. השתמש בפקודת
MUL. -
כתוב קוד שמכפיל מספר 16 ביט ב-BX. ודא שהמחולל (AX) מקבל ערך מתאים.
-
כתוב קוד שמחלק את הערך AX בערך BL. השתמש ב-DIV. מה קורה אם BL שווה 0?
-
כתוב קוד שמחלק את הערך DX:AX ב-CX. ודא ש-DX מאותחל ל-0.
תרגול 5 - פעולות לוגיות¶
-
כתוב קוד שמכניס לרגיסטר AL את הערך הבינארי
11110000ומבצע עליוANDעם00001111. מה תהיה התוצאה? -
כתוב קוד שמפעיל (מדליק) את שני הביטים האחרונים בערך הקיים ב-AL באמצעות
OR. -
כתוב קוד שמבצע
XORבין AL לערך11111111. מה תהיה התוצאה? -
כתוב קוד שמאפס את AX בעזרת
XOR. -
כתוב קוד שמבצע
NOTעל ערך כלשהו ברגיסטר BL.
תרגול 6 - קריאה וכתיבה לזיכרון¶
-
כתוב קוד שמכניס את הערך 9 לכתובת
0300hבזיכרון. -
כתוב קוד שמטען את הערך מכתובת
0400hלרגיסטר AL. -
כתוב קוד שמעתיק את הערך ב-BX לזיכרון ב-offset 0600h.
תרגול 7 - תרגול מסכם¶
-
כתוב תוכנית שמבצעת את הפעולות הבאות:
-
מאפס את AX
-
מעלה אותו ל-100 על ידי חיבור
-
מכפיל את הערך ב-2
-
שומר את התוצאה בזיכרון בכתובת 0500h
-
-
כתוב תוכנית שמבצעת פעולה לוגית
ANDבין שני ערכים שנמצאים בזיכרון, ושומרת את התוצאה ב-AL. -
כתוב תוכנית שמחשבת את הביט המשלים של ערך שנמצא בזיכרון (NOT) ושומרת אותו ברגיסטר אחר.