שפת מכונה – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
אין תקציר עריכה
אין תקציר עריכה
שורה 1:
'''שפת מכונה''' היא אוסף של הוראות המובן בצורה ישירה (ללא כל תרגום) על ידי ה[[מעבד]] של ה[[מחשב]], ומבוצע על-ידיו בעת פעולת המחשב.
 
[[פקודה (מחשב)|הוראות]] (פקודות) שפת המכונה מוצגותהן כרצףרצף של [[סיבית|סיביות]]. שנקראלסיבית קודשני [[קובץמצבים בינארי|בינארי]],אפשריים (כלומרועל רצףכן שלערכה מיוצג באמצעות הספרות אפס ואחת). כך למשל, ש[[בןרצף אדם|בניהסיביות אדם]]10001001110110000000000111010000 מתקשיםהוא להבינו.פקודה למשל,בשפת הרצףהמכונה 10001001110110000000000111010000של מורהמעבדים מסדרת ל[[מעבדx86]] מסדרת x86 של [[אינטל]] המורה למעבד לחבר את המספרים המאוחסנים בשניים מה[[אוגר (מחשבים)|אוגרים]] הפנימיים של המעבד הנקראים BX ו-DX ולהציב את הסיכום באוגר AX.
 
בשל הקושי של [[בן אדם|בני אדם]] לפענח ולזכור את משמעותם של רצפים ארוכים של סיביות, יצירת תוכניות שימושיות בשפת מכונה כמעט ואינה מעשית. לצורך כך נוצר ייצוג של כל פקודה בשפת מכונה בעזרת רצף תווים נהיר יותר, בדרך כלל רצף אותיות היוצר מילה שמשמעותה מרמזת על הפקודה בשפת מכונה שאותה היא מייצגת. ייצוג כזה נקרא [[שפת סף]] (Assembly) והוא הקרוב ביותר לשפת המכונה. [[אסמבלר]] הוא [[מהדר]] המתרגם פקודות משפת סף אל שפת מכונה על מנת שיהיה ניתן להריצן על ידי מעבד. [[תכנות]] בשפת מכונה או בשפת סף נקרא [[תכנות low-level]] ובראשית ימי המחשוב התכנות נעשה בצורה זו. החל מ[[שנות ה-50 של המאה ה-20]] החלו ליצור [[שפת תכנות|שפות תכנות]] היוצרות אבסטרקציה גבוהה יותר, זאת באמצעות פקודות הדומות יותר לשפת בני אדם וניתוק הקשר בין פקודה יחידה בשפת מכונה לפקודה יחידה בשפת התכנות, כך שפקודה אחת בשפת התכנות עשוייה להיות מתורגמת בזמן ה[[הידור]] לרצף פקודות בשפת מכונה. שפות כאלו נקראות [[שפת תכנות עילית|שפות תכנות עיליות]] ועיקר התכנות כיום מתבצע בעזרתן.
כל הוראה בשפת המכונה מורה למעבד לבצע פעולה מסוימת. פעולת המחשב היא ביצוע סדרתי של ההוראות הנמצאות ב[[זיכרון מחשב|זיכרון]]. סדר הביצוע עשוי להשתנות על ידי הוראת הסתעפות למעבד ובאופן מוחלט או מותנה, להמשיך את ביצוע הוראות שפת המכונה מכתובת אחרת בזיכרון.
 
לכלמעבדים מדגמים שונים נבדלים בפקודות שכל אחד מהם יכול לבצע. הפקודות שיודע לבצע מעבד ישמושפעות שפתבין היתר מאופן מימושו הפיזי, למשל מכמות האוגרים שהוא מכיל ומגודלם. אוסף ההוראות בשפת מכונה (אושמעבד מסוים מסוגל לבצע ואופן ייצוגן הבינארי נקרא [[סט פקודות]]). גם אם שני מעבדים יודעים לבצע פקודה משלומסוימת, שהיארצף המאפייןהסיביות החשובהמייצג ביותראת הפקודה עשוי להיות שונה בסט הפקודות של מעבדכל זה.אחד למעשה,מהם. שני מעבדים שקולים זה לזה מבחינה [[פונקציה|פונקציונלית]] כאשר יש להם אותה שפת מכונה, ללא תלות באופן המימוש ה[[אלקטרוניקה|אלקטרוני]] של [[שפה]] זו. בשל השוני בסט פקודות של מעבדים שונים, [[תוכנית מחשב]] בשפת מכונה של מעבד אחד לא יכולה להיות מבוצעת על ידי מעבד עם שפת מכונה שונה. תכנות בשפת תכנות עילית מצמצם קושי זה: אין צורך לכתוב את התוכנית לכל מעבד בנפרד בשפת המכונה שלו, אך יש צורך בהידור הקוד מהשפה העילית לשפת המכונה של כל מעבד. בעת יצירת דור חדש של מעבד, משתדל היצרן שהמעבדשסט החדשהפקודות ידעשל לבצעהמעבד החדש יכיל את שפתכל המכונהסט הפקודות של המעבד הקודם ("[[תאימות לאחור]]"), כדי לאפשר הפעלה של [[תוכנה|תוכנות]] שפותחו או [[מהדר|הודרו]] עבור המעבד הקודם גם באמצעות המעבד החדש.
 
