שפת אסמבלי ושיטות כתובת
הוצג| English | משמעות |
|---|---|
| assembler/əˈsemblə/ | אסמבלר |
| mnemonic/nɪˈmɒnɪk/ | סימן קיצור |
| instruction set/ɪnˈstrʌkʃn set/ | סט פקודות |
| machine code/məˈʃiːn kəʊd/ | קוד מכונה |
| assembly language/əˈsemblɪ ˈlæŋɡwɪdʒ/ | שפת אסמבלר |
| operand/ˈɒpərænd/ | אופרנד |
| opcode/ˈɒpkəʊd/ | אוקוד (opcode) |
| symbol table/ˈsɪmbl ˈteɪbl/ | טבלת סמלים |
| label/ˈleɪbl/ | תווית |
| forward references/ˈfɔːwəd ˈrefrənsɪz/ | הפניות קדימות |
| addressing mode/əˈdresɪŋ məʊd/ | מצב כתובת |
| immediate addressing/ɪˈmiːdɪət əˈdresɪŋ/ | כתובת מידית |
| direct addressing/daɪˈrekt əˈdresɪŋ/ | כתובת ישירה |
| indirect addressing/ɪndaɪˈrekt əˈdresɪŋ/ | כתובת עקיפה |
| indexed addressing/ˈɪndekst əˈdresɪŋ/ | כתובת אינדקסית |
| relative addressing/ˈrelətɪv əˈdresɪŋ/ | כתובת יחסית |
שלושים-אחד הוראות בשורה של מתגים
- בשנת 1949 מחשב EDSAC בקמbridge החל לפעול מ-31 הוראות שהוגדרו על מתגים, שנכתבו על ידי David Wheeler ונקראו "ההוראות ההתחלתיות".
- משימתם הכוללת הייתה לקרוא אותות כמו A ו-S מפס נייר ולהמיר אותם למספרים שהמכונה באמת הבינה: ה-assembler הראשון.
- מאז, מתכנתים כותבים קיצורים (mnemonics) במקום דפוסי ביטים, ומערך ההוראות של המבחן עצמו הוא צאצא ישיר.
- שיעור זה עוסק בהמרה זו, בתרגול ידני של תוכנית ובחמישה האפשרויות בהן הוראה יכולה לציין את מקום הנתונים שלה.
קוד מכונה ושפת אסמבלר
- המעבד מפעיל קוד מכונה: דפוסי ביטים, ספציפיים לארכיטקטורה אחת, כאשר כל אחד מהם הוא הוראה ואופרנד.
- שפת אסמבלר היא הצורה הקריאה. כל הוראה נכתבת עם מונונימי כמו
LDD,ADDאוJMP, וכל הוראת אסמבלר הופכת להוראת קוד מכונה בדיוק אחת. - ה-אסמבלר מתרגם אותו. הקשר הוא יחס של אחד לאחד, והדבר הוא מה שמבדיל את האסמבלר משפת תכנות ברמה גבוהה, שבה הוראה אחת הופכת למספר הוראות.

