Computer Architecture and Assembly Language Practical Session 13
Computer Architecture and Assembly Language Practical Session 13 שאלות חזרה למבחן
2 שאלה %macro print pusha mov mov int popa %endmacro section. rodata File: dd MJ: db : וכן נתונים בזכרון , הבאה macro נתונה הגדרת 3 eax, 4 ebx, %1 ecx, %2 edx, %3 0 x 80 ; write ; file descriptor ; address ; byte count 1 “Beat it”, 10, 0 : איזה מהשימושים הבאים במקרו יגרום לפעולה לא נכונה של התוכנית a) b) c) d) mov print mov print ebx, MJ 1, ebx, 9 1, MJ, 9 dword [File], MJ, 9 edx, 9 1, MJ, edx
2 שאלה %macro print pusha mov mov int popa %endmacro section. rodata File: dd MJ: db : וכן נתונים בזכרון , הבאה macro נתונה הגדרת 3 eax, 4 ebx, %1 ecx, %2 edx, %3 0 x 80 ; write ; file descriptor ; address ; byte count 1 “Beat it”, 10, 0 : איזה מהשימושים הבאים במקרו יגרום לפעולה לא נכונה של התוכנית a) b) c) d) mov print mov print ebx, MJ 1, ebx, 9 1, MJ, 9 dword [File], MJ, 9 edx, 9 1, MJ, edx
3 שאלה ? (3 - ל 0 בין ebx )עבור ebx ברגיסטר Gloat מה תחזיר הפונקציה 2 כפול ebx ( ד ebx בחזקת 2 ( ג 2 בחזקת ebx ( ב 0 ( א Gloat: Tab: F 1: F 2: F 3: F 4: shl ebx, 2 jmp [ebx+Tab] dd F 4 dd F 3 dd F 2 dd F 1 add ebx, 4 shr ebx, 2 ret
3 שאלה ? (3 - ל 0 בין ebx )עבור ebx ברגיסטר Gloat מה תחזיר הפונקציה 2 כפול ebx ( ד ebx בחזקת 2 ( ג 2 בחזקת ebx ( ב 0 ( א Gloat: Tab: F 1: F 2: F 3: F 4: shl ebx, 2 jmp [ebx+Tab] dd F 4 dd F 3 dd F 2 dd F 1 add ebx, 4 shr ebx, 2 ret ebx = 0 shl 0, 2 = 0 jmp [0+Tab] = jmp F 4 shr 0, 2 = 0 ebx = 0 ebx = 1 shl 1, 2 = 1*2*2 = 4 jmp [4+Tab] = jmp F 3: add 4, 4 = 8 shr 8, 2 = 8/2/2 = 2 ebx = 2 shl 2, 2 = 2*2*2 = 8 jmp [8+Tab] = jmp F 2: add 8, 4 = 12 F 3: add 12, 4 = 16 shr 16, 2 = 16/2/2 = 4 ebx = 4 ebx = 3 shl 3, 2 = 3*2*2 = 12 jmp [12+Tab] = jmp F 1: add 12, 4 = 16 F 2: add 16, 4 = 20 F 3: add 20, 4 = 24 shr 24, 2 = 24/2/2 = 6 ebx = 6
3 שאלה ? (3 - ל 0 בין ebx )עבור ebx ברגיסטר Gloat מה תחזיר הפונקציה 2 כפול ebx ( ד ebx בחזקת 2 ( ג 2 בחזקת ebx ( ב 0 ( א Gloat: Tab: F 1: F 2: F 3: F 4: shl ebx, 2 jmp [ebx+Tab] dd F 4 dd F 3 dd F 2 dd F 1 add ebx, 4 shr ebx, 2 ret ebx = 0 shl 0, 2 = 0 jmp [0+Tab] = jmp F 4 shr 0, 2 = 0 ebx = 0 ebx = 1 shl 1, 2 = 1*2*2 = 4 jmp [4+Tab] = jmp F 3: add 4, 4 = 8 shr 8, 2 = 8/2/2 = 2 ebx = 2 shl 2, 2 = 2*2*2 = 8 jmp [8+Tab] = jmp F 2: add 8, 4 = 12 F 3: add 12, 4 = 16 shr 16, 2 = 16/2/2 = 4 ebx = 4 ebx = 3 shl 3, 2 = 3*2*2 = 12 jmp [12+Tab] = jmp F 1: add 12, 4 = 16 F 2: add 16, 4 = 20 F 3: add 20, 4 = 24 shr 24, 2 = 24/2/2 = 6 ebx = 6
4 שאלה L: dw 7 L 1: dw 0 x. F 7 AC : המוגדרים בצורה הבאה L 1 - ו L עלינו להחליף בין ערכי המשתנים ? אילו מקטעי הקוד הבאים לא יבצע את זאת כנדרש a) b) a) mov ax, [L] mov bx, [L 1] mov [L 1], ax mov [L], bx c) mov eax, [L 1] rol eax, 16 mov [L 1], eax mov eax, [L] rol eax, 16 mov [L], eax d) mov eax, [L] xor ax, [L 1] xor [L], ax xor [L 1], ax RAM 0 x? ? 0 x. F 7 0 x. AC L 1 mov ax, [L] mov bx, [L 1] mov [L 1], ax mov [L], bx ax = 0 x 00 0 x 07 bx = 0 x. F 7 0 x. AC [L 1] = 0 x 07 , [L 1+1] = 0 x 00 [L] = 0 x. AC , [L+1] = 0 x. F 7 a) mov eax, [L] rol eax, 16 mov [L], eax = 0 x. F 7 0 x. AC 0 x 00 0 x 07 eax = 0 x 00 0 x 07 0 x. F 7 0 x. AC [L] = 0 x. AC , [L+1] = 0 x. F 7 , [L 1] = 0 x 07 , [L 1+1] = 0 x 00 a) mov eax, [L 1] rol eax, 16 mov [L 1], eax = 0 x? ? 0 x. F 7 0 x. AC eax = 0 x. F 7 0 x. AC 0 x? ? [L 1] = 0 x? ? , [L 1+1] = 0 x? ? 0 x 00 0 x 07 a) mov eax, [L] xor ax, [L 1] xor [L], ax xor [L 1], ax L eax = 0 x. F 7 0 x. AC 0 x 00 0 x 07 ax = 0 x 0007 xor 0 x. F 7 AC = 0 x. F 7 AB [L] = 0 x 0007 xor 0 x. F 7 AB = 0 x. F 7 AC [L 1] = 0 x. F 7 AC xor 0 x. F 7 AB = 0 x 0007
4 שאלה L: dw 7 L 1: dw 0 x. F 7 AC : המוגדרים בצורה הבאה L 1 - ו L עלינו להחליף בין ערכי המשתנים ? אילו מקטעי הקוד הבאים לא יבצע את זאת כנדרש a) b) a) mov ax, [L] mov bx, [L 1] mov [L 1], ax mov [L], bx c) mov eax, [L 1] rol eax, 16 mov [L 1], eax mov eax, [L] rol eax, 16 mov [L], eax d) mov eax, [L] xor ax, [L 1] xor [L], ax xor [L 1], ax RAM 0 x? ? 0 x. F 7 0 x. AC L 1 mov ax, [L] mov bx, [L 1] mov [L 1], ax mov [L], bx ax = 0 x 00 0 x 07 bx = 0 x. F 7 0 x. AC [L 1] = 0 x 07 , [L 1+1] = 0 x 00 [L] = 0 x. AC , [L+1] = 0 x. F 7 a) mov eax, [L] rol eax, 16 mov [L], eax = 0 x. F 7 0 x. AC 0 x 00 0 x 07 eax = 0 x 00 0 x 07 0 x. F 7 0 x. AC [L] = 0 x. AC , [L+1] = 0 x. F 7 , [L 1] = 0 x 07 , [L 1+1] = 0 x 00 a) mov eax, [L 1] rol eax, 16 mov [L 1], eax = 0 x? ? 0 x. F 7 0 x. AC eax = 0 x. F 7 0 x. AC 0 x? ? [L 1] = 0 x? ? , [L 1+1] = 0 x? ? 0 x 00 0 x 07 a) mov eax, [L] xor ax, [L 1] xor [L], ax xor [L 1], ax L eax = 0 x. F 7 0 x. AC 0 x 00 0 x 07 ax = 0 x 0007 xor 0 x. F 7 AC = 0 x. F 7 AB [L] = 0 x 0007 xor 0 x. F 7 AB = 0 x. F 7 AC [L 1] = 0 x. F 7 AC xor 0 x. F 7 AB = 0 x 0007
5 שאלה פקודת חיבור שני אופרנדים בזכרון. (BIT 32 של BUS )רוחב 68040 על מעבד BIT 32 דרוש לבצע חיבור של שני מספרים של N חייב להתחיל בכתובת המתחלקת ב N וכל אופרנד באורך , BIG ENDIAN ייצוג המספרים הוא. מותרת במעבד זה הוא משתנה שמשתרע על איזור X). Y והתוצאה צריכה להיות ב , Y ו X המספרים נמצאים בזכרון בכתובת. (alignment) ? איזו מהתוכניות הבאות תוכל לבצע את הנדרש. (X_LOW וגם X_HIGH align 4 A: dw 0 X: X_HIGH: dw 5 ; dw reserves space for 2 byte “variable” X_LOW: dw 10 JUNK: dw 0 Y: dl 700 ; dl reserves space for 4 byte “variable” • • ADD. W X, Y ; add word at address X in ; memory into word at address Y ADDX. W X+2, Y+2 ; add word at X+2 in memory into ; word at Y+2 in memory with extend flag (like CF) ADD. W X+2, Y+2 ADDX. W X, Y MOVE. L X, D 0 ; move longword (32 bits) at X to register D 0 ADD. L D 0, Y ; add D 0 to Y ADD. L X, Y ; add longword X to Y
5 שאלה פקודת חיבור שני אופרנדים בזכרון. (BIT 32 של BUS )רוחב 68040 על מעבד BIT 32 דרוש לבצע חיבור של שני מספרים של N חייב להתחיל בכתובת המתחלקת ב N וכל אופרנד באורך , BIG ENDIAN ייצוג המספרים הוא. מותרת במעבד זה הוא משתנה שמשתרע על איזור X). Y והתוצאה צריכה להיות ב , Y ו X המספרים נמצאים בזכרון בכתובת. (alignment) ? איזו מהתוכניות הבאות תוכל לבצע את הנדרש. (X_LOW וגם X_HIGH align 4 a) Y_HIGH += X_HIGH b) Y_LOW + = X_LOW d) ADD. L is not legal by the A: dw 0 Y_LOW + = X_LOW + CF Y_HIGH += X_HIGH+ CF same reason as MOVE. L X: RAM X_HIGH: dw 5 ; dw reserves space for 2 byte “variable” 12 X_LOW: dw 10 0 x. BC 11 700 = 0 x 2 BC d JUNK: dw 0 0 x 02 10 Y: dl 700 ; dl reserves space for 4 byte “variable” 0 x 00 9 0 x 00 • ADD. W X, Y ; add word at address X in y 8 ; memory into word at address Y 0 7 ADDX. W X+2, Y+2 ; add word at X+2 in memory into 0 6 JUNK ; word at Y+2 in memory with extend flag (like CF) 0 x 0 A • ADD. W X+2, Y+2 5 0 x 00 ADDX. W X, Y X_LOW 4 • MOVE. L X, D 0 ; move longword (32 bits) at X to register D 0 0 x 05 3 ADD. L D 0, Y ; add D 0 to Y 0 x 00 X≡ X_HIGH • ADD. L X, Y ; add longword X to Y 2 0 align 4 move 1 c) MOVE. L is not legal since its X operand is in memory and of to a closest 0 size L(longword = 4 bytes), so X should begin in memory at A 0 address in address that %4 = 0. appropriate X begins in memory at address with offset 2 from some address memory section that is divided by 4, so X’s address is not divided by 4. which is %4 = 0
- Slides: 15