דלג לתוכן

יסודות מעבד

מדעי המחשב A-Level · נושא 4

שיעור וידאו לנושא זה פתח את עמוד הוידאו
21:32

ארכיטקטורת פון נוימן

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

קריאת קול באנגלית · תרגום אנגלי + סינית שרוף בתוך הסרטון

4.1

ארכיטקטורת von Neumann

סיילבוס
המועמדים צריכים להיות מסוגלים: הערות והנחיות
הצג הבנה של המודל הבסיסי של ון ניימן למערכת מחשב ומתוך המושג התוכנית מאחסנת
הצג הבנה של התפקיד והתפקודים של רישומיות, כולל ההבדל בין רישומיות רב-שימושיות לבין רישומיות ייעודיות רישומיות ייעודיות כוללות: • נגד ספן תוכנית (PC) • נגד נתוני זיכרון (MDR) • נגד כתובות זיכרון (MAR) • צובר (ACC) • נגד אינדקס (IX) • נגד הוראה נוכחית (CIR) • נגד מצבים
הצג הבנה של התפקידים של יחידת האריתמטיקה הלוגיקה (ALU), יחידת בקרה (CU), שעון המערכת ו-אחסון גישה מיידית (IAS)
הצג הבנה כיצד נתונים מועברים בין רכיבים שונים במערכת המחשב באמצעות נתיב כתובות, נתיב נתונים ונתיב בקרה
הצג הבנה כיצד גורמים תורמים לביצועי מערכת המחשב כולל: • סוג מעבד ומספר ליבות • רוחב הנתיב • מהירות שעון • זיכרון קש
הבן כיצד פורטים שונים מספקים חיבור למכשירים חיצוניים כולל חיבור ל: • BUS סדרתי אוניברסלי (USB) • ממשק הרמולטי HD (HDMI) • מערך גרפי וידאו (VGA)
תאר את שלבי מחזור משיכה-ביצוע (F-E) תאר ושתמש בסימון העברת רישומיות כדי לתאר את מחזור F-E
הצג הבנה של התפקיד של הפרעות כולל: • סיבות אפשריות להפרעות • יישומים של הפרעות • שימוש בשגרת שירות הפרעות (ISR) • מתי הפרעות מזוהות במהלך מחזור משיכה-ביצוע • כיצד הפרעות מטופלות

מקור: הסיילבוס הבינלאומי של קמבריד'ג'

מחזור fetch-decode-execute

ה-ארכיטקטורת von Neumann היא הבסיס לכל מחשב רב-שימושי:

  • זיכרון אחד — זיכרון הגישה המיידי (IAS) — מאחסן גם הוראות תוכנה וגם נתונים (עקרון התוכנית הארוזה).
  • מעבד (CPU) מוצא הוראות מהזיכרון ומבצע אותן אחת אחת.
  • ההוראות מתבצעות ברצף, אלא אם כן שינוי בענף (branch) משנה את זרימת התוכנית.

רעיון התוכנית הארוזה הוא מה שהופך את המחשב לגמיש: שינוי התוכנית משנה את פעולתו, מבלי צורך בחיווט מחדש.

חקור

לחץ על חלקי מחשב וון ניימן

חקור כל בלוק. ה-CPU (יחידת בקרה, ALU, רגיסטרים) מתקשר עם זיכרון ראשי אחד דרך השדרות — והזיכרון המשותף הזה להוראות AND לנתונים הוא הרעיון של וון ניימן.

4.1

חלקי המעבד הראשיים

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

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

יחידה אריתמטית ולוגית (ALU)

ה-ALU מבצעת פעולות אריתמטיות (חיבור, חיסור, …) ולוגיות (AND, OR, השוואות). היא לוקחת אופרנדים מ-רישומים ומחזירה תוצאות אל רישום.

יחידת בקרה (CU)

ה-יחידת הבקרה פענחת כל הוראה ושולחת את ** אותות הבקרה** כדי לבצע אותה — פתיחת מסלולי נתונים, הנחיה ל-ALU לגבי ביצוע הפעולה, ובקרה לקריאות וכתובות בזיכרון.

שעון המערכת

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

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

רישומים

רישומים הם אחסונות קטנים ומהירים מאוד בתוך המעבד. ל-רישומים בעלי שימוש ספציפי יש משימה קבועה במחזור:

  • ונהל תוכנית (PC) — הכתובת של ההוראה הבאה.
  • נהל כתובות זיכרון (MAR) — הכתובת שנקראת או נכתבת.
  • נהל נתוני זיכרון (MDR) — הנתונים הנשלחים לזיכרון או מגיעים ממנו.
  • נהל הוראה נוכחית (CIR) — ההוראה הנפענחת כרגע.
  • צובר (ACC) — הערך שעליו עובדת כרגע ה-ALU.
  • נהל מצבים — מחזיק דגלים (נשיאה, אפס, שלילי, גלישה) המשמשים לערמוזיות. כל דגל הוא ביט אחד, המוגדר או מבוטל על ידי ה-ALU לאחר פעולה: דגל האפס לאחר השוואה שהתאימה, דגל הנשיאה כאשר חיבור גרם לגלישה מהרישום, דגל השליליות כאשר התוצאה שלילית. ערמוזיה מותנית קוראת את הדגלים כדי להחליט אם לערום, ודגל הגלישה יכול לגרום להפרעה (interrupt).
  • נהל אינדקס — הסטייה המוספת לכתובת באמצעות כתובת אינדקס; העלאת הערך שלו מאפשרת מעבר דרך מערך אלמנט אחד באחד.

