📘 פקודות אסמבלי בסיסיות
מהו אוגר (Register)?
אוגר הוא תת־זיכרון פנימי במעבד, שנועד לאחסן ערכים זמניים. לדוגמה: A (Accumulator) משמש לביצוע פעולות חישוב, X/Y משמשים לספירה, מיקום ועוד.
🔹 פקודות טעינה לאוגרים
- LDA – טען ערך ל־A
- LDX – טען ערך ל־X
- LDY – טען ערך ל־Y
🔸 כתיבה מהאוגרים לזיכרון
- STA – שמור את ערך A בזיכרון
- STX – שמור את ערך X בזיכרון
- STY – שמור את ערך Y בזיכרון
➕🔢 פעולות אריתמטיות
- ADC – חיבור עם ערך באוגר A
- SBC – חיסור מהערך באוגר A
CLC מאפס את דגל ה־carry, SEC מפעיל אותו.
📈 הגדלה והקטנה
- INX / INY – הגדלת X או Y
- DEX / DEY – הקטנת X או Y
- INC / DEC – הגדלת / הקטנת ערך בזיכרון
🔀 פקודות קפיצה מותנות
- JMP – קפיצה רגילה
- BEQ / BNE – קפוץ אם תוצאה אפס / לא אפס
- BMI / BPL – קפוץ אם תוצאה שלילית / חיובית
- BCC / BCS – קפוץ לפי דגל carry
- BVC / BVS – לפי Overflow
🔁 דוגמה ללולאה
LDY #100 ; טען 100 ל-Y Loop: DEY ; הפחת 1 מ-Y BNE Loop ; חזור אם Y ≠ 0
🧠 קוד אתחול של מעבד 6502
כשמעבד נדלק – הוא לא יודע כלום. הקוד הבא מאתחל אותו:
- מכבה פסיקות (SEI), מצב עשרוני (CLD)
- מאפס את המחסנית
- מנקה את כל הדף הראשון של הזיכרון (Page Zero)
- מציב את וקטור האתחול ב־$FFFC

📋 טבלת פקודות לדוגמה (Opcodes)
Opcode | פקודה | תיאור |
---|---|---|
A9 | LDA #imm | טען ערך ל־A |
8D | STA abs | שמור את A בזיכרון |
69 | ADC #imm | חיבור עם A |
E9 | SBC #imm | חיסור מ־A |
4C | JMP abs | קפיצה מוחלטת |
D0 | BNE | קפוץ אם Zero=0 |
🔚 סיכום
הפקודות ב־6502 פשוטות אך עוצמתיות: כל פעולה – טעינה, שמירה, קפיצה – היא פקודה בת בייט אחד. המעבד מבצע את הפקודות שלב אחר שלב על בסיס טבלת Opcode.
📂 צפה בקוד המלא ב־GitHub