1.7 קלט ופלט תרגול
תרגיל 1 - קריאה מפורט המקלדת והצגת תו¶
כתוב תוכנית באסמבלי שקוראת תו מפורט המקלדת (0x60) ומציגה אותו על המסך בעזרת פסיקת BIOS (INT 10h, שירות 0Eh).
רמזים:
- השתמש ב-
DXכדי לציין את כתובת הפורט - קרא עם
IN AL, DX - הצג עם
INT 10h(AH = 0Eh)
תרגיל 2 - בדיקת סטטוס לפני קריאה¶
כתוב תוכנית שממתינה עד שיש תו מוכן בפורט המקלדת, ורק אז קוראת אותו ומציגה אותו.
- בדוק את פורט הסטטוס של המקלדת (
0x64) - ביט 0 מציין שיש תו מוכן. - אם ביט 0 כבוי - המשך לחכות בלולאה.
- כשביט 0 דולק - קרא את התו מפורט
0x60והצג אותו.
רמזים:
- השתמש ב-
TEST AL, 1כדי לבדוק את ביט 0 - השתמש ב-
JZכדי לחזור ללולאה אם אין תו מוכן
תרגיל 3 - כתיבה לפורט¶
נניח שיש כרטיס חיצוני שמחובר לפורט 0x300, שמקבל ערך של בית אחד ומדליק נוריות לד לפי הביטים שדולקים.
- כתוב תוכנית ששולחת את הערך
0b11001100לפורט0x300. - אחרי כן, שלח את הערך
0b00110011לאותו פורט. - סיים את התוכנית בצורה תקנית.
רמזים:
- השתמש ב-
OUT DX, ALלשליחת הערך - טען את כתובת הפורט ל-
DXואת הערך ל-AL
תרגיל 4 - לולאת דרייבר מקלדת¶
כתוב "דרייבר מקלדת" פשוט - תוכנית שרצה בלולאה אינסופית ומבצעת את הפעולות הבאות:
- בודקת את פורט הסטטוס (
0x64) - האם יש תו מוכן. - אם לא - חוזרת לתחילת הלולאה.
- אם כן - קוראת את התו מפורט
0x60. - מציגה את התו על המסך עם
INT 10h(AH = 0Eh). - חוזרת לתחילת הלולאה.
תרגיל 5 - הבנת Bus-ים¶
ענה על השאלות הבאות (ללא קוד):
- כשמבצעים את הפקודה
OUT DX, AL- מה עובר ב-Data Bus, מה עובר ב-Address Bus, ומה עובר ב-Control Bus? - מה ההבדל בין Memory-Mapped I/O לבין Port-Mapped I/O?
- כמה פורטים יכולים להיות במעבד 8086 תאורטית? ובפועל כמה משתמשים לרוב?
- למה הרגיסטר
DXמשמש תמיד לכתובת הפורט בפקודותINו-OUT?