📍 Addressing Modes במעבד 6502
בוא נבין את Addressing Modes במעבד 6502/6507: איך המעבד מפרש ערכים אחרי פקודת מכונה – האם מדובר בערך ישיר (Immediate), בכתובת בזיכרון (Absolute), כתובת בדף אפס (Zero Page), כתובת עם תוספת מאוגר (Indexed), או הפניה עקיפה (Indirect).
🔍 למה זה חשוב?
- מהירות הקוד (Zero Page מהיר יותר)
- גודל הפקודה בזיכרון (Immediate קצר יותר)
- סוג הפעולה (על ערכים או על זיכרון)
🧩 שלושת המצבים הראשונים
1. 📌 Immediate Mode (LDA #$80)
כשאנחנו רוצים לטעון ערך מספרי ישיר לתוך אוגר, נשתמש ב-#. לדוגמה:
LDA #10 ; טען את המספר 10 LDA #$80 ; טען את המספר 128 (בבסיס הקס)
שימושים: אתחול משתנים, הגדרת צבע, מונה התחלתי ועוד.
למה? כי אנחנו לא רוצים לקרוא מהזיכרון אלא פשוט להציב ערך.
2. 📌 Zero Page Mode (LDA $80)
כתובת בזיכרון בטווח $00–$FF. מהיר במיוחד.
LDA $80 ; קרא את הערך מהכתובת $80
למה? מהיר יותר, מתאים למשתנים זמניים.
3. 📌 Absolute Mode (LDA $1234)
טוען נתון מכתובת מלאה (16 ביט).
LDA $0200 ; קרא את התוכן מהכתובת $0200
שימושים: רגיסטרים של חומרה, משתנים גלובליים, מסך וכו'.
🧭 מצבי מיקוד מתקדמים
4. 📌 Indexed Mode (כתובת + אוגר)
LDA $2000,X ; קרא מ-$2000 + X LDA $20,Y ; קרא מ-$20 + Y
שימושים: לולאות על מערכים, תנועה בזיכרון.
5. 📌 Indirect Mode (עקיפה)
JMP ($1234) ; קפוץ לכתובת ב-$1234/5 LDA ($40,X) ; חפש כתובת דרך $40 + X LDA ($40),Y ; קרא מכתובת שמתחילה ב-$40 ואז הוסף Y
שימושים: מצביעים, טבלאות קפיצה, פונקציות דינאמיות.
📊 טבלה מסכמת
מצב | תחביר | משמעות | דוגמה |
---|---|---|---|
Immediate | #value | טען ערך ישיר | LDA #10 |
Zero Page | $00–$FF | גישה מהירה לזיכרון נמוך | LDA $80 |
Absolute | $0000–$FFFF | כתובת מלאה | STA $1234 |
Indexed,X | $addr,X | כתובת + X | LDA $2000,X |
Indexed,Y | $addr,Y | כתובת + Y | LDA $1000,Y |
Indirect | ($addr) | עקיפה | JMP ($1234) |
Indirect,X | ($addr,X) | דרך X | LDA ($40,X) |
Indirect),Y | ($addr),Y | דרך Y | LDA ($40),Y |