לדלג לתוכן

1.7 קלט ופלט תרגול

תרגיל 1 - קריאה מפורט המקלדת והצגת תו

כתוב תוכנית באסמבלי שקוראת תו מפורט המקלדת (0x60) ומציגה אותו על המסך בעזרת פסיקת BIOS (INT 10h, שירות 0Eh).

רמזים:

  • השתמש ב-DX כדי לציין את כתובת הפורט
  • קרא עם IN AL, DX
  • הצג עם INT 10h (AH = 0Eh)

תרגיל 2 - בדיקת סטטוס לפני קריאה

כתוב תוכנית שממתינה עד שיש תו מוכן בפורט המקלדת, ורק אז קוראת אותו ומציגה אותו.

  1. בדוק את פורט הסטטוס של המקלדת (0x64) - ביט 0 מציין שיש תו מוכן.
  2. אם ביט 0 כבוי - המשך לחכות בלולאה.
  3. כשביט 0 דולק - קרא את התו מפורט 0x60 והצג אותו.

רמזים:

  • השתמש ב-TEST AL, 1 כדי לבדוק את ביט 0
  • השתמש ב-JZ כדי לחזור ללולאה אם אין תו מוכן

תרגיל 3 - כתיבה לפורט

נניח שיש כרטיס חיצוני שמחובר לפורט 0x300, שמקבל ערך של בית אחד ומדליק נוריות לד לפי הביטים שדולקים.

  1. כתוב תוכנית ששולחת את הערך 0b11001100 לפורט 0x300.
  2. אחרי כן, שלח את הערך 0b00110011 לאותו פורט.
  3. סיים את התוכנית בצורה תקנית.

רמזים:

  • השתמש ב-OUT DX, AL לשליחת הערך
  • טען את כתובת הפורט ל-DX ואת הערך ל-AL

תרגיל 4 - לולאת דרייבר מקלדת

כתוב "דרייבר מקלדת" פשוט - תוכנית שרצה בלולאה אינסופית ומבצעת את הפעולות הבאות:

  1. בודקת את פורט הסטטוס (0x64) - האם יש תו מוכן.
  2. אם לא - חוזרת לתחילת הלולאה.
  3. אם כן - קוראת את התו מפורט 0x60.
  4. מציגה את התו על המסך עם INT 10h (AH = 0Eh).
  5. חוזרת לתחילת הלולאה.

תרגיל 5 - הבנת Bus-ים

ענה על השאלות הבאות (ללא קוד):

  1. כשמבצעים את הפקודה OUT DX, AL - מה עובר ב-Data Bus, מה עובר ב-Address Bus, ומה עובר ב-Control Bus?
  2. מה ההבדל בין Memory-Mapped I/O לבין Port-Mapped I/O?
  3. כמה פורטים יכולים להיות במעבד 8086 תאורטית? ובפועל כמה משתמשים לרוב?
  4. למה הרגיסטר DX משמש תמיד לכתובת הפורט בפקודות IN ו-OUT?