Difference between revisions of "CSC231 Homework 2 Solutions 2012"

From dftwiki3
Jump to: navigation, search
(Created page with "--~~~~ ---- =Problem #1= <source lang="asm"> ;;; hw2a.asm ;;; D. Thiebaut ;;; ;;; Display "Hello there!" on the screen ;;; ;;; To assemble, link, and run: ;;; nasm -f elf -F s...")
 
Line 96: Line 96:
 
00000120  2c 20 61 6e 64 20 70 72  65 66 65 72 20 61 6e 63  |, and prefer anc| 00000120  2c 20 61 6e 64 20 70 72  65 66 65 72 20 61 6e 63  |, and prefer anc|
 
00000120  2c 20 61 6e 64 20 70 72  65 66 65 72 20 61 6e 63  |, and prefer anc| 00000120  2c 20 61 6e 64 20 70 72  65 66 65 72 20 61 6e 63  |, and prefer anc|
 
</pre></code>
 
</pre></code>
 +
 +
In the example above, notice that the b8 and bb bytes are different in the two hexdumps...
 +
 +
=Problem #2=
 +
 +
The shortest program is due this week to Szilvi, with 1033 bytes:
 +
 +
<source lang="asm">
 +
;;; hw2b.asm
 +
;;; Szilvi Kiss
 +
;;; 231a-aj
 +
;;; September 15, 2012
 +
;;;
 +
;;;
 +
;;; Displays 6 rows of stars on the screen.
 +
;;;
 +
;;; To assemble, link, and run:
 +
;;; nasm -f elf -F stabs hw2b.asm
 +
;;; ld -melf_i386 -o hw2b hw2b.o
 +
;;; ./hw2b
 +
;;;
 +
 +
section .data
 +
stars db "*********************",10
 +
starsLen equ $-stars
 +
 +
 +
section .text
 +
global _start
 +
 +
;;; start
 +
_start:
 +
mov edi, 0 ;; initialize counter
 +
 +
;;; loop
 +
loop:
 +
add edi, 1 ;; increment counter
 +
;;  print a line of stars
 +
mov eax, 4
 +
mov ebx, 1
 +
mov ecx, stars
 +
mov edx, starsLen
 +
int 0x80
 +
 +
;; check number of lines printed so far
 +
cmp edi, 6
 +
;; if number of lines is NOT equal to 6, loop again
 +
jne loop
 +
 +
;;; exit
 +
mov eax, 1
 +
mov ebx, 0
 +
int 0x80
 +
</source>
 +
 +
However, Szilvi used instructions we haven't covered yet.  The program that is the next smallest, using the constructs we have seen so far is due to Sydney.
 +
 +
<br />
 +
<source lang="asm">
 +
;;; Sydney Ness
 +
;;; September 19
 +
;;; hw2b.asm
 +
;;;
 +
;;; A program that outputs six lines of stars with a
 +
;;; minimally sized executable.
 +
;;;
 +
;;; size of executable in bytes: 1035
 +
;;;
 +
;;;
 +
 +
                        section .data
 +
stars          db      "*********************", 10
 +
                db      "*********************", 10
 +
                db      "*********************", 10
 +
                db      "*********************", 10
 +
                db      "*********************", 10
 +
                db      "*********************", 10
 +
 +
                        section .text
 +
                        global _start
 +
_start:
 +
 +
;;; print stars
 +
                        mov    eax, 4
 +
                        mov    ebx, 1
 +
                        mov    ecx, stars
 +
                        mov    edx, 132
 +
                        int    0x80
 +
 +
;;; ; exit
 +
 +
                        mov    ebx, 0
 +
                        mov    eax, 1
 +
                        int    0x80
 +
</source>
 +
 +
=Problem #3=
 +
 +
<br />
 +
<source lang="asm">
 +
;;; Sydney Ness
 +
;;; 231a-ag
 +
;;; hw2c.asm
 +
;;; 19 September
 +
;;;
 +
;;; prints this string (between two linux
 +
;;; prompts) on the screen:
 +
;;;  [231a-ag@beowulf ~/hw2]$ ./hw2c
 +
;;;  I hate quotations.  Tell me what you know.
 +
;;;
 +
;;;          Ralph Waldo Emerson (1803 - 1882)
 +
;;;
 +
;;;  [231a-ag@beowulf ~/hw2]$
 +
;;;
 +
 +
section .data
 +
msg2 db "Tell me what you know."
 +
msg2Len equ $-msg2
 +
msg3 db "        Ralph Waldo Emerson "
 +
msg3Len equ $-msg3
 +
msg5 db 10, 10
 +
msg5Len equ $-msg5
 +
msg1 db "I hate quotations.  "
 +
msg1Len equ $-msg1
 +