כל מונונימי הופך להוראה; כל כתובת סימולית הופכת למספר
שפת אסמבלי היא:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
אסמבלי משתמש במנוניקים ומתאימה אותם באופן חד-ל-חד לקוד מכונה; אסמבלר מתרגם אותו.
האסמבלר דו-מעברי
- מעבר 1 קורא את המקור ובונה טבלת סימנים: בכל פעם שמופיע תווית כמו
LOOP:, כתובתה נרשמת. אין תוצרת קוד. - מעבר 2 קורא שוב את המקור ומייצר קוד, על ידי החלפת כל מונומני (mnemonic) ב-אוקוד (opcode) והחלפת כל כתובת סמלית במספר מטבלת הסימנים.
- נדרשים שני מעברים בגלל הפניות קדימות:
JMP LOOPעשוי להופיע לפני שהשורהLOOP:נראתה, ולכן הכתובת שלו אינה ידועה במעבר הראשון.
מה עושה מעבר 1 של מאסמבלר דו-שלבתי?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
מעבר 1 מקליט היכן נמצאת כל תווית (בטבלת הסמלים); לאחר מכן, מעבר 2 יוצר קוד ומשתמש בטבלה זו לפתרון התייחסויות לתוויות.
סדר את עבודת האסימבלר דו-מעברי.
Difficulty 3/5 · 200 coins + a small bonus on first completion today
מעבר 1 מזהה תחילה את כל התוויות, כדי שמעבר 2 יוכל לפתור גם קפיצה לתווית שהוגדרה אחר כך.
מדוע לאסימבלer נדרשים שני מעברים?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ייתכן שקפיצה מכוונת לתווית המופיעה מאוחר יותר במקור; מעבר 1 מזהה תחילה את כל התוויות כדי שמעבר 2 יוכל לפתור אותן.
דוגמה פותרת: יישום השני מעברים
- התוכנית מתחילה בכתובת 100.
100 LDD COUNT
101 LOOP: DEC ACC
102 CMP #0
103 JPN LOOP
104 END
105 COUNT: 5
- מעבר 1 סופר את כתובת כל שורה ומרשם את התוויות:
LOOP= 101,COUNT= 105. דבר אחר לא נכתב. - מעבר 2 מתרגם שורה אחר שורה.
LDD COUNTהופך לאוקוד עבורLDDעם אופרנד (operand) 105;JPN LOOPהופך לאוקוד עבורJPNעם אופרנד 101. ללא מעבר 1, לא היה ניתן לתרגם את השורה הראשונה.
כיצה פונקציונליות של אסמבלר דו-מעברי
עבור עליו. המאסמבלר קורא את הקוד שלך פעמיים: מעבר 1 מזהה רק היכן נמצא כל תווית, כך שמעבר 2 יכול למלא את הכתובות — וכך מתקיים קפיצה לתווית שהוגדרה אוחר יותר.
בדוגמה המפורטת, מעבר 1 מקליט את התווית LOOP עם הכתובת ____ בטבלת הסמלים.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
התוכנית מתחילה ב-100, ולכן השורה השנייה, LOOP: DEC ACC, תופסת את 101. COUNT, בשורה השישית, הוא ב-105.
סט ההוראות
- סט ההוראות של קמבריד'ג כולל רגיסטר שימוש כללי אחד, האקומולטור ACC, ורגיסטר אינדקס IX. אופרנד
#nהוא עשרוני,Bnבינארי,&nהנדקסימלי, ו-<address>מספר מיקום או תווית. - העברת נתונים:
LDM #n,LDD <address>,LDI <address>,LDX <address>,LDR #n,MOV IX,STO <address>. כניסה ויציאה:IN,OUT. - חישובים:
ADD,SUB,INC,DEC. השוואה:CMP,CMI. קפיצות:JMPללא תנאי,JPEו-JPNבתנאי. עיבוד ביטים:AND,OR,XOR,LSL,LSR. לאחר מכןEND. - "ההוראות מקובעות": נקוב את הקבוצות ותן הוראה אחת מכל קבוצה.
איזה מאללה הם קבוצות במ Set ההוראות? סמן את כולן החלות.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
העברת נתונים, כניסה/יציאה, אריתמטיקה, השוואה, קפיצות תנאי和不 תנאי, ועיבוד ביטים. טבלאות מחשב הן תוכנת יישום, רחוקה מפני זה.
דוגמה פותרת: מעקב אחר תוכנית
- צייר טבלה עם עמודה עבור ה-ACC ועבור כל מיקום בזיכרון שהתוכנית משתמש בה, ואז עדכן אותה שורה בשורה עד
END.
100 LDM #0
101 STO TOTAL
102 LDD TOTAL
103 ADD #5
104 STO TOTAL
105 LDD COUNT
106 DEC ACC
107 STO COUNT
108 CMP #0
109 JPN 102
110 END
111 TOTAL: 0
112 COUNT: 3
- מעבר 1 של הלולאה: ACC 0 → 5 (TOTAL = 5), COUNT 3 → 2, השוואה אי-שוויון, קפיצה. מעבר 2: TOTAL = 10, COUNT = 1, קפיצה. מעבר 3: TOTAL = 15, COUNT = 0, השוואה שוויון, ללא קפיצה,
END. - ערכים סופיים: TOTAL = 15, COUNT = 0, ACC = 0. כתוב שורה חדשה רק כאשר ערך משתנה, ולא תפספס לעולם את ההשוואה.
בתוכנית המעקב, מהי ערך TOTAL כאשר END מושג?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
הלולאה מוסיפה 5 ל-TOTAL פעם אחת בכל אחד משלושת המחזוריים: 5, 10, 15.
מצבי כתובות
- מצב הכתובת מציין כיצד המעבד מזהה את הארגומנט.
| מצב | מקום הארגומנט | דוגמה |
|---|---|---|
| כתובת מיידית | הערך נמצא בתוך ההוראה עצמה | LDM #10 מטעין 10 |
| כתובת ישירה | ההוראה מכילה כתובת; השתמש בערך מאוחסן שם | LDD 200 מטעין את תוכן המקום 200 |
| כתובת עקיפה | הכתובת מכילה כתובת אחרת, שהיא מכילה את הנתונים | LDI 200 |
| כתובת אינדקסית | כתובת אפקטיבית = הכתובת הנתונה + רשמת האינדקס | LDX 200 עם IX |
| כתובת יחסית | הכתובת היא סטייה מההוראה הנוכחית | קפיצות |