השאלה "השלם את הטבלה המתארת את תפקודם של כל הרישומים" דורשת משפט מדויק אחד לכל רישום במונחים אלו: ה-PC מחזיק את כתובת ההוראה הבאה שיישאף; ה-MAR מחזיק את כתובת המקום שנקרא ממנו או נכתב אליו; ה-MDR מחזיק את הנתון או ההוראה שנשאופו מהמקום או עומדים להיכתב אליו; ה-CIR מחזיק את ההוראה הנפענחת והמבוצעת כרגע; ה-ACC מחזיק את תוצאת הפעולה האריתמטית או הלוגית האחרונה.

רישומים כלליים משמשים את המפתח עבור ערכים זמניים במהלך חישוב. הזזות נתונים בין רישומים לזיכרון נכתבות בסימון העברת רישומים — למשל MAR ← [PC] ("העתק תוכן ה-PC לתוך ה-MAR").

תרשים בלוקים של מעבד Von Neumann המראה PC, MAR, MDR, CIR, ACC, נהל מצבים, יחידת בקרה, ALU ושעון מערכת, הקשורים לזיכרון ראשי ולקלט/פלט באמצעות בוס כתובות, נתונים ובקרה
מעבד von Neumann: רשומות, יחידת בקרה ו-ALU קשורים באמצעות בוסים
מילון מונחים אימון
English עברית
Von Neumann architecture/vɒn ˈnɔɪmən ˈɑːkɪtektʃə/ ארכיטקטורת וון ניימן
Immediate Access Store/ɪˈmiːdɪət ˈækses stɔː/ זיכרון גישה מיידית
stored program/stɔːd ˈprəʊɡræm/ תוכנית מאוחסת
processor/ˈprəʊsesə/ מעבד
arithmetic and logic unit/ˌærɪθˈmetɪk ənd ˈlɒdʒɪk ˈjuːnɪt/ יחידת אריתמטיקה ולוגיקה
ALU/ˌeɪ el ˈjuː/ יחידת אריתמטיקה ולוגיקה (ALU)
interrupt/ˈɪntərʌpt/ הפרעה
4.1

בוסים

שלושה בוסים פנימיים (סדרות של חוטים מקבילים) מחברים את החלקים:

  • בוס כתובות — מעביר את כתובת הזיכרון. חד-כיווני (CPU → זיכרון).
  • בוס נתונים — מעביר את הנתונים. דו-כיווני.
  • בוס בקרה — מעביר אותות בקרה (קריאה, כתיבה, הפסקה). דו-כיווני.

בוס כתובות בעל $n$ ביט יכול לגשת ל-$2^{n}$ מיקומי זיכרון. רוחב בוס הנתונים קובע כמה ביטים עוברים בכל גישה (לרוב זהו גודל המילה).

מעבד, זיכרון וכניסה/יציאה מגיעים כולם לבוס הכתובות (חד-כיווני), בוס הנתונים ובוס הבקרה בתוך בוס המערכת
שלושת בוסות המערכת המקשרים בין המעבד, הזיכרון והכניסה/יציאה
לוח אם הנראה מלמעלה: סוקט המעבד, חריצי הזיכרון וחריצי הרחבה מחוברים על ידי מסלולים הדפסה צפופים
לוח אם: המעבד, הזיכרון וה-I/O נמצאים כולם על סדרת בוסים אחת — המסלולים ההדפסיים העוברים ביניהם
מילון מונחים אימון
English עברית
buses/ˈbʌsɪz/ אוטובוסים
address bus/əˈdres bʌs/ נתיב כתובות
data bus/ˈdeɪtə bʌs/ נתיב נתונים
word size/wɜːd saɪz/ גודל מילה
number of cores/ˈnʌmbə ɒv kɔːz/ מספר ליבות
cores/kɔːz/ ליבות
amount of RAM/əˈmaʊnt ɒv ræm/ כמות זיכרון RAM
4.1

מה משפיע על הביצועים

  • מהירות שעון — יותר מחזוריים לשנייה.
  • מספר ליבות — מעבד רב-ליבה מבצע מספר תהליכים בו-זמנית.
  • גודל מילה — מעבד 64-ביט מטפל בבלוקים בגודל 64 ביט לכל מחזור ומסוגל לגשת לכמות זיכרון גדולה בהרבה מאשר מעבד 32-ביט.
  • כמות RAM — יותר RAM מאפשר אחסון של יותר מתוך ערכת העבודה; כמות קטנה מדי מחייבת למערכת ההפעלה להשתמש ב-pageing (חילוף דף) לדיסק.
  • גודל זיכרון Cache — יותר Cache מקצרת את זמן הגישה הממוצע לזיכרון.
  • סוג אחסון משני — SSD טוען תוכניות הרבה מהר יותר מאשר HDD.
  • רוחב ומהירות בוס — בוסים רחבים/מהירים מעבירים נתונים מהר יותר.

התאמת המפרטים לעומס עבודה: מעבד ארבע-ליבה עולה על מעבד דו-ליבה במשימות מקבילות, אך מהירות גבוהה יותר לליבה בודדת מנצחת במשימות חד-תהליך.

כל גורם הוא תשובה בעלת שני נקודות עם סיבה מצורפת:

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

