ABA


"מישהו מוכן להסביר לי מה זה שפת מכונה?"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #14548 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 14548
moti6684

   19:28   21.01.08   
אל הפורום  
  מישהו מוכן להסביר לי מה זה שפת מכונה?  
 
   מה ההבדל בין שפת c לשפת אסמבלר

מזה שפת סף, שפת מכונה, אסמבלר, c מה כל אחד יכול לעשות ומה ההבדל ביניהם?


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  אז ככה... Phinox  21.01.08 19:50 1
     הבנתי, תודה, עוד שאלה קטנה.. moti6684 21.01.08 20:01 2
         לא הבנתי, נסה לנסח שוב... Phinox  21.01.08 20:12 3
             עזרת לי המון אם התגובה הראשונה, ולגבי השאלה.. moti6684 21.01.08 20:27 4
                 אז ככה... Phinox  21.01.08 20:33 5
                 אתה לא הבנת נכון את הנושא. idan192 21.01.08 20:37 6
                 אם נסתמך על מה שעידן אמר... Phinox  21.01.08 20:47 7
                     כן הבנתם אותי ועזרתם לי המון, תודה רבה לך! moti6684 22.01.08 08:46 8

       
Phinox 
חבר מתאריך 3.9.05
3489 הודעות
   19:50   21.01.08   
אל הפורום  
  1. אז ככה...  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 21.01.08 בשעה 20:28 בברכה, Phinox
 
בס"ד

שפת מכונה ושפת סף הם שמות די נרדפים לאותו המושג. זאת בעצם השפה הנמוכה ביותר (ועוד מעט אני אסביר גם איך ה"גובה" שלה בא לידי ביטוי) בה ניתן לכתוב תכניות בעבור מעבד מסוים.

אנחנו הרי יודעים שמעבדים עובדים (וכאן הדגש החשוב) _אך ורק_ עם הספרות 1 ו-0 (הנקראות גם, בין השאר, סיביות). כשאנו אומרים שמעבדים עובדים אך ורק עם הספרות האלו, ז"א שהם יודעים לעבד אך ורק נתונים שמגיעים אליהם כרצף של סיביות כאלו, הם יודעים להנפיק תוצאות אך ורק כרצף של סיביות כאלו, והם יודעים לקבל פקודות שבנויות אך ורק כרצף של סיביות כאלו.

מה זה בעצם אומר? זה אומר שהמעבד לא מבין את הפקודה "printf", אלא הוא מבין את הפקודה (כדוגמה) 1001010101001001. בעבר, אך ורק מתמטיקאים ואלקטרונאים בחירים ידעו לכתוב תכניות במחשב, מכיוון שאז כתבו את התכניות אך ורק כרצף של סיביות כאלו -- בלי שום מלל כמו זה שאתה רגיל לקרוא היום בתכניות. (אגב, על אדם שכותב תכנית בצורה כזאת, כקבוצה של פקודות שבנויות מרצף של סיביות, נאמר שהוא כותב תכנית ב"שפת מכונה", כי זו השפה שהמכונה מבין.)

עם הזמן, כמו כל דבר שהאדם משתמש בו, השיטה הזו של כתיבת תכניות החלה להציק (נסה לקרוא תכנית שלימה שכתובה מצירופים של הספרות 0 ו-1 ולהבין אותה, או, לא פחות גרוע, נסה לכתוב אחת כזאת ;)) ואנשים אמרו לעצמם "אוקיי, רגע... צריך פה למצוא איזה פטנט למה העסק הזה לא תופס מים..." -- ישבו וחשבו, וחשבו וישבו, ואז הגיעו למסקנה שלכתוב תכניות במלל שהם יבינו, יביא להם כמה יתרונות (העיקריים שביניהם היו שהתכניות יהיו קצרות יותר , ושהפקודות תהיינה קלות לזכירה ולהבנה).

