Jump tables, review questions

Slides:



Advertisements
מצגות קשורות
אוגרים ומונים – Registers & Counters
Advertisements

תכנות בשפת C תרגול 11 - קבצים.
הרצאה 02 סוגי משתנים קרן כליף.
ייצוגים שונים של פונקציה
מבנה מחשבים ספרתיים זיכרון מטמון - המשך
תרגול מס' 1: מנהלות חזרה על ארכיטקטורת ה- MIPS
בקרת Sliding Mode של מערכת עקיבה
הרצאה 12: מיזוג, מיון ושימושים לפעולות על קבוצות - המשך
מבוא לתכנות ב-JAVA מעבדה 1
תרגול 11: רקורסיה ופיתוח טלסקופי
תרגול 11 מלכודות בניית ה-Debugger
לולאות Department of Computer Science-BGU 19 יולי 19.
נערך ע"י אריק הוד, הגימנסיה העברית הרצליה
תרגול מס' 8 משתנים מיוחסים מבוא ל-C++ קלט/פלט ב-C++
מבוא למדעי המחשב מ' - תירגול 9
OOO Execution of Memory Operations
Marina Kogan Sadetsky –
מבוא למדעי המחשב הרצאה מספר 12: רקורסיה
תכנות בשפת C תרגול 11 רשימות מקושרות מבנים
תרגול Introduction to C - Fall Amir Menczel.
Computer Programming תרגול 1 Summer 2016
תירגול 11: מיונים וחיפוש בינארי
תוכנה 1 בשפת Java שיעור מספר 13: "אל תסתכל בקנקן"
זאב וקסמן פישר מנהל ישראגריד 15/11/11
Out Of Order Execution (Part 1)
OOO Execution of Memory Operations
Engineering Programming A
תירגול 8:מצביעים והקצאה דינאמית
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
תרגול 6: פונקציות, סוגי משתנים, top-down design
תירגול 2: מבוא לתיכנות ב-C
Carry Save Adder (CSA).
מוטיבציה והשוואה בין מבני נתונים שלמדנו
כל הזכויות שמורות לגבריאל אנקרי © 2017
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
Web Services Delegates and Events ליווי מקצועי : ארז קלר
מבוסס על שקפים מאת יאן ציטרין
זיכרון מטמון 1 מבנה מחשבים ספרתיים
זיכרון מטמון 2 מבנה מחשבים ספרתיים
הרצאה 10: אלגוריתמי מיון רקורסיביים Merge sort ו-Quick sort
תורת הקומפילציה תרגול 9: תרגום לקוד ביניים
מבוא לתכנות למערכות מידע
מבנה מחשבים ספרתיים זכרון וירטואלי מבוסס על תרגול של מורן גביש
Computer Architecture and System Programming Laboratory
אלגוריתמי מיון רקורסיביים
כל הזכויות שמורות לגבריאל אנקרי © 2017
Branch Prediction בעריכת אורן קצנגולד Updated by Franck Sala.
Branch Prediction Oren Katzengold, Franck Sala, Elad Shtiegmann.
תרגול 13 : חזרה נכתב על-ידי לימור ליבוביץ נערך ע"י ישראל גוטר
Marina Kogan Sadetsky –
מת"מ מעבדה 7-8 רשימות.
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
מבוא לתכנות ב- JAVA מעבדה 4
מבנה כללי של היררכיית הקבצים עבור המסלול /A/B.txt
מבוא למדעי המחשב סמסטר ב' – 2008 מרצה: יעל סיגל מתרגל: ענבל בודובסקי.
Introduction to Programming in C
מצביעים Pointers – המשך...
מבוסס על שקפים מאת יאן ציטרין
Tutorial #10 MIPS commands
תרגול מס' 2: Data and Control Hazards
OOO Execution of Memory Operations
מבנה מחשבים ספרתיים תרגול מס' 4: זכרון מטמון 2.
עקרונות תכנות מונחה עצמים תרגול 9:C++ - תרגילים
Java Programming רשימות מקושרות - המשך
הפונקציה מחזירה את מספר התווים במחרוזת נתונה.
Engineering Programming A
רשימות מקושרות עבודה עם קבצים דוגמה
תמליל מצגת:

Jump tables, review questions Practical session 12 Jump tables, review questions

jump.s label_1: section .data push str0 jt: call printf dd label_1 str0: db "Got the number 0",10,0 str1: db "Got the number 1",10,0 str2: db "Out of bound",10,0 str3: db "num = %d",10,0 section .text align 16 global jumper extern printf jumper: push ebp mov ebp,esp pusha mov ebx,dword [ebp+8] push ebx push str3 call printf ; Print num add esp, 8 cmp ebx,0 ; Check if num is in bounds jb out_of cmp ebx ,1 ja out_of shl ebx,2 ; num = num * 4 jmp dword [ebx+jt] ; Jump according to address in table label_1: push str0 call printf add esp, 4 jmp end label_2: push str1 out_of: push str2 end: popa pop ebp ret

שאלות חזרה למבחן

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

שאלה 1 ברגיסטר eax נמצא הערך -1. יש לרשום 5 פקודות שונות שכל אחת מהן תגרום לכך שברגיסטר eax יהיה הערך 1. תשובה mov eax, 1 add eax, 2 neg eax shr eax, 31 and eax, 1

שאלה 3 נתונה הגדרת macro הבאה, וכן נתונים בזכרון: %macro print 3 pusha mov eax, 4 ; write mov ebx, %1 ; file descriptor mov ecx, %2 ; address mov edx, %3 ; byte count int 0x80 popa %endmacro section .rodata File: dd 1 MJ: db “Beat it”, 10, 0 איזה מהשימושים הבאים במקרו יגרום לפעולה לא נכונה של התוכנית: a) mov ebx, MJ print 1, ebx, 9 b) print 1, MJ, 9 c) print dword [File], MJ, 9 d) mov edx, 9 print 1, MJ, edx

שאלה 3 נתונה הגדרת macro הבאה, וכן נתונים בזכרון: %macro print 3 pusha mov eax, 4 ; write mov ebx, %1 ; file descriptor mov ecx, %2 ; address mov edx, %3 ; byte count int 0x80 popa %endmacro section .rodata File: dd 1 MJ: db “Beat it”, 10, 0 איזה מהשימושים הבאים במקרו יגרום לפעולה לא נכונה של התוכנית: a) mov ebx, MJ print 1, ebx, 9 b) print 1, MJ, 9 c) print dword [File], MJ, 9 d) mov edx, 9 print 1, MJ, edx

שאלה 4 עלינו לפנות מהזיכרון רשימה מקושרת ע"י שחרור כל האיברים שלה (בעזרת פונקצית free של C). ה-dword הראשון בכל רשומה הוא מצביע לרשומה הבאה. מצביע שערכו 0 הוא null pointer. נניח כי אוגר ecx מצביע לאיבר הראשון ברשימה. יש לממש את הקוד הנדרש.

שאלה 4 עלינו לפנות מהזיכרון רשימה מקושרת ע"י שחרור כל האיברים שלה (בעזרת פונקצית free של C). ה-dword הראשון בכל רשומה הוא מצביע לרשומה הבאה. מצביע שערכו 0 הוא null pointer. נניח כי אוגר ecx מצביע לאיבר הראשון ברשימה. יש לממש את הקוד הנדרש. תשובה free_list: cmp ecx, 0 jz end push [ecx] ; backup for the next pointer push ecx call free add esp, 4 pop ecx jmp free_list end: ret

שאלה 5 Gloat: shl ebx, 2 jmp [ebx+Tab] Tab: dd F4 dd F3 dd F2 dd F1 F1: add ebx, 4 F2: add ebx, 4 F3: add ebx, 4 F4: shr ebx, 2 ret מה תחזיר הפונקציה Gloat ברגיסטר ebx (עבור ebx בין 0 ל- 3) ? א) 0 ב) ebx בחזקת 2 ג) 2 בחזקת ebx ד) ebx כפול 2

