Difference between revisions of "CSC231 Homework 3 Fall 2012"

From dftwiki3
Jump to: navigation, search
(Problem #3)
 
(4 intermediate revisions by the same user not shown)
Line 3: Line 3:
  
 
<tanbox>
 
<tanbox>
This homework can be done in pair.  It is due at 11:59 p.m. + 1 min on 9/26/12 (which might be Mountain Day...)
+
This homework can be done in pair.  It is due at 11:59 p.m. + 1 min on 9/26/12 (which might be Mountain Day...).  You'll need the material we'll cover during Friday's lecture (9/21/12) to do the programming problems.
 
</tanbox>
 
</tanbox>
  
Line 22: Line 22:
 
mov dh, bl
 
mov dh, bl
 
mov bx, cx
 
mov bx, cx
mov cx, 0
+
mov ch, 'a'
 +
mov cl, 'a'+32
  
 
;;; show what is in eax, ebx, ecx, and edx now.
 
;;; show what is in eax, ebx, ecx, and edx now.
Line 106: Line 107:
 
<source lang="asm">
 
<source lang="asm">
 
section .data
 
section .data
msg1 db "I love chocolate", 10   ; note the 2 spaces between e and c
+
msg1 db "I love chocolate", 10
 
msg1Len equ $-msg1
 
msg1Len equ $-msg1
  
Line 147: Line 148:
 
<br />
 
<br />
 
<code><pre>
 
<code><pre>
I love chocolate
+
I love chocolate
 
J'aime chocolat!
 
J'aime chocolat!
  
Line 153: Line 154:
  
 
<br />
 
<br />
 +
Store your program in a file called '''hw3c.asm''' and submit it as follows:
 +
 +
    rsubmit hw3 hw3c.asm
 +
  
 
<br />
 
<br />

Latest revision as of 13:19, 19 September 2012

--D. Thiebaut 13:51, 19 September 2012 (EDT)


This homework can be done in pair. It is due at 11:59 p.m. + 1 min on 9/26/12 (which might be Mountain Day...). You'll need the material we'll cover during Friday's lecture (9/21/12) to do the programming problems.


Problem #1

What is left in eax, ebx, ecx, and edx after the following instructions have executed. Express your answer in hexadecimal.

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

;;; show what is in eax, ebx, ecx, and edx now.


Store your answers in a text file called hw3a.txt and submit it as follows:

   rsubmit hw3 hw3a.txt


(Make sure you include your name and account number in the header of the text file).

Problem #2

Starting with the program listed below, complement it so that it moves the string msg1 into msg2 and displays all three strings on the screen.


		section	.data
msg1        db             "CSC231 Assembly", 10, 10
msg1Len     equ            $-msg1
msg2        db             "................", 10
msg2Len     equ            $-msg2
msg3        db             "Fall 2012", 10, 10
msg3Len     equ            $-msg3

	
		section	.text
		global	_start
_start:	
;;; print msg1
		mov	eax, 4		; write
		mov	ebx, 1		; stdout
		mov	ecx, msg1	; address of first message
		mov	edx, msg1Len	; # of chars to print
		int 	0x80

;;; print msg2
		mov	eax, 4		; write
		mov	ebx, 1		; stdout
		mov	ecx, msg2	; address of second message
		mov	edx, msg2Len	; # of chars to print
		int 	0x80

;;; print msg3
		mov	eax, 4		; write
		mov	ebx, 1		; stdout
		mov	ecx, msg3	; address of third message
		mov	edx, msg3Len	; # of chars to print
		int 	0x80

;;; exit
		mov	ebx, 0
		mov	eax, 1
		int	0x80


The original program outputs:

CSC231 Assembly

................
Fall 2012

Your assignment is to add a series of instructions before the first section that prints msg1 that will copy msg1 into msg2, as efficiently as possible, and without using loops, so that the program will print:

CSC231 Assembly

CSC231 Assembly

Fall 2012


Note: you cannot modify the way msg1, msg2, or msg3 are defined in your program. Typically you will copy-paste the program above into a new file called hw3b.asm and add a new series of instructions at the beginning of the code section.

Problem #3


		section	.data
msg1		db	"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


This program prints out:

I love chocolate
I love chocolate

Your assignment is to add a section of code between the two print sections that will modify msg1, so that when it is printed a second time, it will have changed. The output of your program should look exactly like this:


I love chocolate
J'aime chocolat!


Store your program in a file called hw3c.asm and submit it as follows:

   rsubmit hw3 hw3c.asm