המצגת נטענת. אנא המתן

המצגת נטענת. אנא המתן

Jump tables, review questions

מצגות קשורות


מצגת בנושא: "Jump tables, review questions"— תמליל מצגת:

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

2 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

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

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

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

6 שאלה 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, print 1, MJ, edx

7 שאלה 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, print 1, MJ, edx

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

9 שאלה 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

10 שאלה 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

11 שאלה 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

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

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

14 שאלה 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 לא יכולה לעבוד, כי היא לא מוציאה משתנים מהמחסנית

15 שאלה 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 לא יכולה לעבוד, כי היא לא מוציאה משתנים מהמחסנית

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

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


הורד את "ppt "Jump tables, review questions

מצגות קשורות


מודעות Google