שאלה 5 Gloat: shl ebx, 2 jmp [ebx+Tab] Tab: dd F4 dd F3 dd F2 dd F1 F1: add ebx, 4 F2: add ebx, 4 F3: add ebx, 4 F4: shr ebx, 2 ret מה תחזיר הפונקציה Gloat ברגיסטר ebx (עבור ebx בין 0 ל- 3) ? א) 0 ב) ebx בחזקת 2 ג) 2 בחזקת ebx ד) ebx כפול 2

שאלה 6 בעבודה עם co-routines על 86X80 כפי שמימשנו בקורס: א) ביצוע פקודת ret תמיד יגרום לחזרה לפרוצדורה קוראת. ב) אין אפשרות לקרוא מתוך co-routine לפונקצית ספריה. ג) ניתן מתוך co-routine לקרוא גם לפונקצית ספריה. ד) לכל co-routine אזור זיכרון text ו- data נפרד ללא חפיפה בין co-routines שונים.

שאלה 6 בעבודה עם co-routines על 86X80 כפי שמימשנו בקורס: א) ביצוע פקודת ret תמיד יגרום לחזרה לפרוצדורה קוראת. ב) אין אפשרות לקרוא מתוך co-routine לפונקצית ספריה. ג) ניתן מתוך co-routine לקרוא גם לפונקצית ספריה. ד) לכל co-routine אזור זיכרון text ו- data נפרד ללא חפיפה בין co-routines שונים.

שאלה 7 ברצוננו לכתוב קוד לשימוש רב-פעמי, שמכפיל את ערך eax פי 3. מוצעות 2 אפשרויות: שימוש במקרו triple או קריאה לפונקציה Triple: %macro triple 0 mov ebx, eax add eax, eax add eax, ebx %endmacro Triple: mov ebx, eax add eax, eax add eax, ebx ret א) בזמן ריצה ל-2 האפשרויות אותו זמן ביצוע. ב) השימוש ב- macro מהיר יותר, אבל דורש יותר זיכרון לקוד. ג) השימוש בפונקציה מהיר יותר, אבל דורש יותר זיכרון לקוד. ד) הפונקציה Triple לא יכולה לעבוד, כי היא לא מוציאה משתנים מהמחסנית

שאלה 7 ברצוננו לכתוב קוד לשימוש רב-פעמי, שמכפיל את ערך eax פי 3. מוצעות 2 אפשרויות: שימוש במקרו triple או קריאה לפונקציה Triple: %macro triple 0 mov ebx, eax add eax, eax add eax, ebx %endmacro Triple: mov ebx, eax add eax, eax add eax, ebx ret א) בזמן ריצה ל-2 האפשרויות אותו זמן ביצוע. ב) השימוש ב- macro מהיר יותר, אבל דורש יותר זיכרון לקוד. ג) השימוש בפונקציה מהיר יותר, אבל דורש יותר זיכרון לקוד. ד) הפונקציה Triple לא יכולה לעבוד, כי היא לא מוציאה משתנים מהמחסנית

שאלה 8 כמה גישות לזיכרון תתבצענה עבור הפקודה הבאה: add dword [x], eax בהנחה שה-opcode ללא אופרנדים אורכו 2 בתים, עבור המקרה הגרוע (כולל פעולת- (FETCH

שאלה 8 add dword [x], eax תשובה 2 בתים דרושים עבור ה- opcode ועוד 4 בתים נוספים עבור הכתובת. בסה"כ 6 בתים. הפקודה יכולה להיפרס על פני 3 בלוקים (של 4 בתים כ"א) בזיכרון. לכן מספר הפניות לזיכרון עבור ה- FETCH הוא 3. המקום שנמצא בכתובת x תופס 4 בתים (ההתייחסות במפורש ל- dword) כלומר במקרה הגרוע 2 בלוקים. 2 גישות לקריאת הערך + 2 גישות לעדכון ההוספה. מכאן שבסה"כ 7 גישות לזיכרון. Memory block instruction