📘 פקודות אסמבלי בסיסיות

מהו אוגר (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

כשמעבד נדלק – הוא לא יודע כלום. הקוד הבא מאתחל אותו:

  1. מכבה פסיקות (SEI), מצב עשרוני (CLD)
  2. מאפס את המחסנית
  3. מנקה את כל הדף הראשון של הזיכרון (Page Zero)
  4. מציב את וקטור האתחול ב־$FFFC
קוד אתחול מעבד 6502
לחץ על התמונה כדי להגדיל – קוד אסמבלי בסיסי שמנקה זיכרון ומכין את המעבד לתוכנית.

📋 טבלת פקודות לדוגמה (Opcodes)

Opcodeפקודהתיאור
A9LDA #immטען ערך ל־A
8DSTA absשמור את A בזיכרון
69ADC #immחיבור עם A
E9SBC #immחיסור מ־A
4CJMP absקפיצה מוחלטת
D0BNEקפוץ אם Zero=0

🔚 סיכום

הפקודות ב־6502 פשוטות אך עוצמתיות: כל פעולה – טעינה, שמירה, קפיצה – היא פקודה בת בייט אחד. המעבד מבצע את הפקודות שלב אחר שלב על בסיס טבלת Opcode.

📂 צפה בקוד המלא ב־GitHub