אותו שדה ארגומנט, ארבע משמעויות שונות
בהיפנה מידית (למשל LDM #10), הארגומנט הוא:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
היפנה מידית משתמשת בערך המפורש בהוראה (כאן, 10).
התאם כל שיטת היפנה למשמעות שלה.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
מיידית = ערך; ישירה = כתובת הערך; עקיפה = כתובת של כתובת; מסופרת = מכפיל בסיס + אינדקס.
דוגמה פותרת: ארגומנט אחד, ארבע תשובות
- זיכרון: המקום 200 מכיל 300, המקום 300 מכיל 7, המקום 202 מכיל 9. רשמת האינדקס IX מכילה 2.
LDM #200מכניס 200 ל-ACC: מידי, המספר עצמו.LDD 200מכניס 300 ל-ACC: ישיר, תוכן המקום 200.LDI 200מכניס 7 ל-ACC: עקיף, תוכן הכתובת שנמצאת ב-200.LDX 200מחבר IX ל-200 וטוען את תוכן המקום 202: 9. אותו ארגומנט נכתב בארבע דרכים, ארבע ערכים שונים.
מדוע קיים כתובת אינדקסית
- מערך הוא רצף של מקומות עוקבים.
LDX 200עם IX = 0, 1, 2, … קורא אלמנטים 0, 1, 2, … ללא שינוי בהוראה. - תבנית הלולאה:
LDR #0לאפס את האינדקס,LDX ARRAYלהוצאת אלמנט, לבצע פעולה,INC IX, השוואה לאורך,JPNחזרה. - הכיפוי הישיר דורש הוראה נפרדת לכל אלמנט; הכיפוי הממוספר דורש הוראה אחת.
כתובות מסופרות מועילות ביותר עבור:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
הכתובת האפקטיבית היא מכפיל בסיס + רשם אינדקס, ולכן הגדלת האינדקס מאפשרת מעבר בארגז.
השוואה וקפיצה
CMP #nאוCMP <address>משווים את ACC לערך ומגדירים את הדגל. הם לא משנים את ה-ACC.JPE <address>מקפיץ אם ההשוואה האחרונה מצאה ששני הערכים שווים;JPN <address>מקפיץ אם הם לא היו שווים;JMP <address>תמיד מקפיץ.- פקודת
IFבשפת גבוהה הופכת לפקודתCMPשאחריה קפיצה מותנית; לולאה הופכת להשוואה וקפיצה חזרה לתווית.
CMP #0 משנה את הערך המוחזק במצטבר.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
השוואה שומרת רק את הסימן שהקפיצה התנודתית הבאה תקרא. המצטבר אינו משתנה, ולכן המעקב אינו מראה ערך מצטבר חדש בשורת CMP.
סימונים נופלים מהיד
LDM #10מטעין את המספר 10;LDD 10מטעין את תוכן המקום 10. ה-#הוא ההבדל כולו.#הוא עשרוני,Bהוא בינארי,&הוא אקסא-decimal. ה-AND &0Fוה-AND B00001111הם אותו מסכה; ה-AND #15גם כן.CMPמשאיר את ה-ACC ללא שינוי; הוא רק מגדיר את הדגל.JPNמקפיץ כאשר הערכים אינם שווים.- מעבר 1 של המאסמבלר (assembler) כותב אין קוד. הפלט שלו היא טבלת הסימנים, וההפניות הקדמיות הן הסיבה לקיומה.
הבנתך מושלמת
- קוד מכונה הוא תבניות ביט; אסמבלי הוא מונחים קיצורים, אחד לאחד, המתורגם על ידי מתרגם
- שני מעברים: מעבר 1 בונה את טבלת הסימנים של כתובות התוויות, מעבר 2 מייצר קוד; נדרש עבור הפניות קדמיות.
- מעקב עם טבלת ACC וכל מקום, שורה לכל שינוי; CMP מגדיר את הדגל, JPE/JPN קוראים אותו
- הכיפוי: מיידית
#nהערך · ישיר תוכן הכתובת · עקיף כתובת של הכתובת · ממוספר כתובת + IX (מערכות) · יחסי סטייה