אז הם באו והחליטו שלכל פקודה בשפת מכונה תהיינה קבוצת מילים (שאנשים יבינו) שתהווה פקודה בשפה מעט יותר "גבוהה", שתקרא "שפת סף". שפות סף נבנות בדר"כ באנאלוגיה של אחד לאחד, ז"א שבדיוק לכל פקודה בשפת מכונה תהיה _אך ורק_ פקודה אחת מקבילה בשפת סף.

מה זה אומר לגבי התכניתן? זה אומר שבמקום, נניח, לכתוב את רצף הסיביות שהצגנו לעיל, הוא יוכל לכתוב את המילה: "MOV", ובעצם גם להבין מה הפקודה עושה (מזיזה משהו ממקום למקום) וגם לחסוך בזמן כתיבת הפקודה (מה שיביא, בסופו של דבר, לכתיבת תכנית קצרה יותר ביתר מהירות.)

עם הזמן, אנשים החליטו שגם שפות סף לא מתאימות להן, אז הגיעו שפות גבוהות יותר (כדוגמת שפת C) שבעצם מביאות עמן עוד שיפורים (כגון פקודה אחת שמבצעת בשבילך סדרה של פקודות בשפת סף, האופציה להשתמש בקוד שכבר כתבת בכמה מקומות בתכנית וכו'...). שפות גבוהות יותר משפת סף, אגב, בדר"כ נמנעות מהאנאלוגיה הזאת של אחד לאחד, ופונות יותר לכיוון של אחד לשתיים, או אחד לשלוש -- וכל זאת ע"מ לעשות כמה שיותר בעבור התכניתן, כדי שזה יוכל לכתוב תכניות כמה שיותר מהר.

מה אפשר לעשות עם שפת סי שאי אפשר לעשות בשפת מכונה/סף? כלום. כמעט עם כל שפה תוכל לעשות כל דבר. אז מה ההבדל בעצם? ההבדל העיקרי הוא במהירות בה תסיים לכתוב את התוכנה, וזה בעצם ההבדל (כמעט) בין כל שפה אחת לאחרת. (כדוגמה, נסה לכתוב משחק כמו Gears of War בשפת מכונה... כשאני כבר אהיה עם נינים אתה עדיין לא תסיים לבנות את התפריט הראשי... ;) לעומת זאת, בשפת C++ עם הכלים המתאימים ועם כוח-האדם הנדרש, יקח לך בסביבות השלוש שנים..! קולט את ההבדל?! נצח לעומת שלוש שנים... ;))

ההבדל העיקרי פחות (וזאת נאמר מפאת כוח העיבוד הרב שמציעה לנו היום הטכנולוגיה) הוא השליטה שמעניקה לך כל שפה. בשפת מכונה אומנם יקח לך המון זמן לכתוב תכנית מסויימת (בהשוואה לשפת C, כדוגמה), אבל מכיוון שאתה כותב ישירות למעבד וכותב לו בפקודות הבסיסיות ביותר אותן הוא מבין, אתה בעצם מקבל עליו יותר שליטה. ככל שאתה עולה בגובה השפה (היינו, ככל שיותר דברים נעשים בעבורך) אתה בעצם מפסיד שליטה מסויימת על המעבד עצמו ועל שאר רכיבי המערכת.

עשה את ההשוואה בעצמך, שליטה מליאה במעבד וברכיבי המחשב לעומת מהירות כתיבת וסיום התכנית... ;)

אוה! שאלה יפה! כן, יש עמק השווה... איך קוראים לו? "כתיבת תכנית מעורבת". מה זה אומר? זה אומר שאתה ניהנה כאן משתי העולמות -- כשאתה לא זקוק ממש לשלוט על כל פין של המעבד, אתה יכול להשתמש בשפה גבוהה כמו שפת C, אולם כשאתה מרגיש שאתה צריך טיפה יותר שליטה, אתה יכול לכתוב בשפת סף...