"הסבר מדוע המחשב החדש ביצועיו טובים יותר" עונה על ידי השוואת שתי המפרטים שורה מול שורה: מהירות שעון גבוהה מבצעת הוראות רבות יותר לשנייה, ליבות יותר מבצעות משימות רבות יותר בו-זמנית, קש גדול יותר מפחית גישות איטיות ל-RAM, ו-RAM גדול יותר מפחית העברות לכונן.

מילון מונחים אימון
English עברית
RAM/ræm/ RAM
page/peɪdʒ/ דף
cache memory/kæʃ ˈmeməri/ זיכרון cache
cache/kæʃ/ מטמון
secondary storage/ˈsekəndəri ˈstɔːrɪdʒ/ אחסון משני
port/pɔːt/ יציאה
peripheral/pəˈrɪfərəl/ התקן סביבתי
register transfer notation/ˈredʒɪstə ˈtrænsfɜː nəʊˈteɪʃn/ סימוני העברת רשמים
interrupt service routine/ˈɪntərʌpt ˈsɜːvɪs ruːˈtiːn/ שגרת שירות הפסקה
interrupt register/ˈɪntərʌpt ˈredʒɪstə/ רישום הפסקה
4.1

יציאות

יציאה היא שקע פיזיקלי לחיבור מכשיר היקפי:

  • USB (Universal Serial Bus) — רב-שימושי (מקלדי קלדים, כוננים, טלפונים).
  • HDMI (High Definition Multimedia Interface) — וידאו ואודיו דיגיטליים למסך.
  • VGA (Video Graphics Array) — יציאת וידאו אנלוגית ישנה למסך.
  • Ethernet (RJ-45) — LAN חוטי. שקעי אודיו — אוזניות/מיקרופון.

יציאות שונות משתמשות באותות שונים, ולכן כבל HDMI לא יתאים לשקע USB. USB-C יוצא דופן בכך שהוא מעביר וידאו, נתונים וחשמל.

"הסבר כיצד המחשב מתחבר למסך דרך HDMI": יציאת HDMI שולחת וידאו ואודיו כאות דיגיטלי אחד דרך כבל יחיד, ולכן אין צורך בהמרה לאנלוגי והתמונה אינה מתדרדרת; הכבל נושא רזולוציות HD והיציאה במסך עצמה פוענחת את האות. מכשיר USB הוא חיבור והפעלה (Plug-and-play): כאשר הוא מחובר, המחשב מזהה אותו, מזיהה אותו, מטעין או מתקין את הדרייבר הנדרש לו, ומספק לו חשמל, הכל ללא הצרכה מחדש.

4.1

מחזור משיכה-ביצוע

מעבד הביצועים (CPU) חוזר על מחזור המשיכה-ביצוע, פעם אחת לכל הוראת מכונה.

משיכה

  1. כתובת ה-PC מועתקת ל-MAR.
  2. ה-PC מוגדל כדי להצביע על ההוראה הבאה.
  3. אות קריאה עובר על נתיב הבקרה.
  4. הזיכרון מניח את ההוראה על בוס הנתונים.
  5. היא מועתקת ל-MDR, ולאחר מכן ל-CIR.

המבחן דורש שלבים אלו בסימוך העברת רשמים, כאשר [X] מייצג תוכן של רשם X ו-stereofon [[MAR]] מייצג תוכן של מיקום בזיכרון שכתובתו נמצאת ב-MAR:

MAR ← [PC]          the address of the next instruction goes to the MAR
PC  ← [PC] + 1      the PC now points to the following instruction
MDR ← [[MAR]]       the instruction at that address is read into the MDR
CIR ← [MDR]         the instruction is copied into the CIR for decoding

הסדר חשוב: ה-PC מתגבר מיד לאחר שהכתובת שלו הועתקה, כך שקפיצה שתתבצע מאוחר יותר עדיין תוכל לכתוב עליה. במהלך הביצוע אותו סימון מתאר כל הוראה; לדוגמה עבור LDD 200, יש MAR ← 200, MDR ← [[MAR]], ACC ← [MDR].

הרישום Fetch נע בסדר: 1 כתובת ה-PC עוברת ל-MAR; 2 ה-MAR שולח את הכתובת לזיכרון; 3 ההוראה חוזרת ל-MDR; 4 ה-MDR מעתיק אותה ל-CIR; בו-זמנית ה-PC מתגבר
העברות הרשמיים בפיצ'ט: PC → MAR → זיכרון → MDR → CIR, עם עלייה ב-PC

פיענוח

ה-CU מפענחת את ההוראה ב-CIR — איזה פעולה, ואילו ארגומנטים או כתובות.

ביצוע

ה-CU מבצעת אותה: פעולות אריתמטיות/לוגיות הולכות ל-ALU (התוצאה ל-ACC); טעינה/אחסון ממשיכים נתונים בין זיכרון לרשם; קפיצה משנה את ה-PC. לאחר מכן המחזור חוזר על עצמו.

תרשים זרימת מחזור הפיצ'ט-ביצוע החל מ-START: שלב הפיצ'ט (PC ל-MAR, עלייה ב-PC, אות קריאה, זיכרון לבוס הנתונים ל-MDR ל-CIR), שלב הפיענוח, שלב הביצוע, ולאחר מכן בדיקה לאירועי הפרעה שמחזירה לחזרה ל-START
מחזור הפיצ'ט-ביצוע, עם בדיקה לאירועי הפרעה בכל פעם
חקור

מחזור ציוד-ביצוע