בעשרות ה[[שנה|שנים]] הראשונות לקיום המחשב המגמה הייתה להרחיב את אוצר ההוראות של המעבד, כך שניתן יהיה לבצע פעולות מורכבות יותר באמצעות הוראה בודדת. מעבדים בעלי אוצר הוראות מורחב מכונים מעבדי [[CISC]] (כלומר: Complex Instruction Set Computer). למגמה זו היה יתרון בולט בעת [[תכנות]] ב[[שפתבשפת סף]], אך בעת המעבר לתכנות ב[[שפה עילית|שפותבשפות עיליות]] יתרון זה מתגמד. {{מקור}}
במעבדים מסוימים לכל ההוראות בשפת המכונה אורך אחיד, ובאחרים קיימות הוראות באורכים אחדים (לפי קוד ההוראה יודע המעבד את אורכה).
 
מניתוח כמותי של התפלגות הפקודות הנוצרות על ידי המהדרים, בין אם בשל מבנה המהדר ובין אם בשל נוהגי כתיבת התוכנה, נמצא כי רפרטואר הפקודות של המעבד אינו מנוצל, וכי במרבית המקרים (כ־80 אחוז) מנוצל אך מעט (כ־20 אחוז) מרפרטואר הפקודות של המעבד. כתוצאה מכך חל מהפך מחשבתי בכל הנוגע לעיצוב ארכיטקטורת המעבד הרצויה, אשר הוביל לפיתוח מעבד בעל [[מספר]] הוראות מצומצם ([[RISC]] - Reduced Instruction Set Computer). מספר ההוראות המצומצם, הביא להקטנת שטח הפיסה, להגברת יעילות המיתוג הפנימי ול[[מהירות]] ביצוע גבוהה מאוד של כל הוראה, כך שבמבחני השוואת ביצועים, ובעיקר במבחני יחס תועלת, עשויים ביצועיו של מעבד זה להיות טובים מאלה של מעבד בעל מספר הוראות רב. כיום הבדל זה זניח כי מצד אחד גם מעבדי CISC ממירים את הפקודות לפקודות מיקרוקוד פשוטות ומצד שני התגלה כי היתרון מבחינת התכנון של המעבד של RISC איננו משמעותי (את רוב התוצאות החיוביות ניתן לממש גם ב־CISC), כתוצאה מכך ההבדל המעשי בין שני הסוגים נעלם כמעט לחלוטין. {{מקור}}
יצירת תוכניות שימושיות בשפת מכונה כמעט ואינה מעשית. בדרך כלל נכתבות התוכניות ב[[שפת תכנות]] כלשהי, והן מתורגמות לשפת מכונה על ידי תוכנית [[תרגום]] הנקראת [[מהדר]]. שפת התכנות הקרובה ביותר לשפת המכונה נקראת [[שפת סף]] (Assembly), והמהדר שלה הוא ה[[אסמבלר]].
 
במעבדיםבמעבדי מסוימיםRISC לכל ההוראות בשפת המכונה אורך אחיד, ובאחריםואילו במעבדי CISC קיימות הוראות באורכים אחדים (לפי קוד ההוראה יודע המעבד את אורכה).
בעשרות ה[[שנה|שנים]] הראשונות לקיום המחשב המגמה הייתה להרחיב את אוצר ההוראות של המעבד, כך שניתן יהיה לבצע פעולות מורכבות יותר באמצעות הוראה בודדת. מעבדים בעלי אוצר הוראות מורחב מכונים מעבדי [[CISC]] (כלומר: Complex Instruction Set Computer). למגמה זו היה יתרון בולט בעת [[תכנות]] ב[[שפת סף]], אך בעת המעבר לתכנות ב[[שפה עילית|שפות עיליות]] יתרון זה מתגמד. {{מקור}}
 
מניתוח כמותי של התפלגות הפקודות הנוצרות על ידי המהדרים, בין אם בשל מבנה המהדר ובין אם בשל נוהגי כתיבת התוכנה, נמצא כי רפרטואר הפקודות של המעבד אינו מנוצל, וכי במרבית המקרים (כ־80 אחוז) מנוצל אך מעט (כ־20 אחוז) מרפרטואר הפקודות של המעבד. כתוצאה מכך חל מהפך מחשבתי בכל הנוגע לעיצוב ארכיטקטורת המעבד הרצויה, אשר הוביל לפיתוח מעבד בעל [[מספר]] הוראות מצומצם ([[RISC]] - Reduced Instruction Set Computer). מספר ההוראות המצומצם, הביא להקטנת שטח הפיסה, להגברת יעילות המיתוג הפנימי ול[[מהירות]] ביצוע גבוהה מאוד של כל הוראה, כך שבמבחני השוואת ביצועים, ובעיקר במבחני יחס תועלת, עשויים ביצועיו של מעבד זה להיות טובים מאלה של מעבד בעל מספר הוראות רב. כיום הבדל זה זניח כי מצד אחד גם מעבדי CISC ממירים את הפקודות לפקודות מיקרוקוד פשוטות ומצד שני התגלה כי היתרון מבחינת התכנון של המעבד של RISC איננו משמעותי (את רוב התוצאות החיוביות ניתן לממש גם ב־CISC), כתוצאה מכך ההבדל המעשי בין שני הסוגים נעלם כמעט לחלוטין. {{מקור}}
 
==ראו גם==