מה השימושים העיקריים של כל שפה? הרוב היום משתמשים בשפת C כמעט לכל דבר. בדר"כ ע"מ לתעל (Optimize) תכנית גדולות שמשתמשות בהמון זיכרון ומבצעות המון חישובים משתמשים בשפת סף ע"מ לכתוב פונקציות בצורה יותר יעילה וע"מ לגשת ולשחק ישירות עם זיכרון המחשב וכו'... שימוש נוסף של שפת סף (למרות שלאחרונה שפת C גם משתלטת על הנישה הזאת) הוא במיקרובקרים ובכל התכנות הזה של מוצרים אלקטרוניים...

זהו, זה על רגל אחת כל ההסיטוריה וכל הסיפור... ;)

מקווה שעזרתי..!

בברכת כל טוב והצלחה רבה (!) בכל, אריה.

נ.ב: אם יש לך שאלות נוספות, מיותר לציין שת'לא צריך להתבייש... שאל חופשי, על הכסף כבר נסתדר אח"כ... ;)


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
moti6684

   20:01   21.01.08   
אל הפורום  
  2. הבנתי, תודה, עוד שאלה קטנה..  
בתגובה להודעה מספר 1
 
   מתכנתים את המעבד דרך שפה כלשהי (שפת סף, שפת c) לא משנה כרגע באיזה שפה..
נגיד וכתבתי תוכנית כלשהי באסמבלר, איך אני עושה שהתוכנית תהיה כמעבד?
איך עושים שהתוכנית שכתבתי תהיה בחלק הזה של המעבד אם כל הג'וקים, הבזרלים, איך עושים זאת?

תודה (-:


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Phinox 
חבר מתאריך 3.9.05
3489 הודעות
   20:12   21.01.08   
אל הפורום  
  3. לא הבנתי, נסה לנסח שוב...  
בתגובה להודעה מספר 2
 
   בס"ד

אתה שואל איך אתה הופך תכנית שכתבת לשפת מכונה (שפה שהמעבד כן מבין ויוכל לבצע), או שאתה שואל על מעבדים מרובי-ליבה, איך, לדוגמה, לגרום לתכנית שלך לפעול בליבה הראשונה ולא בשנייה או בשלישית?

(אגב, ערכתי את התגובה הראשונה שלי והוספתי לה קצת לקראת הסוף. ממליץ לך לקרוא... ;))

בברכת כל טוב והצלחה רבה (!) בכל, אריה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
moti6684

   20:27   21.01.08   
אל הפורום  
  4. עזרת לי המון אם התגובה הראשונה, ולגבי השאלה..  
בתגובה להודעה מספר 3
 
   השאלה שלי היא כזאת:
המעבד שיש בתוך המחשב, הוא חלק כזה שיש לו ברזלים קטנים, ג'וקים בתוך המעבד וכל מיני דברים כאלה.
אז נגיד וכתבתי תוכנית ברמה של מעבד של מחשב, איך אני הופך את התוכנית למעבד? (לחלק אם הברזלים, הג'וקים וכל החלק הזה של המעבד)?

לדוגמא:
בניתי תוכנית כלשהי, איך אני הופך את התוכנית שתהיה כזאת?
http://www.ynet.co.il/PicServer2/01082004/498919/sonoma_m.jpg

תודה רבה על העזרה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Phinox 
חבר מתאריך 3.9.05
3489 הודעות
   20:33   21.01.08   
אל הפורום  
  5. אז ככה...  
בתגובה להודעה מספר 4
 
   בס"ד

אחי -- זה לא שאתה כותב תכנית ואז המחשב שלך מרכיב לך מהתכנית הזאת מעבד..! פתח את המחשב שלך ואתה תראה ששם בפנים כבר יש מעבד מוכן -- זה אתה שמעצב את התכנית שלך שתתאים לצורה בה המעבד שלך בנוי!

המעבד שלך, בתוך תוכו, כבר מכיל ג'וקים מאוד מאוד קטנים שמחוברים בצורה מסויימת, בסדר מסויים. כשאתה כותב תכנית, אתה כותב אותה בסדר מסויים שמתאים לסדר בו בנוי המעבד שלך..!

זה לא שאתה מרכיב מעבד בשביל התכנית שלך, זה בדיוק ההיפך -- אתה מרכיב תכנית בשביל המעבד שלך..!

מקווה שהבנתי אותך נכון ושעזרתי... ;)