הקלד סביב לולאת ה-CPU החוזרת מיליארדי פעמים בשנייה. צפה כיצד השלב fetch משתמש ברישומי PC/MAR/MDR/CIR, ולאחר מכן decode ו-execute פועלים על מה שנלקח.

חקור

מחזור קריאה-ביצוע

עבור על תהליך ביצוע הוראה אחת על ידי המעבד: קרא אותה מהזיכרון, פענח אותה, ואז בצע אותה, שוב ושוב.

מילון מונחים אימון
English עברית
fetch-execute cycle/fetʃ ˈeksɪkjuːt ˈsaɪkl/ מחזור משיכה-ביצוע
special purpose registers/ˈspeʃl ˈpɜːpəs ˈredʒɪstəz/ רשומות ייעוד ספציפי
Program Counter/ˈprəʊɡræm ˈkaʊntə/ ספירת תוכנית
Memory Address Register/ˈmeməri əˈdres ˈredʒɪstə/ רשם כתובת זיכרון
Memory Data Register/ˈmeməri ˈdeɪtə ˈredʒɪstə/ רשם נתוני זיכרון
Current Instruction Register/ˈkʌrənt ɪnˈstrʌkʃn ˈredʒɪstə/ רשם ההוראה הנוכחית
4.1

אירועי הפרעה

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

טיפול באחד:

  1. סיום ההוראה הנוכחת.
  2. שמירת המצב (ה-PC והרשמים).
  3. טעינת כתובת תוכנית שירות ההפרעות (ISR) לתוך ה-PC והרצתה.
  4. ה-ISR מטפל באירוע.
  5. שחזור המצב השמור והמשכה.

הפרעות מאפשרות למערכת להגיב בזמן אמת ללא צורך ב-CPU לבדוק באופן מתמיד את המכשירים, והן הן הדרך שבה מערכת ההפעלה מבצעת ריבוי משימות.

"הסבר כיצד הפרעה ממכשיר כניסה מזוהה ומטופלת במחזור F-E" היא תשובה בעלת 4 נקודות הנכללות בפריטים הבאים: המכשיר שולח אות הפרעה שמגדיר את דגל ההפרעה ב-רשומת ההפרעות; המעבד בודק את הרשומה זו בסוף כל מחזור fetch-execute, לאחר שההוראה הנוכחית סיימה ביצוע; אם הדגל מוגדר וההפרעה בעלת עדיפות גבוהה מהמשימה הנוכחית, התוכן של PC ושאר הרשומות נשמרים בשורה (stack); כתובת פרוגרמת השירות להפרעה נטענת ל-PC והפרוגרמה נערכת; כאשר היא מסתיימת, הערכים שנשמרו משוחזרים מהשורה והתוכנית המקוטעת ממשיכה מהנקודה בה עצרה.

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

תרשים זרימת טיפול בהפרעה: התוכנית הפועלת מקוטעת, ה-CPU מסיים את ההוראה הנוכחית, שומר את מצבו (PC ורשומות) בשורה, מפעיל את פרוגרמת השירות להפרעה, משחזר את המצב וממשיך
כיצד הפרעה משתלבת במחזור fetch-execute
מילון מונחים אימון
English עברית
stack/stæk/ סטק
assembly language/əˈsemblɪ ˈlæŋɡwɪdʒ/ שפת אסמבלר
machine code/məˈʃiːn kəʊd/ קוד מכונה
mnemonics/nɪˈmɒnɪks/ מונומיקה (סימני קיצור)
assembler/əˈsemblə/ אסמבלר
symbol table/ˈsɪmbl ˈteɪbl/ טבלת סמלים
label/ˈleɪbl/ תווית
forward references/ˈfɔːwəd ˈrefrənsɪz/ הפניות קדימות
opcode/ˈɒpkəʊd/ אוקוד (OPCODE)
4.2

לשון אסמבלר וכידור מכונה

סיילבוס
המועמדים צריכים להיות מסוגלים: הערות והנחיות
הצג הבנה של הקשר בין שפת אסמבלר לבין קוד מכונה
תאר את השלבים השונים בתהליך האסמבל עבור אסמבלר דו-מעברי יישם את תהליך האסמבלר הדו-מעברי על תוכנת אסמבלר פשוטה נתונה
עקוב אחר תוכנת אסמבלר פשוטה נתונה
הצג הבנה כי קבוצות הוראות מקוננות כולל את הקבוצות הבאות: • הזזת נתונים • הזנת ויציאת נתונים • פעולות אריתמטיות • הוראות לא תנאי ותנאי • הוראות השוואה
הצג הבנה ויכולת לשתמש במצבי כתוב שונים כולל מיידית, ישירה, עקיפה, אינדקסית, יחסית

מקור: הסיילבוס הבינלאומי של קמבריד'ג'

ה-CPU בפועל רץ כידור מכונה — דפוסי ביטים, ייחודיים לארכיטקטורה מסוימת. לשון אסמבלר היא צורה קריאה, עם הוראה אחת לכל הוראת מכונה, הכתובה באמצעות מונונימיקים כמו LDD, ADD, JMP. אסמבלר תרגם אותו לכידור מכונה.

אסמבלר מתרגם מונונימים לשפת אסמבלר לדפוסי ביטים של קוד מכונה
אסמבלר הופך מונונימיכים לדפוסי כידור מכונה

אסמבלר דו-מעברי

