נא לקרא את השאלות בעין ולענות על 15 שאלות מתוך 11. לשאלות משקל זהה, כל שאלה 5 נק', וכל תשובה דרוש למסן את כל השובות הנכונות. במחשב נתון מתפלגות השכיחות של הפעולות לפי SPEC נתון כדלקמן. שים לב שחישובים של משספרים ממשיים מחושב ע"י שימוש בחישובי Integer ותופסים 66% מסך כל חישובי ה- Integer מס' מחזורי שעון שכיחות משפחת פעולות 3 50% Integer 8 20% Memory Access 5 30% Branching שתי השאלות הבאות מתיחסות למחשב זה שאלה 1. אם נתון שתדירות השעון של מעבד מחשב זה היא 10, Hz זמן הריצה של הממוצע של תוכנה שמכילה 566 פקודות הוא: time = CPI ClockTime InstCount = 4.6 0.1 500=230 sec תשובה: שאלה 0. לשיפור ביצוע מחשב זה הוחלט להוסיף יחידה מתמטית לחישובים ממשיים )float( אשר תחליף כל שלוש פעולות Integer שהוקצו לחישובים )מספרים( ממשיים בפעולת float אחת שדורשת בממוצע 4 מחזורי שעון. ממוצע המחזורים לפקודה )CPI( אחרי השיפור הוא: CPI = (5 0.3 + 8 0.2+3 (0.4*0.5) + 4 ((0.6/3) 0.5)) /0.8 = (5 0.3+8 0.2+3 0.2+4 0.1)/0.8 = (1.5+1.6+0.6+0.4)/0.8=5.125 תשובה: שאלה 3. סדר את המשימות הבאות לפי יעילות המקבול )1 הכי יעיל( עבור חישוב n איברים בכל משימה 3 2 1 חישוב הנוסחה הרקורסיבית מכפלה פנימית של שני וקטורים a i =a i-1 +3*a i-2 חיבור שני וקטורים שאלה 4. מה ידפיס קטע הקוד הבא: push 'bor' push 'sud' push esp call printf add esp, 12 0\ לא ידוע( 'bor' 'sud' לא ניתן לקבוע )סוף מחרוזת 'borsud' שאלה 5. איזה מקטעי הקוד הבאים ידליק את סיבית ה-? overflow 1
mov al, -128 sub al, 1 mov ax, 127 add ax, 2 mov al, 0 sub al, 1 mov al, 0xFF add al, 1 שאלה 1. להלן קטע לא מלא מתוך קובץ רשימה file) (listing : 6 00000000 EB0C jmp short L1 ; jmp within a byte range 7 00000002 90 nop 8 00000003 EB04 jmp short L2 9 00000005 90 nop 10 00000006 **** jmp short L1 11 00000008 90 nop מהו קוד המכונה שירשם במקום המצוין בכוכביות )'*'(? EB0E EB0C EB06 FF06 שאלה 7. בהינתן קטע הקוד הבא, ידוע שערכו של הרגיסטר al הוא 1 וערכו של cx כמו כן ידוע שמספר סיביות ה- 1 של bl הוא חיובי. נסמנו ב- x. הוא 6. mubarak: where: here: end : test bl, al jnz where rol al, 1 jmp mubarak inc cx not al and bl, al jz end not al rol al, 1 cmp al, 1 jz mubarak test bl, al jz here inc cx jmp here מה תחשב התוכנית mubarak לרגיסטר? cx 2
8*x טור חשבוני x++1+2 אף תשובה מהנ"ל X 2 שאלה 8. בארכיתקטורות אינטל יש שני מודים Read Mode ו-.Protected Mode אחד ההבדלים ביניהם החשוב ביניהם נובע מצורת יצוג וחישוב כתובות בזכרון. סמן את הנכון מהאמירות דלהלן לכל תוכנה ב- Mode Protected יש טבלת (LDT) local descriptor table שמחזיקה את נותוני סגמטני הזכרון שלה יכולות ליצג אותה כתובת ליניארית Segment:Offset כתובות שונות של ב- Real Mode.(Linear addess) בשני המודים יש התאמה חד-חד ערכית ועל בין כתותב לוגית address( )logic לכתותב ליניארית. כל האמיורת א-ג אינן נכונות. שאלה 9. הפקודה call מבצעת קריאה לרוטינה,)Routine( והדלקת Interrupt מבצעת קריאה גם ל- לגבי שני סוגי האמירות הנכונות (ISR).Interrupt Service Routine סמן את שנקראת Routine הרוטינות בהקשר של.Protected Mode שני הרוטינות מוחזקות במרחב הזיכרון של האפליקציה רטוינה רגילה ו- ISR מבצצעות חזרה ע"י שימוש באותה פקודה לפני הקריאה לשתי הרוטינות נשמרת כתובת החזרה. כל האמיורת א-ג אינן נכונות. שאלה 12. במעבדי x86 יש שתי פקודות pusha ו- popa שמאפשרות דחיפה והוצאה של כל הרגסטרים במחסנית. סמן את האמירות הנכונות. תמיד נכון להשתמש בפקודה pusha בתיחלת הרוטינה ו- popa ממש לפני פוקדת. 1. עדיף להשתמה בפקודות אלו אם אנחנות משתמשים בחלק גדול מהרגסטרים ברוטינה. 2. מאחר וזו פקודה אחת תמיד יותר יעיל להשתמש בהם אם רוצים לשמור יותר משני רגסטרים. 3. פקודות אלו נבנו במיוחד עבור ISR שבהן יש צורך לשמור כל המצב )context( לפני הקפיצה ולא 4. מומלץ להשתמש בהם ברוטינות רגילות. void Sum(int* a, int n, int* s){ int i ; *s = 0 ; for ( i = 0 ; i < n ; i++) *s = *s + a[i] ; } Sum(a, n, &s); שאלה 11. נתונה הפונקציה Sum והקריאה שלה בשפת C. איך יראה קוד של הפונקציה והקריאה לה, בתרגום לאסמבלי. 3
Sum: sub ESP, 4 ; mov DWORD [EBP-4], 0 mov EBX, [EBP+8] add DWORD[EBP-4], DWORD [EBX] int EBX cmp EBX, DWORD[EBP+12], jnz L mov DWORD[EBP+16], DWORD[EBP-4] pop EBP 8 push s push [n] push a Swap: xor EAX, EAX mov EBX, [EBP+8] mov ECX, [EBP+12] mov EDX, [EBP+16] add EAX, [EBX] add EBX, 4 loop L mov [EDX], EAX pop EBP 12 push s push [n] push a Swap: sub ESP, 4 ; xor EAX, EAX mov EBX, [EBP+16] mov ECX, [EBP+12] add EAX, EBX add EBX, 4 loop L mov [EBP+8], EAX add ESP, 4 12 push [s] push [n] push a Swap: sub ESP, 4 mov EAX, 0 mov EBX, [EBP+8] mov ECX, [EBP+12] add EAX, DWORD [EBX] add EBX, 4 loop L mov [EBP+16], EAX pop EBP 12 push s push n push [a] 4
שאלה 10. נתון מבנה נתונים להחזקת נתונים של סטודנט בקורס שכולל מזהה, שם, ציון עבודות, ציון מבחן, וציון סופי. נתוני הסטודנטים מוחזקים במערך של Student(.)struct סמן את הקוד שמחשב את הציון הסופי של סטודנטים כאשר הציון הסופי הינו סכום ציון המבחן וציון העבודות. הנח ש- stud הוא מערך הסטודנטים שקטן מ- 1624 ו- ESI מכיל את האינדקס של הריקורד במערך. struct Student { int id ; char name[16]; short assignments ; short exam ; short final ; }; shl ESI, 4 add ESI, 10 mov AX, [stud+esi+20] mov DX, [stud+esi+22] add AX, DX mov [EBX+ESI+24], AX mov EAX, 26 mul ESI mov ESI, EAX mov EBX, stud mov AX, [EBX+ESI+20] add AX, [EBX+ESI+22] mov [EBX+SI+24], AX mov EBX, stud add EBX, ESI mov EAX, [EBX+20] mov EDX, [EBX +22] add EAX, EDX mov [EBX +24], EAX mov AX, 26 mul SI mov ESI, EAX mov EAX, stud[esi+20] mov EDX, stud[esi+22] add EAX, EDX mov [EBX + ESI+24], EAX שאלה 13. ניתן להבחין בין שני סוגים של שפות אסמבלי מבחינת עבודה עם הזכרון. במשפחה I הערכים נטענים מהזכרון לרגסטרים וכל פעולות ה- ALU נעשות על רגסטרים ובסוף התוצאה מועתקת לזכרון )מעבדי MIPS למשל( במשפחה II ארגומנט של פעולת ALU יכול להיות כתובת בזכרון ( IA32 למשל(. סמן את הנכון גבי מדד זה משפחה I מאפשרות בנית ארכיתקטורה יותר יעילה )שערים לוגים יחסית לביצועים( משפחה II מאפשרות קידוד )תכנות( יותר גמיש מזוית ראיה של מתכנת. לשתי המשפחות יש אותם ביצועים בממוצע בהנחה שהמרכיבים האחרים זהים. אין הבדל בית שתי המשפחות. שאלה 11. מה יהיה מספר הגישות לזיכרון במקרה הגרוע עבור הפקודה add [eax+0x1234567], ebx כאשר ידוע שגודלו של ה- opcode הוא 2 בתים. 4 5 7 6 5
במעבדי x86 יש רגסטרים בגדלים שונים,1. 2 4, bytes סמן את הנכון שאלה 15. זה נבנה במיוחד לאפשר גישה יותר מהירה ויעילה לזכרון. לאפשר חישוב מהיר של כתובות שונות בזכרון. לאפשר עיבוד נוח של byte) Ascii-code 1) ו- (2byte) Unicode זה נבע מהתפתחות הארכיתקטורה והצורך לאפשר תאימות אחורה compatability).(back במעבד גרפי שמשתמש בארכיתקטורת CUDA עלות קריאה היא 3 מחזורי שעון, ועלות פעולות ALU שאלה 11. הוא שני מחזורי שעון, וזמן המתנה של קריאה אחרי כתיבה הוא 10 מחזורי שעון. הנח ככל thread לא יכול לבצע שתי קריאות מהזכרון בוזמנית. אם גודל של WARP הוא 16 כמה threads יספיקו להסתיר את זמן ההמתנה של קריאה אחרי כתיבה. הנח שהקוד הוא מהצורה c = a + b ; d = w * c ; 64 8 16 32 בהצלחה 6