1.7 קלט ופלט הרצאה
הקדמה: מהו Bus?¶
המעבד מחובר לזכרון, ולרכיבי הקלט פלט באמצעות Bus-ים.
הbus-ים מחברים את כל החלקים במחשב ומאפשרים להעביר מידע בין חלק וחלק.
הbus-ים מחולקים ב3 ערוצים שונים, שלכל ערוץ יש יעוד משלו.
1. Address Bus – ערוץ כתובות¶
• ערוץ זה מעביר כתובות זכרון שהמעבד רוצה לגשת אליו כאשר אנחנו מבצעים הוראה כלשהי שמעבירה כתובות.
• במעבד 8086, זהו ערוץ ברוחב של 20 ביט – מאפשר גישה ל־1MB של זיכרון (2²⁰).
זוהי הסיבה שבמעבדי 8086 הגודל המקסימלי של הRAM לא יעלה על 1MB, כי הaddress bus יכול להכיל עד 1MB של כתובות.
2. Data Bus – ערוץ נתונים¶
• דרכו עוברים הנתונים עצמם – בין אם זה מידע, הוראות, ועוד.
• ברוחב 16 ביט (ב־8086), כלומר בכל מחזור ניתן להעביר עד 2 בתים.
3. Control Bus – ערוץ פיקוד¶
- האם מדובר בפעולת קריאה (
READ) או כתיבה (WRITE) מהRAM, או מהIO.
הקדמה: מהו קלט/פלט?¶
הI/O – Input/Output – משמעו תקשורת עם התקני חומרה חיצוניים:
מקלדת, מסך, עכבר, כוננים, כרטיסי קול, בקרים טוריים, תקשורת רשת ועוד.
למעבד אין "חיבור ישיר" להתקן – הוא שולח וקולט נתונים דרך ממשקים חשמליים הקרויים פורטי קלט/פלט (I/O Ports).
שתי גישות ל־I/O¶
1. Memory-Mapped I/O¶
גישה שבה ה־I/O משולב בתוך מרחב ה־RAM, כמו כל כתובת רגילה בזיכרון.
לא נשתמש בגישה זו במעבד 8086 (היא רלוונטית יותר למעבדים מתקדמים יותר כמו ARM או x86 מודרני).
2. Port-Mapped I/O (נקרא גם Isolated I/O)¶
גישה בה יש מרחב נפרד של כתובות ייעודיות ל־I/O.
במעבד 8086 יש 64KB של פורטים (כתובות מ־0x0000 עד 0xFFFF), אבל בפועל לרוב משתמשים רק ב־256 פורטים (0x00–0xFF).
כיצד ניגשים לפורטים?¶
המעבד מספק פקודות מיוחדות לעבודה עם פורטים:
-
IN– קוראת מידע מהתקן I/O (כלומר – קלט) -
OUT– שולחת מידע להתקן I/O (כלומר – פלט)
הסינטקס¶
פקודת IN¶
פקודת OUT¶
שים לב: הרגיסטר DX משמש תמיד לכתובת הפורט
דוגמה: קריאה מפורט והצגה במסך¶
mov dx, 0x60 ; כתובת של פורט מקלדת (Keyboard Data Port)
in al, dx ; קרא תו מהמקלדת
mov ah, 0Eh ; שירות תצוגה של BIOS
int 10h ; הצג את התו שקראת
דוגמה: כתיבה לפורט תיאורטי של נוריות לד¶
נניח שיש לנו כרטיס שמחובר ל־PORT 0x300, והדלקת נוריות תלויה בערך שנשלח:
תקציר פורטים חשובים¶
| פורט | שימוש |
|---|---|
0x60 |
קריאה מהמקלדת (Keyboard Data Port) |
0x61 |
מקלדת / צלילים (BIOS keyboard control) |
0x64 |
פקודות למקלדת |
0x3F8 |
COM1 – פורט סידורי |
0x378 |
LPT1 – מדפסת |
0x40–0x43 |
תדר של הטיימר הפנימי |
0x201 |
Game port / ג'ויסטיק |
מה קורה "מאחורי הקלעים"?¶
-
כשמבצעים
OUT dx, al, המעבד מעביר את הערך שבAL דרך ה־Data Bus, וכתובת הפורט דרך Address Bus. -
המעבד גם מפעיל את אות ה־IO Write (בניגוד ל־Memory Write) דרך ה־Control Bus.
-
ההתקן שאליו מופנה הפורט מקבל את האות ומגיב בהתאם.
קריאה חוזרת – קריאת תו עד שהתקבל קלט¶
wait_key:
in al, 0x64 ; בודק האם יש תו מוכן
test al, 1 ; בדיקה של ביט 0 – מוכן?
jz wait_key ; אם לא – המתן
in al, 0x60 ; קרא את התו