אסמבלר דו-מעברי קורא את המקור פעמיים:

  • מעבר 1 בונה טבלת סימנים: בכל פעם שתווית (כמו LOOP:) מופיעה, נרשום את כתובתה; אין עוד קוד.
  • מעבר 2 מייצר קוד: תרגם כל הוראה, וכשאחת מתייחסת לתווית (כמו JMP LOOP), חפש את כתובתה בטבלת הסימנים.

שני מעברים מטפלים בהפניות קדימיות (קפיצה לתווית המוגדרת מאוחר יותר).

דוגמה פותרת. יישם את תהליך הדו-מעברי על תוכנית זו, שבה ההוראה הראשונה מאוחסנת בכתובת 100.

        LDD  COUNT
LOOP:   DEC  ACC
        CMP  #0
        JPN  LOOP
        END
COUNT:  5

מעבר 1 קורא כל שורה, סופר את הכתובת שת occupies, ומרשם כל תווית בטבלת הסימנים: LOOP = 101 (שורת הDEC) וCOUNT = 105 (שורת הנתונים). אין קוד המיוצר. מעבר 2 קורא את התוכנית שוב ותרגם כל שורה לכידור מכונה, תוך החלפת כל מונונימיק ב-אופקוד וחלפת כל כתובת סמלית במספר מטבלת הסימנים: LDD COUNT הופך לאופקוד עבור LDD עם אופרנד 105, וJPN LOOP הופך לאופקוד עבור JPN עם אופרנד 101. הקפיצה חזרה לLOOP יכלה להיות פותרת במעבר אחד, אך קפיצה קדימית לתווית שלא נראתה עד כן לא הייתה אפשרית, ולכן האסמבלר מבצע שניים.

דוגמה לערכת הוראות

Cambridge משתמש בערכת הוראות קטנה וגנרית, מודפסת בטבלת ההפניה בדף הבחן, עם רשמה אחת רב-שימושית, האקumulátor (ACC), ורשמת אינדקס (IX). אופרנד הכתוב #n הוא מספר עשרוני, Bn מספר בינארי ו&n מספר הלודקסימלי; <address> הוא מספר מיקום או תווית.

קבוצה הוראה מה she עושה
העברת נתונים LDM #n טען את המספר n ל-ACC (אידיאטיבי)
LDD <address> טען את תכולת הכתובת ל-ACC (עקיף)
LDI <address> הכתובת מכילה כתובת נוספת; טעון את תוכנה ל-ACC (אינדירקטי)
LDX <address> הוסף IX לכתובן וטעון את תוכנו של התוצאה ל-ACC (אינדקסי)
LDR #n טעון את המספר n ל-IX
MOV <register> העתק את ACC לריגסטר הנקוב (IX)
STO <address> שמור את תוכן ACC בכתובת
קלט ותפוקה IN קרא לחיצת מקש והנח את קוד ה-ASCII שלו ב-ACC
OUT הפך את האות שקוד ה-ASCII שלה נמצא ב-ACC
חשבונאות ADD <address> / ADD #n הוסף לתוכן הכתובת, או למספר, ל-ACC
SUB <address> / SUB #n חסר מ-ACC
INC <register> / DEC <register> הוסף 1 ל-ACC או ל-IX, או חסר 1 מהם
השוואה CMP <address> / CMP #n השוו בין ACC לבין תוכן הכתובת, או עם n, והגדר את הדגל
CMI <address> השוו בין ACC לבין תוכן הכתובת הנמצאת בכתובת (אינדירקטי)
קפיצה JMP <address> קפוץ לכתובת ללא תנאים
JPE <address> / JPN <address> קפוץ אם ההשוואה האחרונה הייתה שווה / לא שווה
עיבוד ביטים AND, OR, XOR עם #n, Bn, &n או <address> פעולה לוגית על ACC
LSL #n / LSR #n הזז את ACC לוגיתית n מקומות שמאלה או ימינה
END סיים את התוכנית

השאלה "הוראות לשפת אסמבלי מחולקות לקבוצות" דורשת את שמות הקבוצות והוראה אחת מכל אחת: העברת נתונים, קלט ותפוקה, חשבונאות, קפיצות ללא תנאים וקפיצות מותנות, השוואה ועיבוד ביטים.

חקור

כיצה פונקציונליות של אסמבלר דו-מעברי

עבור עליו. המאסמבלר קורא את הקוד שלך פעמיים: מעבר 1 מזהה רק היכן נמצא כל תווית, כך שמעבר 2 יכול למלא את הכתובות — וכך מתקיים קפיצה לתווית שהוגדרה אוחר יותר.

מילון מונחים אימון
English עברית
register/ˈredʒɪstə/ רשמה
control unit/kənˈtrəʊl ˈjuːnɪt/ יחידת בקרה
clock speed/klɒk spiːd/ מהירות שעון
4.2

מצבי כתובות

המצב הכתובתי (או מצבי הכתובות) מסביר כיצד מעבד ה-CPU מזהה את הארגומנט:

  • היפוע מיידי — האופרנד הוא הערך בתוך ההוראה. LDM #10 מטעין 10.
  • היפוע ישיר — ההוראה מכילה כתובת; האופרנד הוא הערך ששם. LDD 200.
  • היפוע עקיף — ההוראה מכילה כתובת שמכילה כתובת אחרת, שהיא הנתון. LDI 200.
  • היפוע אינדקסי — הכתובת האפקטיבית היא address + index register; משמש למטריצות. LDX 100 עם רשמת IR = 5 קורא את הכתובת 105.

