^00.wav^
^ ^
^01.wav^ במושגי תוכנה המעבד נמצא בלולאה אינסופית של ביצוע פקודות. ^02.wav^לפקודות אלו קוראים פקודות מכונה. ^03.wav^יש מעבדים עם פקודות מכונה באורך קבוע. ^04.wav^לדוגמא, מעבדי risc-v אורך פקודה הוא תמיד ארבעה בתים. ^05.wav^לעומת זאת במעבדי x86 פקודות יכולות להיות באורך של בית אחד ועד 15 בתים. ^06.wav^הפקודות נמצאות בזכרון העבודה.
^07.wav^איך המעבד יודע מאיפה לשלוף פקודה? ^08.wav^מוקצה לכך אוגר. ^09.wav^בדרך כלל הוא נקרא pc (ראשי תיבות של program counter). ^10.wav^אבל שמות כמו ip (ראשי תיבות שלinstruction pointer) בהחלט קיימים.
^11.wav^להלן המבנה במעבדי risc-v.
^12.wav^for (;;) {
^13.wav^ ir ← mem[pc] // fetch bytes at addresses: pc, pc+1, pc+2, pc+3
^14.wav^ Decode instruction
^15.wav^ Execute instruction
^16.wav^ pc ← pc + 4
^^}
^17.wav^יש לשים לב שב-riscv קידום ה-pc לפקודה העוקבת נעשה לאחר ביצוע הפקודה. ^18.wav^כלומר, במהלך ביצוע פקודה המספר ב-pc הוא כתובת הפקודה המבצעת.
^19.wav^ברוב המעבדים בני ימינו ה-pc מקודם ישר לאחר שליפת הפקודה מהזיכרון ולכן במהלך ביצוע פקודה המספר ב-pc הוא כתובת הפקודה העוקבת לפקודה המתבצעת. ^20.wav^כך הדבר, לדוגמא במעבדי x86.
^21.wav^כדאי לשים לב לעובדה הבאה. ^22.wav^כיון שהמעבד מבצע פקודות תמיד, אזי כשהוא מתחיל לעבוד צריך להיות בזיכרון בכתובת שמופיעה ב-pc פקודת מכונה. ^23.wav^מין הסתם צריכה להיות שם תוכנית שלמה.
^24.wav^לכן בכל מחשב שהוא יש תמיד איזשהו סוג של זכרון עבודה לא נדיף (לדוגמא rom) ^25.wav^שיכיל את התוכנית הראשונה שרצה על המחשב.