פרק 5
Transcript of פרק 5
5פרק
איסוף, קישור וטעינה
תרגום ההוראה
מושגים:
שפה עילית, שפת סף, שפת מכונה
קומפיילר , אסמבלר/תכנית איסוף .
קומפילציה, אסמבלי
תרגום ההוראה
אופרנד_מקור, אופרנד_יעד קוד_ההוראה :תווית
: תרגום קוד ההוראה1שלב
לפי טבלה מפורטת המתייחסת גם לסוגי האופרנדים
נקבע קוד פעולה יחיד .
: תרגום האופרנדים2שלב
אוגר – יתורגם לפי טבלה מספר – יירשם כמספר בינארי )גודל בית
אחד( מען - יירשם כמספר בינארי, יזוהה ע"י ][ גודל
שני בתים.תווית/מזהה – יוחלף במען שהוא מייצג
סיכום : תרגום ההוראה
בשלב הראשון מזוהים קוד ההוראה וסוג .האופרנדים הקובעים קוד פעולה יחיד
. בשלב השני מתבצע תרגום של האופרנדים
מקומה של התכנית המתורגמת בזמן התרגום
קביעת מענים לתכנית
תרגום התווית
תרגיל 5.8 158 'עמcl( באוגר 55 )1-10פתרון: התכנית שומרת את סכום המספרים
mov bl,]50h[mov cl,bl
loop1: inc bladd cl,blcmp bl, 10jbe loop1
.0 הוא 50hנניח כי תוכן מען
כיצד נתרגם תכנית זו לשפת מכונה?איך נתייחס לתווית?
נתרגם שתי ההוראות הראשונות רגיל תוך התייחסות ל"כאילו אחסון" כשנתקל בהגדרת תווית נשמור את
.מענה ובכל פעם שנתקל בה "נתרגם" אותה למען
mov bl,]50h[mov cl,bl
loop1: inc bladd cl,blcmp bl, 10jbe loop1
טבלת הסמלים
טבלת סמלים הינה מקום קבוע שבו יירשמו התוויות שמענן התגלה
5.9 תרגיל 159עמ'
שפת מכונהמונה האתריםשפת סף
mov bl,]50h[00008A 1E 0050
mov cl,bl00048A CB
loop1: inc bl0006FE C3
add cl,bl000802 CB
cmp bl, 10000A80 FB 0A
jbe loop1000D76????
תרגום התווית בהוראת קפיצה
שומרים את המען בו הוגדרה התווית בטבלת הסמלים. כשמגיעים למקום בו מופיעה התווית מחשבים על כמה בתים
צריך לדלג כדי להגיע למען הגדרת התווית.מונה אתרים - מען התווית
F =-9-6בתכנית הקודמת:
000010012=92- במשלים 9נהפוך ל
111101101
11110111F7
תרגום התווית בהוראת קפיצה
שפת מכונהמונה האתריםשפת סף
...
...
continue: dec bl000FFE CB
cmp bl,0001180 FB 00
ja continue001477
...
F9
תר' 5.10 – 5.11 162 'עמ
5.11 פתרון תר' 162עמ'
שפת מכונהההוראהמען
0000mov ch,cl8A E9
0002again: add ch,cl02 E9
0004dec blFE CB
0006cmp bl,180 FB
0008ja again76 F8
000Amov ]10[,ch88 2E
163עמ' אסמבלר שני מעברים5.2
mov ch,cl
again: cmp bl,1
je found
add ch,cl
dec bl
jmp again
found: mov ]10[,ch
טבלת מעקבZ[10]תנאיchclblההוראה
53
mov ch,cl5
again:cmp bl,1false0
je found
add ch,cl10
dec bl2
jmp again
again:cmp bl,1false0
je found
add ch,cl15
dec bl1
jmp again
again:cmp bl,1true1
je found
found:mov ]10[,ch15
מה מבצעת התכנית?
מכפלה של שני מספרים שלמים חיוביים.
?5.11מה ההבדל בינה לבין התכנית שבשאלה
mov ch,cl
again: cmp bl,1
je found
add ch,cl
dec bl
jmp again
found: mov ]10[,ch
נשים לב :
הגדרת תווית – 2בשורה ניתן לשמור המען בטבלת הסמלים
– תווית שלא 3בשורה הוגדרה , כאופרנד.
כדי לתרגם את התכנית נשפת סף לשפת מכונה יש לבצע שני מעברים.
במעבר הראשון- לקבל טבלת סמלים מליאה
במעבר השני – להחליף את התוויות בהפרשי במענים המתאימים לפי הטבלה שקיבלנו
במעבר הראשון.
אסמבלר שני מעברים
ש.ב
5.12 תר' 163עמ'
5.13 תר' 164עמ'
5.14 תר' 166עמ'
– לקרוא בעיון ולהבין 5.2.2.2 סעיף 166עמ' הדוגמה.
5.15 תר' 168עמ'
קישור וטעינה5.3
קריאות התכניתחלוקת התכנית למודולים. כל מודול נבדק בנפרד, הרצת כל
המודולים כתכנית אחת.(Linking)תהליך קישור
תהליך המתרחש לפני ההרצה. מצריך פעולות הכנה ומאפשר למודולים ל"הכיר" אחד את השני ולשתף פעולה אחד עם
השני.תהליך הכנה
הצהרה על המודולים הצהרה על המשתנים שעל המודולים להכיר אחד אצל השני.
אסמבלי(linker)תכנית הקישור
יוצרת את הקשרים בין המודולים ומאפשרת הרצת התכנית.
–EasyCPUתהליך הקישור והטעינה לא קיים ב
( loader)תכנית טעינה
תכנית שתפקידה לטעון את התכנית שלנו לזיכרון.
תכנית זו עובדת עם מערכת ההפעלה ותפקידה לאתר מקום בזיכרון מספיק גדול עבור התכנית.
את מען ההתחלה של התכנית יחסית למקטע הקוד, את אזור הנתונים ואת אורך התכנית
מקבלת תכנית הטעינה מתכנית הקישור.
את המען הראשון היא מעבירה לאוגר מקטע הקוד ועכשיו נקבעים המענים המוחלטים בזיכרון
( debugger)תכנית ניפוי
מאפשרת לזהות שגיאות זמן ריצה.
אחד מהכלים – צעד אחר צעד.