(היפוע יחסי מספק את הכתובת כסטייה מה-PC — משמש לקפיצות.)

ארבע שיטות היפוע המגיעות לאופרנד. היפוע מיידי: LDM #10 נותן 10 ישירות. היפוע ישיר: LDD 200 קורא את מקום הזיכרון 200 (=42). היפוע עקיף: LDI 200 קורא את המקום 200 (=250) ולאחר מכן את המקום 250 (=99). היפוע אינדקסי: LDX 100 עם רשמת אינדקס 5 קורא את המקום 105 (=7)
כיצד כל שיטת היפוע מגיעה לאופרנד — מיידי, ישיר, עקיף ואינדקסי

דוגמה מפורטת. הזיכרון מכיל: מיקום 200 = 250, מיקום 250 = 99, מיקום 105 = 7. רישום האינדקס מכיל 5. מה יש במצבור האקumulat after each of LDM #200, LDD 200, LDI 200 and LDX 100? Follow how far each mode has to look. LDM #200 is immediate - the operand is the number written in the instruction, so the accumulator holds 200. LDD 200 is direct - go to location 200 and take what is there: 250. LDI 200 is indirect - location 200 holds 250, which is another address, so go on to location 250: 99. LDX 100 is indexed - add the index register to the address, $100 + 5 = 105$, and read location 105: 7. Count the hops to keep them apart: immediate 0, direct 1, indirect 2, indexed 1 (once the index has been added).

מילון מונחים אימון
English עברית
operand/ˈɒpərænd/ אופראנד
accumulator/əˈkjuːmjʊleɪtə/ מצטבר
Status Register/ˈsteɪtəs ˈredʒɪstə/ רשם מצב
flags/flæɡz/ דגלים
Index Register/ˈɪndeks ˈredʒɪstə/ רשם אינדקס
indexed addressing/ˈɪndekst əˈdresɪŋ/ כתובת מאונדסת
general-purpose registers/ˈdʒenərəl ˈpɜːpəs ˈredʒɪstəz/ רשומות שימוש כללי
register transfer/ˈredʒɪstə ˈtrænsfɜː/ העברת רשמים
control bus/kənˈtrəʊl bʌs/ נתיב בקרה
addressing mode/əˈdresɪŋ məʊd/ מצב כתובת
immediate addressing/ɪˈmiːdɪət əˈdresɪŋ/ כתובת מידית
direct addressing/daɪˈrekt əˈdresɪŋ/ כתובת ישירה
indirect addressing/ɪndaɪˈrekt əˈdresɪŋ/ כתובת עקיפה
relative addressing/ˈrelətɪv əˈdresɪŋ/ כתובת יחסית
logical shift/ˈlɒdʒɪkl ʃɪft/ הזזה לוגית
cyclic shift/ˈsaɪklɪk ʃɪft/ הזזה מחזורית
4.2

מעקב אחר תוכנית אסמבל

כדי לבצע מעקב: בנה טבלה עם עמודות עבור PC, ACC, רשמת אינדקס, כל משתנה וכל סימן. עבור על ההוראות עדכנות את הטבלה לאחר כל אחת; עקוב אחר ветки כאשר הן משנות את ה-PC; עצור בEND. דפוס נפוץ הוא לולאה על מטריצה באמצעות היפוע אינדקסי.

דוגמה פותרת. עקוב אחר התוכנית הבאה. הכתובת 200 מכילה 5 והכתובת 201 מכילה 0.

100   LDD  200
101   CMP  #0
102   JPE  108
103   OUT
104   DEC  ACC
105   STO  200
106   LDD  201
107   JMP  100
108   END

כתוב שורה אחת לכל הוראה שבוצעה, ומלא רק את העמודות ששתנו:

הוראה ACC 200 201 תפוקה
התחלה 5 0
LDD 200 5
CMP #0
JPE 108 לא נלקח
OUT אות עם קוד 5
DEC ACC 4
STO 200 4
LDD 201 0
JMP 100
LDD 200 4

וכך הלאה, עד שLDD 200 מטעין 0, ההשוואה מגדירה את סימן השוויון, JPE 108 נלקח והתוכנית נגמרת. שלושה דברים שהבוחן בודק: CMP אינו משנה רשמה, אלא רק סימן; קפיצה שלא נלקחה עדיין נחשבת כבוצעה; וOUT מציג אות, ולכן הוא מופיע בעמודת התפוקה, לא בעמודת ה-ACC. "צין את ההשפעה של שינוי LDD 10 לLDM #10": ה-ACC היה מכיל את המספר 10 במקום תכולת הכתובת 10.

4.3

הזזות בינאריות

סיילבוס
המועמדים צריכים להיות מסוגלים: הערות והנחיות
הצג הבנה וביצוע הזזות בינארי לוגיקי, אריתמטי וציקלי הזזה שמאל, הזזה ימין
הצג הבנה כיצד עיבוד ביט יכול לשמש לניטור/בקרה על התקן בצע פעולות עיבוד ביט בדוק והגדר ביט (באמצעות מסיכת ביט)
תווית הוראה | אופקוד | ארגומנט הסבר
AND #n / Bn / &n פעולת AND ביטית של תוכן ACC עם הארגומנט
AND
פעולת AND ביטית של תוכן ACC עם תוכן
XOR #n / Bn / &n פעולת XOR ביטית של תוכן ACC עם הארגומנט
XOR
פעולת XOR ביטית של תוכן ACC עם תוכן
OR #n / Bn / &n פעולת OR ביטית של תוכן ACC עם הארגומנט
OR
פעולת OR ביטית של תוכן ACC עם תוכן
LSL #n בסיסים ב-ACC מוזזים לוגית n מקומות שמאלה. אפסים מוחדרים בקצה הימני
LSR #n בסיסים ב-ACC מוזזים לוגית n מקומות ימינה. אפסים מוחדרים בקצה השמאלי
מסמן הוראה
נותן כתובת סמלית
כל השאלות יניחו שקיים רק רשם שימוש כללי אחד (מצטבר) ACC מציינים מצטבר IX מציינים רשם אינדקס
יכול להיות כתובת או סמלית # מציינת מס עשרוני, לדוגמה #123 B מציינת מס בינארי, לדוגמה B01001010 & מציינת מס הלקסידמי, לדוגמה &4A

