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) ושומרת אותו ברגיסטר אחר.