msg4 db "(1803 - 1882)"
 +
msg4Len equ $-msg4
 +
 +
section .text
 +
global _start
 +
_start:
 +
 +
;;; print "I hate quotations.  "
 +
mov eax, 4
 +
mov ebx, 1
 +
mov ecx, msg1
 +
mov edx, msg1Len
 +
int 0x80
 +
 +
;;; print "Tell me what you know."
 +
mov eax, 4
 +
mov ebx, 1
 +
mov ecx, msg2
 +
mov edx, msg2Len
 +
int 0x80
 +
 +
;;; print 2 line-feed chars
 +
mov eax, 4
 +
mov ebx, 1
 +
mov ecx, msg5
 +
mov edx, msg5Len
 +
int 0x80
 +
 +
;;; print "        Ralph Waldo Emerson "
 +
mov eax, 4
 +
mov ebx, 1
 +
mov ecx, msg3
 +
mov edx, msg3Len
 +
int 0x80
 +
 +
;;; print "(1803-1882)"
 +
mov eax, 4
 +
mov ebx, 1
 +
mov ecx, msg4
 +
mov edx, msg4Len
 +
int 0x80
 +
 +
;;; print 2 line-feed characters
 +
mov eax, 4
 +
mov ebx, 1
 +
mov ecx, msg5
 +
mov edx, msg5Len
 +
int 0x80
 +
 +
;;; exit
 +
mov ebx, 0
 +
mov eax, 1
 +
int 0x80
 +
</source>
 +
<br />
 +
 +
<br />
 +
 +
<br />
 +
 +
<br />
 +
 +
<br />
 +
 +
<br />
 +
 +
<br />
 +
 +
<br />
 +
 +
<br />
 +
[[Category:CSC231]][[Category:Homework]]

Revision as of 09:14, 24 September 2012

--D. Thiebaut 09:58, 24 September 2012 (EDT)


Problem #1

;;; hw2a.asm
;;; D. Thiebaut
;;;
;;; Display "Hello there!" on the screen
;;;
;;; To assemble, link, and run:
;;; 	nasm -f elf -F stabs hw2a.asm
;;; 	ld -melf_i386 -o hw2a hw2a.o
;;; 	./hw2a
;;;

		section	.data
I		db	"I "
Ilen		equ	$-I
hate		db	"hate "
chocolate	db	"chocolate, "
chocoLen	equ	$-chocolate	
		db	"and prefer "
anchovies	db	"anchovies, "
anchoviesLen	equ	$-anchovies-1 	; -1 to skip comma
	        db	"and I especially "
like		db	"like "
likeLen		equ	$-like
		db	"them "
whipped		db	"with whipped cream on top!", 10, 10
whippedLen	equ	$-whipped

		section	.text
		global	_start
_start:	

;;; print message
		mov	eax, 4		; write
		mov	ebx, 1		; stdout
		mov	ecx, I	 	; I
		mov	edx, 2
		int 	0x80
	
		mov	eax, 4		; write
		mov	ebx, 1		; stdout
		mov	ecx, like 	; like
		mov	edx, likeLen
		int 	0x80

	        mov	eax, 4	        ; write
		mov	ebx, 1		; stdout
		mov	ecx, chocolate+1
		mov	edx, 2		; "ho"
		int	0x80

		mov	eax, 4	        ; write
		mov	ebx, 1		; stdout
		mov	ecx, chocolate+7
		mov	edx, 1		; "t"
		int	0x80

	
	
		mov	eax, 4		; write
		mov	ebx, 1		; stdout
		mov	ecx, chocolate-1; " chocolate" (with a leading space)
		mov	edx, chocoLen+1
		int 	0x80
	
		mov	eax, 4		; write
		mov	ebx, 1		; stdout
		mov	ecx, whipped 	; with whipped cream on top
		mov	edx, whippedLen
		int 	0x80
	
	

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

To grade this homework I generated the hexdump for my original program and the hexdump for your programs and compared the two with the command diff -wy -W 172 hw2asol.hexdump hw2a.hexdump.

This generated a wide listing with the two hexdumps side by side, and a vertical bar in the middle of the page when two lines were different. This allowed me to quickly identify discrepancies.

