כל מעבד מתוכנן מהיסוד כדי לתמוך בערכת הוראות מסוימת. ערכת הוראות היא קבוצה של פעולות בקוד קשיח שה-CPU יכול לבצע. פעולות אלו יכולות להיות, למשל, חיבור של שני מספרים יחד, קפיצה לחלק אחר של התוכנית, או השוואה בין שני ערכים. כל פעולה שמחשב יכול לבצע מיוצגת באופן ייחודי על ידי opcode.
Opcodes
בעת ביצוע תוכנית, ה-CPU משתמש במונה תוכניות כדי לעקוב אחר איזו הוראה יש לבצע לאחר מכן. כאשר מתקבלת הוראה, מונה התוכנית מוגדל באורך ההוראה כך שיצביע על תחילת ההוראה הבאה. כל הוראה מורכבת מאופקוד. בהתאם להוראה, הוא עשוי לכלול אופרנדים או לא. אופרנדים עשויים להיות ערך קבוע או מצביע למיקום של ערך באוגר ה-CPU או ב-RAM של המערכת.
לאחר שליפת ההוראה המלאה, יש לפענח אותה. זהו התהליך שבו ה-CPU מפריד בין ה-opcode לבין כל האופרנדים. ה-opcode המפוענח משמש כדי להפעיל או להשבית מסלולים חשמליים ספציפיים במעבד שיביאו לפעולה נכונה.
לאחר פענוח ההוראה, היא תבוצע. ההתנהגות המדויקת של המעבד תלויה בפעולה. פעולת חיבור תסכם שני ערכים ביחד. פעולת קפיצה תחשב לאן בתוכנית לקפוץ. פעולת השוואה תשווה בין שני ערכים. פעולת NOP תעמוד בטלה, מכיוון ש-NOP מייצג No Operation.
רוב ההוראות יוציאו את תוצאת הפעולה. פלט זה יכול לעבור לאוגרי המעבד, ובמידת הצורך, ל-RAM של המערכת. כל אחת מהפעולות הללו לוקחת מחזור שעון בודד כדי להשלים.
קודים לא חוקיים
לכל ארכיטקטורת CPU יש את הרשימה הספציפית שלה של קודים שפורסמו על ידי היצרן. הערכים של קודים אלה אינם בהכרח אותם פלטפורמות חוצות, וזו הסיבה שיש צורך להרכיב תוכנה עבור ארכיטקטורות שונות. במקרים מסוימים, היצרן כולל גם קודים לא מתועדים. אלה מכונים "קודים לא חוקיים". קודים לא חוקיים, למרות שהם לא מתועדים, יבצעו את אותה פונקציה בכל פעם שהם נקראים. עם זאת, כתכונות לא מתועדות ולא סטנדרטיות, עדכונים לארכיטקטורת ה-CPU יכולים פשוט להסיר אותם.
כמה משחקי מחשב מוקדמים ב-Apple II הסתמכו על קודים לא חוקיים ספציפיים. לאחר מכן הם סבלו מבעיות ביצועים ויציבות בגרסה המאוחרת של Apple IIc CPU, שכן ה-IIc הסיר את הקודים הלא חוקיים שהמשחקים נדרשו. קודים לא חוקיים שימשו גם בחוגי הגנת זכויות יוצרים כשיטת אבטחה באמצעות ערפול במאבקם נגד פיראטים שמפצחים את תוכנם. כמה קודים לא חוקיים נועדו פשוט ככלי ניפוי באגים ומטפלי שגיאות.
ערכת ההוראות של x86 מכילה מספר רב של קודים לא חוקיים לא מתועדים. מעניין שחלק מאלה משותפים בין מעבדי אינטל ו-AMD, מה שמעיד על כך ששתי החברות מודעות פומביות למטרה שלהן כשהן לא מתועדות.
מהדרים והרכבה
רוב התוכניות כתובות בשפות ברמה גבוהה. אלה קלים יחסית לקריאה, לעתים קרובות משתמשים במילים באנגלית או בקיצור כדי למזער את עקומות הלמידה. כדי שמחשב יפעיל את התוכניות הללו, יש צורך להדר אותן. מהדר הוא בעצם מתרגם. הוא לוקח את הקוד ברמה גבוהה וממיר אותו לקוד מחשב, ההוראות שהמעבד יכול להבין.
ניתן גם, בשפות מסוימות, להריץ קוד לא הידור באמצעות תוכנית שהורכבה בעבר, שיוצרת קוד מכונה תוך כדי תנועה. Assembly היא שפת תכנות ברמה נמוכה המשתמשת בקיצור כדי לאפשר למפתחים נראות ושליטה ישירה על הפעולות שבוצעו. NOP הוא דוגמה לקיצור של הרכבה.
סיכום
ערכת הוראות היא רשימה של פונקציות רשמיות שארכיטקטורת CPU יכולה להפעיל. זוהי רשימה של פעולות שניתן לבצע. פעולות אלו מקודדות ב-CPU ונקראות באמצעות ה-opcodes בהתאמה.
תוכנה בדרך כלל משתמשת במהדר כדי לתרגם מקוד ברמה גבוהה הניתן לקריאה על ידי אדם לקוד המכונה שה-CPU יכול לקרוא. לפעמים, לארכיטקטורת CPU יכולים להיות קודים לא מתועדים, הנקראים קודים לא חוקיים. קודים לא חוקיים הם מבחינה טכנית חלק ממערך ההוראות. עם זאת, ייתכן שהם לא יהיו זמינים באופן אמין באיטרציות פלטפורמה עתידיות. אל תשכח להשאיר את המחשבות שלך בתגובות למטה.