‫פרק 5‬

‫איסוף, קישור וטעינה‬
‫תרגום ההוראה‬
                         ‫מושגים:‬
 ‫שפה עילית, שפת סף, שפת מכונה‬
 ‫קומפיילר , אסמבלר/תכנית איסוף .‬
               ‫קומפילציה, אסמבלי‬
‫תרגום ההוראה‬
‫אופרנד_מקור, אופרנד_יעד קוד_ההוראה :תווית‬
‫שלב 1: תרגום קוד ההוראה‬

‫לפי טבלה מפורטת המתייחסת גם לסוגי האופרנדים‬
                         ‫נקבע קוד פעולה יחיד .‬
‫שלב 2: תרגום האופרנדים‬
                         ‫אוגר – יתורגם לפי טבלה‬   ‫‪‬‬
   ‫מספר – יירשם כמספר בינארי )גודל בית אחד(‬       ‫‪‬‬
‫מען - יירשם כמספר בינארי, יזוהה ע"י ][ גודל שני‬   ‫‪‬‬
                                         ‫בתים.‬
           ‫תווית/מזהה – יוחלף במען שהוא מייצג‬     ‫‪‬‬
‫סיכום : תרגום ההוראה‬
‫בשלב הראשון מזוהים קוד ההוראה וסוג האופרנדים‬
                      ‫.הקובעים קוד פעולה יחיד‬
       ‫. בשלב השני מתבצע תרגום של האופרנדים‬
‫מקומה של התכנית המתורגמת בזמן‬
            ‫התרגום‬
‫קביעת מענים לתכנית‬
‫תרגום התווית‬
                     ‫עמ' 851 תרגיל 8.5‬
   ‫פתרון: התכנית שומרת את סכום המספרים 01-1 )55( באוגר ‪cl‬‬

            ‫]‪mov bl,[50h‬‬
            ‫‪mov cl,bl‬‬
‫:1‪loop‬‬      ‫‪inc bl‬‬
            ‫‪add cl,bl‬‬
            ‫01 ,‪cmp bl‬‬
            ‫1‪jbe loop‬‬
                                 ‫נניח כי תוכן מען ‪ 50h‬הוא 0.‬
‫כיצד נתרגם תכנית זו לשפת מכונה?‬
                      ‫איך נתייחס לתווית?‬
     ‫נתרגם שתי ההוראות הראשונות רגיל תוך התייחסות‬
  ‫ל"כאילו אחסון" כשנתקל בהגדרת תווית נשמור את מענה‬
             ‫.ובכל פעם שנתקל בה "נתרגם" אותה למען‬

            ‫]‪mov bl,[50h‬‬
            ‫‪mov cl,bl‬‬
‫:1‪loop‬‬      ‫‪inc bl‬‬
            ‫‪add cl,bl‬‬
            ‫01 ,‪cmp bl‬‬
            ‫1‪jbe loop‬‬
‫טבלת הסמלים‬
‫טבלת סמלים הינה מקום קבוע שבו יירשמו התוויות‬
                               ‫שמענן התגלה‬
5.9 ‫עמ' 951 תרגיל‬
    ‫שפת סף‬          ‫מונה האתרים‬     ‫שפת מכונה‬
]mov bl,[50h      0000            8A 1E 0050
mov cl,bl         0004            8A CB
loop1: inc bl     0006            FE C3
add cl,bl         0008            02 CB
cmp bl, 10        000A            FB 0A 80
jbe loop1         000D            ???? 76
‫תרגום התווית בהוראת קפיצה‬
         ‫שומרים את המען בו הוגדרה התווית בטבלת הסמלים.‬
‫כשמגיעים למקום בו מופיעה התווית מחשבים על כמה בתים צריך‬
                      ‫לדלג כדי להגיע למען הגדרת התווית.‬
               ‫מונה אתרים - מען התווית‬
                                ‫בתכנית הקודמת: 6-9-= ‪F‬‬
                                            ‫210010000=9‬
                                     ‫נהפוך ל 9- במשלים 2‬
                                               ‫01101111‬
                                                        ‫1‬
                                               ‫11101111‬
                                                       ‫7‪F‬‬
‫תרגום התווית בהוראת קפיצה‬
    ‫שפת סף‬        ‫מונה האתרים‬     ‫שפת מכונה‬
       ‫.‬                ‫.‬               ‫.‬
       ‫.‬                ‫.‬               ‫.‬
‫‪continue: dec bl 000F‬‬           ‫‪FE CB‬‬
‫0,‪cmp bl‬‬        ‫1100‬            ‫00 ‪80 FB‬‬
‫‪ja continue‬‬     ‫4100‬            ‫9‪77 F‬‬
       ‫.‬                ‫.‬               ‫.‬
‫עמ' 261 תר' 01.5 – 11.5‬
5.11 '‫עמ' 261 פתרון תר‬

 ‫מען‬         ‫ההוראה‬       ‫שפת מכונה‬
0000   mov ch,cl            8A E9
0002   again: add ch,cl     02 E9
0004   dec bl              FE CB
0006   cmp bl,1             80 FB
0008   ja again             76 F8
000A   mov [10],ch          88 2E
163 '‫עמ‬
         ‫2.5 אסמבלר שני מעברים‬
         mov ch,cl
again:   cmp bl,1
         je found
         add ch,cl
         dec bl
         jmp again
found:   mov [10],ch
‫טבלת מעקב‬
     ‫ההוראה‬         ch   cl   bl   ‫תנאי‬    [10]   Z
                         5    3
mov ch,cl            5
again:cmp bl,1                     false          0
je found
add ch,cl           10
dec bl                        2
jmp again
again:cmp bl,1                     false          0
je found
add ch,cl           15
dec bl                        1
jmp again
again:cmp bl,1                     true           1
je found
found:mov [10],ch                           15
‫מה מבצעת התכנית?‬
      ‫מכפלה של שני מספרים שלמים חיוביים.‬
‫מה ההבדל בינה לבין התכנית שבשאלה 11.5?‬
‫‪mov ch,cl‬‬
                                      ‫נשים לב :‬
‫:‪again‬‬   ‫1,‪cmp bl‬‬
                         ‫בשורה 2 הגדרת תווית –‬
         ‫‪je found‬‬      ‫ניתן לשמור המען בטבלת‬
         ‫‪add ch,cl‬‬                    ‫הסמלים‬
         ‫‪dec bl‬‬
         ‫‪jmp again‬‬         ‫בשורה 3 – תווית שלא‬
‫:‪found‬‬   ‫‪mov [10],ch‬‬        ‫הוגדרה , כאופרנד.‬
‫אסמבלר שני מעברים‬
‫כדי לתרגם את התכנית נשפת סף לשפת מכונה יש‬
                         ‫לבצע שני מעברים.‬
      ‫במעבר הראשון- לקבל טבלת סמלים מליאה‬
     ‫במעבר השני – להחליף את התוויות בהפרשי‬
‫במענים המתאימים לפי הטבלה שקיבלנו במעבר‬
                                   ‫הראשון.‬
‫ש.ב‬
                                 ‫עמ' 361 תר' 21.5‬
                                 ‫עמ' 461 תר' 31.5‬
                                 ‫עמ' 661 תר' 41.5‬
‫עמ' 661 סעיף 2.2.2.5 – לקרוא בעיון ולהבין הדוגמה.‬
                                 ‫עמ' 861 תר' 51.5‬
‫קישור וטעינה‬                          ‫3.5‬
                                               ‫קריאות התכנית‬
‫חלוקת התכנית למודולים. כל מודול נבדק בנפרד, הרצת כל המודולים‬
                                               ‫כתכנית אחת.‬
                                      ‫תהליך קישור )‪(Linking‬‬
       ‫תהליך המתרחש לפני ההרצה. מצריך פעולות הכנה ומאפשר‬
   ‫למודולים ל"הכיר" אחד את השני ולשתף פעולה אחד עם השני.‬
                                                  ‫תהליך הכנה‬
                                           ‫הצהרה על המודולים‬
        ‫הצהרה על המשתנים שעל המודולים להכיר אחד אצל השני.‬
                                                      ‫אסמבלי‬
                                       ‫תכנית הקישור )‪(linker‬‬
         ‫יוצרת את הקשרים בין המודולים ומאפשרת הרצת התכנית.‬
‫תהליך הקישור והטעינה לא קיים ב ‪– EasyCPU‬‬
‫תכנית טעינה )‪(loader‬‬
  ‫תכנית שתפקידה לטעון את התכנית שלנו לזיכרון.‬
     ‫תכנית זו עובדת עם מערכת ההפעלה ותפקידה‬
   ‫לאתר מקום בזיכרון מספיק גדול עבור התכנית.‬
‫את מען ההתחלה של התכנית יחסית למקטע הקוד,‬
      ‫את אזור הנתונים ואת אורך התכנית מקבלת‬
                  ‫תכנית הטעינה מתכנית הקישור.‬
  ‫את המען הראשון היא מעבירה לאוגר מקטע הקוד‬
        ‫ועכשיו נקבעים המענים המוחלטים בזיכרון‬
‫תכנית ניפוי)‪(debugger‬‬
    ‫מאפשרת לזהות שגיאות זמן ריצה.‬
        ‫אחד מהכלים – צעד אחר צעד.‬

פרק 5

  • 1.
  • 2.
    ‫תרגום ההוראה‬ ‫מושגים:‬ ‫שפה עילית, שפת סף, שפת מכונה‬ ‫קומפיילר , אסמבלר/תכנית איסוף .‬ ‫קומפילציה, אסמבלי‬
  • 3.
  • 4.
    ‫שלב 1: תרגוםקוד ההוראה‬ ‫לפי טבלה מפורטת המתייחסת גם לסוגי האופרנדים‬ ‫נקבע קוד פעולה יחיד .‬
  • 5.
    ‫שלב 2: תרגוםהאופרנדים‬ ‫אוגר – יתורגם לפי טבלה‬ ‫‪‬‬ ‫מספר – יירשם כמספר בינארי )גודל בית אחד(‬ ‫‪‬‬ ‫מען - יירשם כמספר בינארי, יזוהה ע"י ][ גודל שני‬ ‫‪‬‬ ‫בתים.‬ ‫תווית/מזהה – יוחלף במען שהוא מייצג‬ ‫‪‬‬
  • 6.
    ‫סיכום : תרגוםההוראה‬ ‫בשלב הראשון מזוהים קוד ההוראה וסוג האופרנדים‬ ‫.הקובעים קוד פעולה יחיד‬ ‫. בשלב השני מתבצע תרגום של האופרנדים‬
  • 7.
    ‫מקומה של התכניתהמתורגמת בזמן‬ ‫התרגום‬
  • 8.
  • 9.
    ‫תרגום התווית‬ ‫עמ' 851 תרגיל 8.5‬ ‫פתרון: התכנית שומרת את סכום המספרים 01-1 )55( באוגר ‪cl‬‬ ‫]‪mov bl,[50h‬‬ ‫‪mov cl,bl‬‬ ‫:1‪loop‬‬ ‫‪inc bl‬‬ ‫‪add cl,bl‬‬ ‫01 ,‪cmp bl‬‬ ‫1‪jbe loop‬‬ ‫נניח כי תוכן מען ‪ 50h‬הוא 0.‬
  • 10.
    ‫כיצד נתרגם תכניתזו לשפת מכונה?‬ ‫איך נתייחס לתווית?‬ ‫נתרגם שתי ההוראות הראשונות רגיל תוך התייחסות‬ ‫ל"כאילו אחסון" כשנתקל בהגדרת תווית נשמור את מענה‬ ‫.ובכל פעם שנתקל בה "נתרגם" אותה למען‬ ‫]‪mov bl,[50h‬‬ ‫‪mov cl,bl‬‬ ‫:1‪loop‬‬ ‫‪inc bl‬‬ ‫‪add cl,bl‬‬ ‫01 ,‪cmp bl‬‬ ‫1‪jbe loop‬‬
  • 11.
    ‫טבלת הסמלים‬ ‫טבלת סמליםהינה מקום קבוע שבו יירשמו התוויות‬ ‫שמענן התגלה‬
  • 12.
    5.9 ‫עמ' 951תרגיל‬ ‫שפת סף‬ ‫מונה האתרים‬ ‫שפת מכונה‬ ]mov bl,[50h 0000 8A 1E 0050 mov cl,bl 0004 8A CB loop1: inc bl 0006 FE C3 add cl,bl 0008 02 CB cmp bl, 10 000A FB 0A 80 jbe loop1 000D ???? 76
  • 13.
    ‫תרגום התווית בהוראתקפיצה‬ ‫שומרים את המען בו הוגדרה התווית בטבלת הסמלים.‬ ‫כשמגיעים למקום בו מופיעה התווית מחשבים על כמה בתים צריך‬ ‫לדלג כדי להגיע למען הגדרת התווית.‬ ‫מונה אתרים - מען התווית‬ ‫בתכנית הקודמת: 6-9-= ‪F‬‬ ‫210010000=9‬ ‫נהפוך ל 9- במשלים 2‬ ‫01101111‬ ‫1‬ ‫11101111‬ ‫7‪F‬‬
  • 14.
    ‫תרגום התווית בהוראתקפיצה‬ ‫שפת סף‬ ‫מונה האתרים‬ ‫שפת מכונה‬ ‫.‬ ‫.‬ ‫.‬ ‫.‬ ‫.‬ ‫.‬ ‫‪continue: dec bl 000F‬‬ ‫‪FE CB‬‬ ‫0,‪cmp bl‬‬ ‫1100‬ ‫00 ‪80 FB‬‬ ‫‪ja continue‬‬ ‫4100‬ ‫9‪77 F‬‬ ‫.‬ ‫.‬ ‫.‬
  • 15.
    ‫עמ' 261 תר'01.5 – 11.5‬
  • 16.
    5.11 '‫עמ' 261פתרון תר‬ ‫מען‬ ‫ההוראה‬ ‫שפת מכונה‬ 0000 mov ch,cl 8A E9 0002 again: add ch,cl 02 E9 0004 dec bl FE CB 0006 cmp bl,1 80 FB 0008 ja again 76 F8 000A mov [10],ch 88 2E
  • 17.
    163 '‫עמ‬ ‫2.5 אסמבלר שני מעברים‬ mov ch,cl again: cmp bl,1 je found add ch,cl dec bl jmp again found: mov [10],ch
  • 18.
    ‫טבלת מעקב‬ ‫ההוראה‬ ch cl bl ‫תנאי‬ [10] Z 5 3 mov ch,cl 5 again:cmp bl,1 false 0 je found add ch,cl 10 dec bl 2 jmp again again:cmp bl,1 false 0 je found add ch,cl 15 dec bl 1 jmp again again:cmp bl,1 true 1 je found found:mov [10],ch 15
  • 19.
    ‫מה מבצעת התכנית?‬ ‫מכפלה של שני מספרים שלמים חיוביים.‬ ‫מה ההבדל בינה לבין התכנית שבשאלה 11.5?‬
  • 20.
    ‫‪mov ch,cl‬‬ ‫נשים לב :‬ ‫:‪again‬‬ ‫1,‪cmp bl‬‬ ‫בשורה 2 הגדרת תווית –‬ ‫‪je found‬‬ ‫ניתן לשמור המען בטבלת‬ ‫‪add ch,cl‬‬ ‫הסמלים‬ ‫‪dec bl‬‬ ‫‪jmp again‬‬ ‫בשורה 3 – תווית שלא‬ ‫:‪found‬‬ ‫‪mov [10],ch‬‬ ‫הוגדרה , כאופרנד.‬
  • 21.
    ‫אסמבלר שני מעברים‬ ‫כדילתרגם את התכנית נשפת סף לשפת מכונה יש‬ ‫לבצע שני מעברים.‬ ‫במעבר הראשון- לקבל טבלת סמלים מליאה‬ ‫במעבר השני – להחליף את התוויות בהפרשי‬ ‫במענים המתאימים לפי הטבלה שקיבלנו במעבר‬ ‫הראשון.‬
  • 22.
    ‫ש.ב‬ ‫עמ' 361 תר' 21.5‬ ‫עמ' 461 תר' 31.5‬ ‫עמ' 661 תר' 41.5‬ ‫עמ' 661 סעיף 2.2.2.5 – לקרוא בעיון ולהבין הדוגמה.‬ ‫עמ' 861 תר' 51.5‬
  • 23.
    ‫קישור וטעינה‬ ‫3.5‬ ‫קריאות התכנית‬ ‫חלוקת התכנית למודולים. כל מודול נבדק בנפרד, הרצת כל המודולים‬ ‫כתכנית אחת.‬ ‫תהליך קישור )‪(Linking‬‬ ‫תהליך המתרחש לפני ההרצה. מצריך פעולות הכנה ומאפשר‬ ‫למודולים ל"הכיר" אחד את השני ולשתף פעולה אחד עם השני.‬ ‫תהליך הכנה‬ ‫הצהרה על המודולים‬ ‫הצהרה על המשתנים שעל המודולים להכיר אחד אצל השני.‬ ‫אסמבלי‬ ‫תכנית הקישור )‪(linker‬‬ ‫יוצרת את הקשרים בין המודולים ומאפשרת הרצת התכנית.‬
  • 24.
    ‫תהליך הקישור והטעינהלא קיים ב ‪– EasyCPU‬‬
  • 25.
    ‫תכנית טעינה )‪(loader‬‬ ‫תכנית שתפקידה לטעון את התכנית שלנו לזיכרון.‬ ‫תכנית זו עובדת עם מערכת ההפעלה ותפקידה‬ ‫לאתר מקום בזיכרון מספיק גדול עבור התכנית.‬ ‫את מען ההתחלה של התכנית יחסית למקטע הקוד,‬ ‫את אזור הנתונים ואת אורך התכנית מקבלת‬ ‫תכנית הטעינה מתכנית הקישור.‬ ‫את המען הראשון היא מעבירה לאוגר מקטע הקוד‬ ‫ועכשיו נקבעים המענים המוחלטים בזיכרון‬
  • 26.
    ‫תכנית ניפוי)‪(debugger‬‬ ‫מאפשרת לזהות שגיאות זמן ריצה.‬ ‫אחד מהכלים – צעד אחר צעד.‬