1 / 59

בשיעורים שעברו

ארכיטקטורת מחשבים ומעבדת תכנות מערכות טל סובול שיקלר שעת קבלה: יום א', 9-10, 14-15 חדר: stal@bgu.ac.il. בשיעורים שעברו. מה למדנו. High-Level Languages, e.g. ML Compiled Languages, e.g. C++ Assembly Languages Programs Machine Code/ Architecture Computer Organization Level

Download Presentation

בשיעורים שעברו

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ארכיטקטורת מחשביםומעבדת תכנות מערכותטל סובול שיקלרשעת קבלה: יום א', 9-10, 14-15חדר:stal@bgu.ac.il

  2. בשיעורים שעברו

  3. מה למדנו High-Level Languages, e.g. ML Compiled Languages, e.g. C++ Assembly Languages Programs Machine Code/ Architecture Computer Organization Level Digital Logic Level Transistors & Layout Materials/ Physics √ √ Physical Layers

  4. מונחים • ארגון המחשב מבנה המחשב – זיכרון, מעבד, BUSes, קלט-פלט מבנה המעבד – רגיסטרים ודגלים, יחידת ביצוע, יחידת בקרה • שפת מכונה קוד בינארי, המייצג את פקודות שפת המכונה וניתן לביצוע על-ידה Opcodes, operand & operation specifiers • ארכיטקטורה סט הפקודות של המכונה: סוגי פעולות, סוגי משתנים, הגדרת המשתנים, מבנה הפקודה, משאבים

  5. הארכיטקטורה – סט הפקודות של המחשב תלויה בארגון המכונה, תלויה ביצרן סוגי המשתנים הנתמכים: תלוי בסוגי הרגיסטרים ב- 80x86 – סוגים, ייעודים, ואורכים שונים לרגיסטרים סוגי ומבני הפקודות: RISC או CISC ב- 80x86 – אורך הפקודה 1-17 בתים סט גדול מאוד של פקודות מספר מגוון של מאפייני פקודה ומאפייני משתנים בשל דרישת תאימות לאחור – מבנים שונים לאותה פקודה

  6. שפת אסמבלי היא (כמעט) תרגום ישיר של שפת המכונה מרכיבי שפת אסמבלי (בשיעור שעבר): • גרסה סמלית של פקודות שפת המכונה - mnemonics • תוויות לייצוג קבועים וכתובות בזיכרון – labels • משתנים – גלויים ועקיפים, בגדלים שונים – operands

  7. שיעור 4:1. שיטות מיעון2. שפות עיליות, פונקציות

  8. שיטות מיעון

  9. Addressing modes • המידע הדרוש למימוש הפקודה ולשמירת תוצריה - מוגדר בפקודה • מוגדרת אחת משיטות המיעון השונות (addressing modes) • שיטות המיעון - תלויות מכונה • שמות השיטות - תלויים ביצרן • מידע יכול להישמר ברגיסטרים או בזיכרון • ברוב פקודות ה- :80x86לפחות אחד המשתנים חייב להיות רגיסטר או מיידי (immediate) לא כל שיטות המיעון, ולא כל שילוביהן מותרים עבור כל פקודה!

  10. Addressing modes • Register • Immediate • Direct (absolute) • Register indirect • Displacement (offset) • Relative • Indexed • Indirect • Auto-increment/ auto-decrement • … כל שיטת מיעון מתאימה לסוג מסוים של גישה למידע (Common data access)

  11. Register addressing • שימושים: משתנים או משתני ביניים • קוד מכונה: מספר ביטים בפקודה • אסמבלי: נקיבה בשם הרגיסטר דוגמאות: שפת מכונהאסמבלי 40 inc eax 43inc ebx

  12. Immediate addressing • שימושים: קבועים • קוד מכונה: המשתנה חלק מהפקודה • אסמבלי: מספר דוגמה: שפת מכונהאסמבלי 050145 add ax, 0x4501 little endian!

  13. ארגון הזיכרון רוב המידע מאוחסן בזיכרון הראשי שאלנו: • מהי היחידה הבסיסית אליה ניתן לפנות? בתים/מלים • כיצד מלים ממופות לבתים? Big endian / Little endian • מהו מרחב הכתובות? או מהם מרחבי הכתובות? 32 ביטים / Segmented

  14. Absolute (direct) addressing • שימושים: משתנים פשוטים (גלובליים). בגלל הגישה לזיכרון – השיטה מהשיטות הקודמות. • קוד מכונה: כתובת המשתנה בזיכרון היא חלק מהפקודה • אסמבלי: הכתובת מופיעה כמספר או כ- Label (ב- NASM – בתוך סוגריים מרובעים, בשפות אסמבלי אחרות – ללא סוגריים) דוגמה: שפת מכונהאסמבלי inc word [my_string] FF060010 inc word [0x1000]

  15. Absolute (direct) addressing שימושים: משתנים פשוטים (גלובליים) דוגמה: שפת C int x=0; x++; אסמבלי(עשוי להיכתב בצורה הבאה, בהתעלם מ- sections) x: dd 0 ; NOT a variable definition!!! inc dword [x]

  16. Register indirect addressing • השיטה: המשתנה נמצא בזיכרון. כתובתו נמצאת ברגיסטר • שימושים: גישה ע"י מצביע – pointer(המצביע נמצא ברגיסטר) • אסמבלי: הכתובת מופיעה כרגיסטר בסוגריים מרובעים (הערה: ניתן להשתמש רק ברגיסטרים של 32 ביט) register memory add1 משתנה add1

  17. Register indirect addressing • השיטה: המשתנה נמצא בזיכרון, כתובתו נמצאת ברגיסטר • שימושים: גישה ע"י מצביע – pointer(המצביע נמצא ברגיסטר) • אסמבלי: הכתובת מופיעה כרגיסטר בסוגריים מרובעים דוגמה: אסמבלי inc byte [ebx] אם הערך ב- ebx הוא 0x104 מגדילים ב-1 את ה-byte הנמצא בכתובת 0x104 בזיכרון

  18. Register indirect addressing שימושים: גישה ע"י מצביע – pointer(המצביע נמצא ברגיסטר) רשימות של משתנים (arrays) דוגמה: שפת C *p = *p + 1; אסמבלי(בהנחה שהמצביע p נמצא ברגיסטר ebx) inc byte [ebx] כתובת המשתנה נקראת – כתובת אפקטיבית (EA - Effective Address) במסמכי אפיון - מציינים לעתים משוואה לחישובה. כאן: EA = [ebx]

  19. Register vs. Register Indirect שימו לב: • Register addressing mode p++; inceax; • Register indirect addressing *p = *p+1; inc [eax];

  20. Displacement addressing • השיטה: המשתנה נמצא בזיכרון. כתובתו מוזזת במרחק קבוע מהכתובת המוגדרת ע"י הרגיסטר:EA= [reg] + displacement • שימושים: גישה ל- structure • אסמבלי: מוגדר הרגיסטר ומרחק התזוזה register memory add1 add1 displacement משתנה

  21. Displacement addressing • השיטה: המשתנה נמצא בזיכרון. כתובתו מוזזת במרחק קבוע מהכתובת המוגדרת ע"י הרגיסטר:EA= [reg] + displacement • שימושים: גישה ל- structure • אסמבלי: מוגדר הרגיסטר ומרחק התזוזה דוגמה: אסמבלי inc byte [ebx + 0x10] אם הערך ב- ebx הוא 0x104 מגדילים ב-1 את ה-byte הנמצא בכתובת 0x114 בזיכרון

  22. Displacement addressing שימושים: גישה ל- structure דוגמה: שפת C structfoo {int x; int y; char z;}; p = & foo; /* assume correct type */ p -> z++; אסמבלי movebx, [p] inc byte [ebx + 8]

  23. Relative addressing • השיטה: המשתנה נמצא בזיכרון. כתובתו מוזזת במרחק קבוע מהכתובת המוגדרת ע"י מונה התוכנית (PC):EA= [PC] + displacement • שימושים: קפיצה מותנית, קוד שאינו תלוי מיקום • אסמבלי: מוגדר מרחק התזוזה כמספר או כ- Label דוגמה: שפת מכונהאסמבלי 7502jnz next ; =jnz $+4 6640 inc eax 66F7D8 next: negeax

  24. Indexed addressing (with displacement) • השיטה: EA= myarray+reg*index • שימושים: גישה למערך (Array) • אסמבלי: מוגדר רגיסטר, כופל (1, 2, או 4) וכתובת בסיס (מחושב בבתים) register register x index myarray משתנה

  25. Indexed addressing (with displacement) • השיטה: EA= reg*index + displacement • שימושים: גישה למערך (Array) • אסמבלי: מוגדר רגיסטר, כופל (1, 2, או 4) וכתובת בסיס (מחושב בבתים) דוגמה: inc dword [myarray + ebx*4] אם הערך של ebx הוא 5, מעלים את ערך המלה הכפולה הנמצאת בכתובת myarray+20 בזיכרון.

  26. Indexed addressing (with displacement) השיטה: EA= reg*index + displacement גרסאות: ללא Displacement inc dword [ebx*4] Indexed עם Indirect inc dword [ebx*4 + eax] Indexed עם IndirectןעםDisplacement inc dword [myarray + ebx*4 +eax]

  27. לעתים עדיף לא להשתמש בשיטה זו: לא תמיד נשתמש בכל החישוב, עבור כל איבר למשל בתמונות ניתן להתקדם לאורך שורה ע"י +1 ניתן להתקדם לאורך עמודה ע"י + רוחב שורה

  28. Auto-increment & Auto-decrement שיטה: Auto-increment לאחר הפעולה Auto-decrement לפני הפעולה 680x0 Assembly:קידום הפוינטר לפני או אחרי הגישה MOVI.B #5, -(A7) ; decrement pointer then move immediate 5 MOVI.B (A7)+, D0 ; increment pointer then move to D0 שפת C: c=*p++;

  29. Auto-increment & Auto-decrement 80x86 Assembly:מימוש המחסנית push 5 חיקויים של 80x86 (לא במקורי): mov –[esp], 5

  30. Double indirect addressing modes שיטה:המשתנה נמצא בכתובת המוגדרת ע"י המידע הנמצא במקום בזיכרון עליו מצביע הרגיסטר VAX: inc *(r1) קיימות שיטות נוספות – מסובכות יותר ופחות אנו לא נעסוק ב- memory segments r1 add1 add1 add2 add2 משתנה

  31. סיכום ביניים • שיטת המיעון מוגדרת בפקודה • שיטות המיעון - תלויות מכונה • מידע יכול להישמר ברגיסטרים או בזיכרון • לא כל שיטות המיעון, ולא כל שילוביהן מותרים עבור כל פקודה! • רוב המידע מאוחסן בזיכרון הראשי • 80x86/Linux: גישה לבתים מיפוי מלים לפי little endian מרחב כתובות232

  32. Addressing modes • Register inc eax • Immediate add ax, 0x4501 • Direct (absolute) inc word [0x1000] • Register indirect inc byte [ebx] • Displacement (offset) inc byte [ebx + 0x10] • Relative jnz next • Indexed inc dword [myarray + ebx*4] • Indirect • Auto-increment/ auto-decrement • … כל שיטת מיעון מתאימה לסוג מסוים של גישה למידע

  33. Addressing modes 32 bit addressing modes

  34. פרוצדורות, פונקציות ומנשקים לשפות עיליות

  35. במה נעסוק • למה וכיצד יוצרים תכניות מודולאריות • כיצד מתממשקים עם שפות עיליות, כדוגמת C • פרוצדורות ופונקציות • סוגי מידע ודרכים לשמירת ולהעברת מידע • Activation frame • Calling conventions • העברת ערך • העברת כתובת • מחסנית אסמבלי, C, ועוד

  36. פונקציות ופרוצדורות פונקציות ופרוצדורות – דוגמאות לתת-תכניות בשפות עיליות פרוצדורות – לא מחזירות ערך, אינן חייבות להסתיים פונקציות – פרוצדורות המחזירות תוצאה התכנית הקוראת (לפרוצדורה/פונקציה) והפרוצדורה /פונקציה חייבות להסכים על צורת העברת המידע ביניהן. Calling convention - "הכללים המוסכמים" להעברת המידע

  37. פונקציות ופרוצדורות X0,X1, Y0 שרטוט קו אופקי X0- X1, Y0 שרטוט קו אופקי Xi- Xj, Yk CALL X0,X1, Y1 שרטוט קו אופקי X0- X1, Y1 CALL X0,Y0, Y1 שרטוט קו אנכי X0, Y0 – Y1 שרטוט קו אנכי Xn, Ym – Yl CALL שרטוט קו אנכי X1, Y0 – Y1 X0,Y0, Y1 מודולאריות: חלקי תכנית המבצעים פעולות מוגדרות ניתנים לשימוש חוזר ע"י קריאה מחלקים שונים לאורך התכנית CALL

  38. אחסון מידע בשפות עיליות סוגים שונים של אחסון מידע: • משתנים גלובליים (global variables) • משתנים מקומיים (local variables) • פרמטרים/ארגומנטים של פונקציות/פרוצדורות • הערכים המוחזרים • Dynamically allocated data

  39. משתנים גלובליים משתנה גלובלי - משתנה המוגדר בד"כ בתחילת התכנית והיכול לשמש בכל חלקיה. לכל משתנה גלובלי יכולה להיות כתובת קבועה בזיכרון. ב-C: int x=40; באסמבלי: X DD 40 • הכתובת של X בזיכרון תלויה בערך המונה כשמעבדים שורה זו. • זה לא משתנה!!! אין בדיקת type בכתיבה. ניתן "לדרוך" על מקום זה.

  40. משתנים מקומיים משתנים מקומיים – משמשים בחלקים מסוימים של התכנית בלבד. ערכים ומשתנים מקומיים זקוקים לשם ייחודי כדי למנוע התנגשויות. ב-C: x=foo(x, &y); קריאה לפונקציה foo(int a, int *b){ int c= *b; return(c) } הפונקציה ערך מוחזר

  41. ניתן להפעיל תת-תכנית ע"י קפיצה (JMP) • החזרה בעייתית מה קורה אם כתובת החזרה קבועה? הפונקציה חוזרת תמיד לאותו מקום בקוד • לא ניתן לקרוא לפונקציה/פרוצדורה ממקומות שונים בתכנית • לא ניתן לבצע רקורסיה • לא ניתן לבצע threading

  42. Activation frame Activation frame- מסגרת המאותרת עבור כל הפעלה של פונקציה. כוללת: • כתובת חזרה • מצבי מכונה נוספים (דגלים) • ארגומנטים של הפונקציה • משתנים מקומיים • בשפות מסוימות – nested scope כיצד? הפתרון הפשוט – לשמור את המסגרת במחסנית.

  43. Calling conventions כיצד קוראים לפונקציה? אפשרות 1 (באסמבלי): • ארגומנטים - ברגיסטרים מוסכמים • ערכים מוחזרים - ברגיסטר מוסכם (או אפילו בדגלים) • מהירות אופטימאלית (במקרים רבים) • קשה להכליל • לא ניתן להעברה • מספר הרגיסטרים קטן

  44. Calling conventions כיצד קוראים לפונקציה? אפשרות 2: • ארגומנטים - במחסנית • ערכים מוחזרים – ברגיסטרים • די מהיר • ניתן להעברה במידה סבירה • מתאים לשפות עיליות עם ערך מוחזר יחיד ברוב הקומפיילרים של C

  45. Calling convention for C 1. מה מעבירים לפונקציה? Call by value – השיטההפשוטה והכללית בשפות עיליות: • מספר משתנה של ארגומנטים - במחסנית • ערכים מוחזרים – ברגיסטרים • מאפשרת מספר משתנה של ארגומנטים

  46. Call by value 2. PUSH • הערכים נדחפים למחסנית בסדר הפוך • לכן: הארגומנט הראשון תמיד בראש המחסנית TOS • מה קורה אם הפונקציה מצפה ל-k ארגומנטים, אבל קוראים לפונקציה עם n ארגומנטים, ו- n>k? • הפונקציה תעבוד כראוי, ולא תתייחס כלל לארגומנטים המיותרים • מה עושים אם רוצים לתמוך במספר משתנה של ארגומנטים (nargs)? • דוחפים את מספר הארגומנטים אחרי הארגומנט השמאלי ביותר

  47. Call by value 3. ערכים מוחזרים - ברגיסטרים • אינטל 80x86: • AL, AX, EAX • מוטורולה 680x0: • D0 – למידע (data), A0 – למצביע (Pointer) • VAX: • r0

  48. תזכורת: המחסנית מקום בזיכרון המשמש לאחסון זמני של data וכתובות • גודל כל "תא" 16 או 32 ביט (word / dword) • ESP מצביע על ה- Byte התחתון של הערך האחרון שנכנס • גודל המחסנית (במקרה שלנו) 232 • PUSH • POP

  49. PUSH & POP PUSH • כיוון ה- stack pointer למקום המתאים, בהתאם לגודל האופרנד/המשתנה esp=esp-2) או (esp=esp-4 • הכנסת הערך החדש לפי – little endian כך ש- esp מצביע על ה- byte התחתון POP • הוצאת הערך מהמחסנית • העלאת ה- esp בהתאם לגודל האופרנד

  50. CALL & RET • CALL • קפיצה בלתי-מותנית לתת-התכנית • PUSH לכתובת הפקודה הבאה • RET • POP של הכתובת • ביצוע הפקודה הבאה חשוב לנהל נכון את המחסנית כדי שהתכנית תתקדם כפי שאנו רוצים!!!

More Related