מקור: הסיילבוס הבינלאומי של קמבריד'ג'

הזזה לוגית מזיזה את כל הביטים שמאלה או ימינה למספר מקומות, וממלאת את המיקומים החדשים ב-0.

  • הזזה שמאלה ב-1 (LSL #1) — הביטים זזים שמאלה, 0 נכנס מימין; עבור מספר ללא סימן זה × 2.
  • הזזה ימינה ב-1 (LSR #1) — הביתים נעים ימינה, 0 נכנס משמאל; עבור מספר ללא סימן זהו מספר שלם ÷ 2.

הזזה ב-$n$ מקומות כופלת או מחלקת ב-$2^{n}$. דוגמה: 00001011 (11) LSL #1 → 00010110 (22).

ביתים שנזזו החוצה מהקצה אובדים, ולכן הכפל נכון רק כל עוד הם היו אפסים. הוספת LSL #2 למספר שלם בשנייה-משלים 11001010 נותנת 00101000: שני ה-1s שנפלו משמאל אבדו, ביט הסימן השתנה, והתוצאה אינה ארבע פעמים המקורית יותר.

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

"הראה את תוצאת ההזזה האריתמטית הימינה ב-3 מקומות על 10011110": העתק ביט הסימן לכל מקום ריק, 11110011. אותה הזזה על 01011100 נותנת 00001011. הזזה מעגלית שמאלית ב-1 על 10000110 נותנת 00001101: ה-1 המוביל מופיע שוב מימין.

שלושה שיפוטי 8-bit: LSL #1 הופך 00001011 ל00010110 (כפול 2, 0 נכנס מימין); LSR #1 הופך אותו ל00000101 (חילוק שלם ב2, 0 נכנס משמאל); ASR #1 הופך 10110100 ל11011010, העתיק את סימן הביט
הזזה לוגית שמאלית ($\times 2$), הזזה לוגית ימינה ($\div 2$) והזזה אריתמטית ימינה (שומרת על ביט הסימן)

ההפרש בין שתי ההזזות הימניות הוא ביט אחד. לקחת 11110000, שהוא 240 קריאה ללא סימן ו-$-16$ קריאה עם סימן. LSR #1 מכניס 0 ונותן 01111000 $= 120$, שהוא המחצית הנכונה של 240. ASR #1 מעתיק את ביט הסימן במקום זאת ונותן 11111000 $= -8$, שהוא המחצית הנכונה של $-16$. אף אחד מהם אינו שגוי — כל אחד מחלק בערך תחת קריאה אחת.

הבייט 11110000 מוזז ימינה פעמיים: LSR מכניס 0 משמאל נותן 01111000 שהוא 120, בעוד ASR מעתיק את ביט הסימן נותן 11111000 שהוא מינוס 8; שתי התוצאות שונות רק בביט שנכנס
הזזה לוגית ואריתמטית ימינה על אותו בייט: רק הביט שנכנס משמאל שונה

עיבוד ביטים לניטור/בקרה

התקנים embedded משתמשים לעיתים קרובות ב-ביט אחד של רגיסטר לכל אות (למשל bit $n$ = LED $n$). השימוש ב-מסכה — עיבוד ביטי במסכה — מאפשר לך:

  • להגדיר bit $n$: R = R OR מסכה עם bit $n$ מוגדר.
  • לנטרל bit $n$: R = R AND מסכה עם bit $n$ נטרל ושאר הגדרות.
  • להפוך bit $n$: R = R XOR מסכה עם bit $n$ מוגדר.
  • לבדוק bit $n$: R AND המסכה, ולאחר מכן לבדוק אם התוצאה אינה אפס.
עיבוד ביטי במסכה על הבייט 01001000: הגדר bit 2 עם OR 00000100 כדי לקבל 01001100; נטרל bit 6 עם AND 10111111 כדי לקבל 00001000; הפוך bit 3 עם XOR 00001000 כדי לקבל 01000000
הגדר ביט עם OR, נטרל אותו עם AND, הפוך אותו עם XOR — כל אחד עם מסכה

עיבוד ביטים מהיר, משתמש בזיכרון מעט, ומאפשר לבייט אחד להחזיק עד 8 מצבי ON/OFF.

בסט ההוראות במבחן אלו הם AND, OR ו-XOR עם מסכה כתובה כארגומנט עשרוני, בינארי או הדקסিমלי. עם ACC שמחזיק 10101100:

הוראה מסכה תוצאה ב-ACC השפעה
AND B00001111 00001111 00001100 שומר רק את ארבעת הביטים הנמוכים (מאפס את שאר הביטים)
OR #1 00000001 10101101 מגדיר את הביט המינימלי, ומשאיר את שאר הביטים ללא שינוי
XOR &FF 11111111 01010011 הפוך כל ביט
AND B00001000 ולאחר מכן CMP #0 00001000 00001000 בודק ביט 3: ההשוואה אינה שווה, ולכן הביט 3 היה מוגדר
LSL #2 10110000 מזז שמאלה בשתי מקומות, מאבד את שני הביטים העליונים
LSR #3 00010101 הזז ימינה בשלושה מקומות, אפסים נכנסים משמאל

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

חקור

הזזה ומסיכת ביטים של ביט

בחר אופרטור וצפה בכל ביט תוצאה. הזזה שמאלית (<<) moves every bit up one place (×2); a right shift (>>) מזיזה אותם כלפי מטה (÷2); AND עם מסכה מבטל את הביטים שאינם רצויים.

מילון מונחים אימון
English עברית
bit/bɪt/ ביט
mask/mæsk/ מסכה
4.3

הגדרות מקובלות בקורס

שאלת הגדרה מוקדמת לפי טקסט קבוע. לימודן במדויק, ותן תשובה אחת בלבד.

מונח הגדרה
קונספט תוכנית מאוחזת הוראות התוכנית והנתונים אחוזים כולם בזיכרון הראשי, והוראות נלקחות ומבוצעות אחת אחת
רגיסטר מקום אחסון קטן ומהיר מאוד בתוך המעבד בעל מטרה ספציפית
מונה תוכנית הרגיסטר המחזיק את הכתובת של ההוראה הבאה לקחת
רגיסטר כתובת זיכרון הרגיסטר המחזיק את הכתובת של מיקום הזיכרון שנמצא בקריאה או כתיבה
רגיסטר נתוני זיכרון הרגיסטר המחזיק את הנתונים או ההוראה שנלקחו מהזיכרון או עומדים להיכתב אליו
רגיסטר הוראה נוכחית הרגיסטר המחזיק את ההוראה שהפעולה הפעילה מתפרשת ומבוצעת
מצובר הרגיסטר רב-תכליתי המחזיק את התוצאה של הפעולה החישובית או הלוגית האחרונה
זיכרון מערך (cache) זיכרון קטן ומהקרוב למעבד המחזיק הוראות ונתונים המשמשים לעיתים קרובות
הפסקה (interrupt) אות ממכשיר או תוכנית הגורם למעבד לעצור את המשימה הנוכחית ולהריץ שגרת טיפול בהפסקה
לשון אסימבל שפה ברמה נמוכה שבה כל הוראת מנומון (mnemonic) תואמת להוראת קוד מכונה אחת
כתובת מיידית האופרנד הוא הערך הכתוב בהוראה
כתובת ישירה האופרנד הוא תוכן הכתובת הכתובה בהוראה
כתובת לא ישירה הכתובת בהוראה מכילה את כתובת האופרנד
כתובת אינדקסית כתובת האופרנד היא הסכום בין הכתובת בהוראה לבין תוכן רשם האינדקס
כתובת יחסית כתובת האופרנד מוגדרת כהפרש מהכתובת של ההוראה הנוכחית
הזזה לוגית כל ביט זז את מספר המקומות הנדרש ואפסים ממלאים את המיקומים הרוקנים
4.3

טיפים לבחינות

  • להבין את מחזור המשיכה והביצוע במונחי העברת רשמים (PC, MAR, MDR, CIR, ACC) ולזהות מה מעלה את PC.
  • לציין את תפקידו של כל רשם; ערוץ הכתובות הוא חד-כיווני, ערוץ הנתונים הוא דו-כיווני.
  • להבחין בין מצבי הכתובת (מיידית, ישירה, לא ישירה, אינדקסית) — שאלה נפוצה.
  • להסביר כיצד מהירות שעון, מספר ליבות, גודל קאש ואורך מילה משפיעים על ביצועים.
  • עבור הזזה בינארית, לציין אם מדובר בהזזה לוגית או אריתמטית; הזזה שמאלה כופלת ב-2, הזזה ימינה מחלקת ב-2.

טעויות נפוצות

  • לומר שה-PC מכיל את ההוראה הנוכחית, או שה-MDR מכיל כתובת. ה-PC מכיל את כתובת ההוראה הבאה; ה-MDR מכיל נתונים או הוראה, לעולם לא כתובת.
  • להשאיר את ההגבהה של PC מחוץ למשיכה, או לשים אותה לאחר הביצוע. זה קורה ברגע שהכתובת הועברה ל-MAR.
  • לקרוא LDD 10 כ"טעינה 10". LDD 10 טוען את תוכן הכתובת 10; LDM #10 טוען את המספר 10.
  • לשים ערך בעמודת ה-ACC עבור CMP או OUT. השוואה מגדירה סימן בלבד; פלט יוצא לעמודת הפלט.
  • לומר שהפרעת טיפול "מיידי". המעבד מסתיים את ההוראה הנוכחית ובוחן הפרעות בסוף המחזור.
  • שימוש בהזזה ימנית לוגית על מספר שלילי בשלימה לשניים. רק הזזה אריתמטית שומרת על סימן המספר.

שיעורים אינטראקטיביים בנושא זה

לעבור על הדברים צעד אחר צעד, עם תרגילים לבדיקה מיידית.

מבחני עבר

נושאים נוספים במדעי המחשב A-Level

היכנס או צור חשבון

IGCSE, A-Level & AP