Difference between revisions of "CSC231 Homework 3 2015"
(→Problem #3) |
|||
(9 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | |||
− | |||
--[[User:Thiebaut|D. Thiebaut]] 13:51, 19 September 2012 (EDT) | --[[User:Thiebaut|D. Thiebaut]] 13:51, 19 September 2012 (EDT) | ||
---- | ---- | ||
Line 85: | Line 83: | ||
=Problem #3= | =Problem #3= | ||
− | + | Here's a program: | |
<br /> | <br /> | ||
<source lang="asm"> | <source lang="asm"> | ||
+ | ; hw3_3.asm | ||
+ | ; Your name | ||
+ | ; displays a string, modify it, then print the modified version. | ||
+ | ; | ||
section .data | section .data | ||
− | msg1 db "I love chocolate", 10 | + | msg1 db 10, "I love chocolate", 10 |
msg1Len equ $-msg1 | msg1Len equ $-msg1 | ||
Line 105: | Line 107: | ||
;;; put your code here | ;;; put your code here | ||
+ | |||
;;; print modified string | ;;; print modified string | ||
Line 120: | Line 123: | ||
</source> | </source> | ||
<br /> | <br /> | ||
− | + | * When this program is executed, it prints out: | |
<code><pre> | <code><pre> | ||
+ | |||
I love chocolate | I love chocolate | ||
+ | |||
I love chocolate | I love chocolate | ||
</pre></code> | </pre></code> | ||
− | Your assignment is to add a section of code between the two print sections | + | Your assignment is to add a section of code between the two print sections, and not change the data section in any way. Your new code will modify the contents of the string msg1, in such a way that when the second print section is executed, it will print a new string, shown below. |
<br /> | <br /> | ||
<code><pre> | <code><pre> | ||
+ | |||
I love chocolate | I love chocolate | ||
+ | |||
J'aime chocolat! | J'aime chocolat! | ||
Line 137: | Line 144: | ||
<br /> | <br /> | ||
+ | In other word your new program should start with "I love chocolate" in msg1, print it, then modify msg1, print it again, and this time the message that shows up on the screen is "J'aime chocolat!". | ||
+ | |||
+ | Reminder, you cannot add any new variables to your program. | ||
+ | |||
Store your program in a file called '''hw3_3.asm''' and submit it in the HW 3 PB 3 section on Moodle. | Store your program in a file called '''hw3_3.asm''' and submit it in the HW 3 PB 3 section on Moodle. | ||
− | + | <tanbox> | |
+ | Note that the message starts with a 10, which is a linefeed. Make sure that when you modify the string, you do not change this character, as Moodle expects it to be the first character output by your program. | ||
+ | </tanbox> | ||
<br /> | <br /> | ||
Line 148: | Line 161: | ||
<br /> | <br /> | ||
<source lang="asm"> | <source lang="asm"> | ||
− | x | + | x dw 0, 1, 0xFF22 |
mov eax, dword[x] | mov eax, dword[x] | ||
Line 157: | Line 170: | ||
<br /> | <br /> | ||
* What is the content of the memory after the 3rd mov instruction has executed? | * What is the content of the memory after the 3rd mov instruction has executed? | ||
− | :::a) FF EE 01 00 22 FF | + | :::a) FF EE 01 00 22 FF |
− | :::b) EE FF 01 00 22 FF | + | :::b) EE FF 01 00 22 FF |
:::c) EE FF 01 22 FF | :::c) EE FF 01 22 FF | ||
:::d) FF EE 22 FF | :::d) FF EE 22 FF | ||
Line 165: | Line 178: | ||
* Submit your answer in HW 3 PB 4, on Moodle. | * Submit your answer in HW 3 PB 4, on Moodle. | ||
<br /> | <br /> | ||
+ | |||
=Problem #5= | =Problem #5= | ||
<br /> | <br /> | ||
Line 170: | Line 184: | ||
<br /> | <br /> | ||
<source lang="asm"> | <source lang="asm"> | ||
− | x | + | x dd 0, 1, 2 |
mov eax, dword[x+2] | mov eax, dword[x+2] | ||
Line 187: | Line 201: | ||
* Submit your answer in HW 3 PB 5, on Moodle. | * Submit your answer in HW 3 PB 5, on Moodle. | ||
<br /> | <br /> | ||
+ | <showafterdate after="20151008 00:00" before="20151230 00:00"> | ||
+ | =Solution Problems= | ||
+ | ==Problem 1== | ||
+ | 1 eax: 0x00004378 | ||
+ | 2 ebx: 0x12344321 | ||
+ | 3 ecx: 0x08766181 | ||
+ | 4 edx: 0xFFFF78FF | ||
+ | ==Problem 2== | ||
+ | 1 eax: 00000001 | ||
+ | 2 ebx: 00000002 | ||
+ | 3 ecx: 00000A2A | ||
+ | 4 edx: 00000100 | ||
+ | ==Problem 3== | ||
+ | ::<source lang="asm"> | ||
+ | |||
+ | |||
+ | section .data | ||
+ | msg1 db 10, "I love chocolate", 10 | ||
+ | msg1Len equ $-msg1 | ||
+ | |||
+ | |||
+ | section .text | ||
+ | global _start | ||
+ | _start: | ||
+ | |||
+ | ;;; print original string | ||
+ | mov eax, 4 | ||
+ | mov ebx, 1 | ||
+ | mov ecx, msg1 | ||
+ | mov edx, msg1Len | ||
+ | int 0x80 | ||
+ | |||
+ | ;;; put your code here | ||
+ | mov dword[msg1+1], "J'ai" | ||
+ | mov dword[msg1+5], "me c" | ||
+ | mov dword[msg1+9], "hoco" | ||
+ | mov dword[msg1+13], "lat!" | ||
+ | |||
+ | ;;; print modified string | ||
+ | mov eax, 4 | ||
+ | mov ebx, 1 | ||
+ | mov ecx, msg1 | ||
+ | mov edx, msg1Len | ||
+ | int 0x80 | ||
+ | |||
+ | ;;; exit | ||
+ | mov ebx, 0 | ||
+ | mov eax, 1 | ||
+ | int 0x80 | ||
+ | </source> | ||
+ | ==Problem 4== | ||
+ | |||
+ | EE FF 01 00 22 FF | ||
+ | |||
+ | ==Problem 5== | ||
+ | |||
+ | 00 00 00 00 01 00 00 FF 01 00 00 00 | ||
+ | |||
+ | </showafterdate> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | |||
<br /> | <br /> | ||
[[Category:CSC231]][[Category:Homework]] | [[Category:CSC231]][[Category:Homework]] |
Latest revision as of 10:51, 13 October 2015
--D. Thiebaut 13:51, 19 September 2012 (EDT)
This assignment is due on 10/07/15 at 11:55 p.m.
Contents
Problem #1
What is left in eax, ebx, ecx, and edx after the following instructions have executed?
mov eax, 0x0
mov ebx, 0x12345678
mov ecx, 0x87654321
mov edx, 0xffffffff
mov al, bl
mov ah, ch
mov dl, dh
mov dh, bl
mov bx, cx
mov ch, 'a'
mov cl, 'a'+32
Store your answers in a text file called hw3_1.txt, which contains just 4 lines, with the following format:
eax: 0xXXXXXXXX ebx: 0xXXXXXXXX ecx: 0xXXXXXXXX edx: 0xXXXXXXXX
Make sure the registers are in lowercase, and followed by a colon. Make sure they are listed in alphabetical order. In the lines above, XXXXXXXX are 8 hexadecimal digits representing the contents of a given register. The digits must ALL BE IN UPPERCASE.
So, for example, if you think eax will contain the value 1234aaff after the instructions have executed, you would write:
eax: 0x1234AAFF
If, on the other hand, you figure that eax contains 1, then you would write:
eax: 0x00000001
Submit your file in Section HW 3 PB 1 on Moodle. The grade for this exercise will not be visible.
Problem #2
What is left in eax, ebx, ecx, and edx after the following instructions have executed?
mov eax, 0x0
mov ebx, 0x1
mov ecx, 0x2
mov edx, 32
mov al, bl
mov ah, ch
mov dl, dh
mov dh, bl
mov bx, cx
mov ch, 0x0a
mov cl, 0x0a+32
Store your answers in a text file called hw3_2.txt, which contains just 4 lines, with the following format:
eax: 0xXXXXXXXX ebx: 0xXXXXXXXX ecx: 0xXXXXXXXX edx: 0xXXXXXXXX
Submit your file in Section HW 3 PB 2 on Moodle. The grade for this problem will not be visible until past the due date.
Problem #3
Here's a program:
; hw3_3.asm
; Your name
; displays a string, modify it, then print the modified version.
;
section .data
msg1 db 10, "I love chocolate", 10
msg1Len equ $-msg1
section .text
global _start
_start:
;;; print original string
mov eax, 4
mov ebx, 1
mov ecx, msg1
mov edx, msg1Len
int 0x80
;;; put your code here
;;; print modified string
mov eax, 4
mov ebx, 1
mov ecx, msg1
mov edx, msg1Len
int 0x80
;;; exit
mov ebx, 0
mov eax, 1
int 0x80
- When this program is executed, it prints out:
I love chocolate
I love chocolate
Your assignment is to add a section of code between the two print sections, and not change the data section in any way. Your new code will modify the contents of the string msg1, in such a way that when the second print section is executed, it will print a new string, shown below.
I love chocolate
J'aime chocolat!
In other word your new program should start with "I love chocolate" in msg1, print it, then modify msg1, print it again, and this time the message that shows up on the screen is "J'aime chocolat!".
Reminder, you cannot add any new variables to your program.
Store your program in a file called hw3_3.asm and submit it in the HW 3 PB 3 section on Moodle.
Note that the message starts with a 10, which is a linefeed. Make sure that when you modify the string, you do not change this character, as Moodle expects it to be the first character output by your program.
Problem #4
Assume that we have this simple code section:
x dw 0, 1, 0xFF22
mov eax, dword[x]
mov ax, 0xFFEE
mov dword[x], eax
- What is the content of the memory after the 3rd mov instruction has executed?
- a) FF EE 01 00 22 FF
- b) EE FF 01 00 22 FF
- c) EE FF 01 22 FF
- d) FF EE 22 FF
- e) EE FF 22 FF
- Submit your answer in HW 3 PB 4, on Moodle.
Problem #5
Assume that we have this simple code section:
x dd 0, 1, 2
mov eax, dword[x+2]
mov ah, 0xFF
mov dword[x+6], eax
- What is the content of the memory after the 3rd mov instruction has executed?
- a) 00 00 00 00 00 01 FF 00 00 01 00 00
- b) 00 00 00 00 01 00 00 FF 01 00 00 00
- c) 00 00 00 00 00 FF 01 00 00 01 00 00
- d) 00 00 00 00 01 FF 01 00 00 01 00 00
- e) 00 00 00 00 FF 01 01 00 00 00 01 00
- Submit your answer in HW 3 PB 5, on Moodle.
<showafterdate after="20151008 00:00" before="20151230 00:00">
Solution Problems
Problem 1
1 eax: 0x00004378 2 ebx: 0x12344321 3 ecx: 0x08766181 4 edx: 0xFFFF78FF
Problem 2
1 eax: 00000001 2 ebx: 00000002 3 ecx: 00000A2A 4 edx: 00000100
Problem 3
section .data msg1 db 10, "I love chocolate", 10 msg1Len equ $-msg1 section .text global _start _start: ;;; print original string mov eax, 4 mov ebx, 1 mov ecx, msg1 mov edx, msg1Len int 0x80 ;;; put your code here mov dword[msg1+1], "J'ai" mov dword[msg1+5], "me c" mov dword[msg1+9], "hoco" mov dword[msg1+13], "lat!" ;;; print modified string mov eax, 4 mov ebx, 1 mov ecx, msg1 mov edx, msg1Len int 0x80 ;;; exit mov ebx, 0 mov eax, 1 int 0x80
Problem 4
EE FF 01 00 22 FF
Problem 5
00 00 00 00 01 00 00 FF 01 00 00 00
</showafterdate>