000000e0  00 00 b9 16 91 04 08 ba  0c 00 00 00 cd 80 b8 04  |................|		000000e0  00 00 b9 16 91 04 08 ba  0c 00 00 00 cd 80 b8 04  |................|
000000f0  00 00 00 bb 01 00 00 00  b9 53 91 04 08 ba 1c 00  |.........S......|		000000f0  00 00 00 bb 01 00 00 00  b9 53 91 04 08 ba 1c 00  |.........S......|
00000100  00 00 cd 80 bb 00 00 00  00 b8 01 00 00 00 cd 80  |................|	     |	00000100  00 00 cd 80 b8 01 00 00  00 bb 00 00 00 00 cd 80  |................|
00000110  49 20 68 61 74 65 20 63  68 6f 63 6f 6c 61 74 65  |I hate chocolate|		00000110  49 20 68 61 74 65 20 63  68 6f 63 6f 6c 61 74 65  |I hate chocolate|
00000120  2c 20 61 6e 64 20 70 72  65 66 65 72 20 61 6e 63  |, and prefer anc|		00000120  2c 20 61 6e 64 20 70 72  65 66 65 72 20 61 6e 63  |, and prefer anc|

In the example above, notice that the b8 and bb bytes are different in the two hexdumps...

Problem #2

The shortest program is due this week to Szilvi, with 1033 bytes:

;;; hw2b.asm
;;; Szilvi Kiss
;;; 231a-aj
;;; September 15, 2012
;;;
;;;
;;; Displays 6 rows of stars on the screen.
;;;
;;; To assemble, link, and run:
;;; nasm -f elf -F stabs hw2b.asm
;;; ld -melf_i386 -o hw2b hw2b.o
;;; ./hw2b
;;;

		section .data
stars		db	"*********************",10
starsLen	equ	$-stars

	
		section .text
		global _start

;;; start
	_start:	
		mov	edi, 0		;; initialize counter
	
;;; loop
		loop:
		add	edi, 1		;; increment counter
		;;  print a line of stars
		mov 	eax, 4
		mov	ebx, 1
		mov	ecx, stars
		mov	edx, starsLen
		int 	0x80

		;; check number of lines printed so far
		cmp	edi, 6
		;; if number of lines is NOT equal to 6, loop again
		jne	loop
	
;;; exit
		mov	eax, 1
		mov	ebx, 0
		int	0x80

However, Szilvi used instructions we haven't covered yet. The program that is the next smallest, using the constructs we have seen so far is due to Sydney.


;;; Sydney Ness
;;; September 19
;;; hw2b.asm
;;; 
;;; A program that outputs six lines of stars with a
;;; minimally sized executable.
;;;
;;; size of executable in bytes: 1035
;;;
;;;

                        section .data
	stars           db      "*********************", 10
	                db      "*********************", 10
	                db      "*********************", 10
	                db      "*********************", 10
	                db      "*********************", 10
	                db      "*********************", 10

	                        section .text
	                        global _start
_start:

;;; print stars
	                        mov     eax, 4
	                        mov     ebx, 1
	                        mov     ecx, stars
	                        mov     edx, 132
	                        int     0x80

;;; ; exit

	                        mov     ebx, 0
	                        mov     eax, 1
	                        int     0x80

Problem #3


;;; Sydney Ness
;;; 231a-ag
;;; hw2c.asm
;;; 19 September
;;; 
;;; prints this string (between two linux
;;; prompts) on the screen:
;;;  [231a-ag@beowulf ~/hw2]$ ./hw2c
;;;  I hate quotations.  Tell me what you know.
;;;
;;;          Ralph Waldo Emerson (1803 - 1882) 
;;; 
;;;  [231a-ag@beowulf ~/hw2]$
;;;

	section .data
msg2	db	"Tell me what you know."
msg2Len equ	$-msg2
msg3	db	"        Ralph Waldo Emerson "
msg3Len equ	$-msg3
msg5	db	10, 10
msg5Len equ	$-msg5
msg1	db	"I hate quotations.  "
msg1Len equ	$-msg1
msg4	db	"(1803 - 1882)"
msg4Len equ	$-msg4
	
	section .text
	global _start
_start:
	
;;; print "I hate quotations.  "
	mov	eax, 4
	mov	ebx, 1
	mov	ecx, msg1
	mov	edx, msg1Len
	int 	0x80
	
;;; print "Tell me what you know."
	mov	eax, 4
	mov	ebx, 1
	mov	ecx, msg2
	mov	edx, msg2Len
	int 	0x80	

;;; print 2 line-feed chars
	mov	eax, 4
	mov	ebx, 1
	mov	ecx, msg5
	mov	edx, msg5Len
	int 	0x80

;;; print "        Ralph Waldo Emerson "
	mov	eax, 4
	mov	ebx, 1
	mov	ecx, msg3
	mov	edx, msg3Len
	int 	0x80

;;; print "(1803-1882)"
	mov	eax, 4
	mov	ebx, 1
	mov	ecx, msg4
	mov	edx, msg4Len
	int 	0x80

;;; print 2 line-feed characters
	mov	eax, 4
	mov	ebx, 1
	mov	ecx, msg5
	mov	edx, msg5Len
	int 	0x80
	
;;; exit
	mov 	ebx, 0
	mov	eax, 1
	int	0x80