בברכת כל טוב והצלחה רבה (!) בכל, אריה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
idan192

   20:37   21.01.08   
אל הפורום  
  6. אתה לא הבנת נכון את הנושא.  
בתגובה להודעה מספר 4
 
   מה שאתה מציג זה מעגל חשמלי, לא מעבד.
מעבד מבוסס על פליפ פלופים. אלו ג'וקים קטנטנים שבדר"כ נמצאים במצב 0 או 1. בעזרת חישוב בינארי מסויים אתה יכול לגרום לפליפלופים לבצע חישובים מתמטיים.
זה משהו אחד, מה שאתה מציג זה שיהיה כרטיס כלשהו, לפי מה שאני מבין ממך, שתצרוב בו מידע מסויים ואח"כ תוכל להשתמש בו (כמו תוכנה צרובה). לשבבים שנמצאים על אותו כרטיס נקראים ROM-ים. Read Only Memory.
שים לב שזהו זכרון! לא מעבד! יש הבדל עצום בין השניים.

שפת האסמבלר יחודית לכל מעבד. אתה בעצם גורם למעבד לעבוד בשיתוף עם הזכרון של המחשב ובעזרתו לבצע חישובים בסיסיים.
למה זו שפת מכונה? כי אתה רושם mov 1200, 3200 אז אתה אומר שתיקח את תוכן הזכרון שב-1200 ותגזור אותו ל-3200.
ל-mov יש ערך בינארי, ששוב - יחודי נטו לאותו מעבד. נניח שהייצוג שלו זה 0110000100010 וה-1200 ו-3200 הם יצוגים גם כן בינאריים (תהפוך מעשורני לבינארי).
ברגע שהזכרון רואה "שמחפשים" בו מידע ב-0110000100010 הוא יודע שאתה מתכוון לבצע העתקה מא' ל-ב'.
באותה מידה יש עוד פקודות גם של העתקה, הוספה וכו' וכו' - שפה שלמה.

בעיניי הכי טוב שתכוון את השאלה כדי שנדע למה אתה מתכוון.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Phinox 
חבר מתאריך 3.9.05
3489 הודעות
   20:47   21.01.08   
אל הפורום  
  7. אם נסתמך על מה שעידן אמר...  
בתגובה להודעה מספר 4
 
   ערכתי לאחרונה בתאריך 21.01.08 בשעה 21:15 בברכה, Phinox
 
בס"ד

אז יש הבדל ג-ד-ו-ל בין התגובה הקודמת שלי לבין זו..!

אתה מתכוון לזה שבנית מעגל חשמלי שמכיל מעבד, כתבת בשבילו תוכנה במחשב ואתה רוצה לצרוב את התוכנה הזאת אל המעבד שנמצא במעגל החשמלי הזה? אם כן, אז זה נורא תלוי בתכנון של המעגל החשמלי עליו מדובר. לכל מעגל חשמלי יש מבנה שונה, יש כאלו שבכלל אי אפשר לצרוב את המעבדים שבהם (בצורה חוקית, כן?) כי המעגל לא בא עם פורט למען המטרה הזאת. בנוסף, זה תלוי בתוכנה בה כתבת את התוכנה אותה אתה רוצה לצרוב אל המעבד, ועוד כמה פקטורים כאלו...

אם לא לזה התכוונת, ועדיין לא הסברתי את עצמי נכון בתגובתי הקודמת, אז תסביר את עצמך יותר טוב כדי שכולנו נוכל להסביר ולהיות מוסברים... ;)

בברכת כל טוב והצלחה רבה (!) בכל, אריה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
moti6684

   08:46   22.01.08   
אל הפורום  
  8. כן הבנתם אותי ועזרתם לי המון, תודה רבה לך!  
בתגובה להודעה מספר 7
 
   תודה רבה לך ולכל מי שעזר לי כאן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net