Difference between revisions of "CSC231 Mini Lab 1 Solution and Discussion"

From dftwiki3
Jump to: navigation, search
Line 1: Line 1:
 
--[[User:Thiebaut|D. Thiebaut]] 09:38, 12 September 2012 (EDT)
 
--[[User:Thiebaut|D. Thiebaut]] 09:38, 12 September 2012 (EDT)
 
----
 
----
 +
__TOC__
 +
<br />
 +
<tanbox>
 +
This is a presentation of two solutions to the [[CSC231 Lab 1 | Mini Lab #1]] and a discussion of the two different approaches.
 +
</tanbox>
 +
<br />
 
=Solution 1=
 
=Solution 1=
  

Revision as of 09:08, 12 September 2012

--D. Thiebaut 09:38, 12 September 2012 (EDT)



This is a presentation of two solutions to the Mini Lab #1 and a discussion of the two different approaches.


Solution 1


;;; minilab1_v1.asm
;;; D. Thiebaut
;;; prints this string on the screen:
;;;
;;; 	*********************************
;;;     * Welcome to CSC231             *
;;;     * Home of the Assembly Language *
;;;     *********************************


	section	.data

msg	db	"*********************************", 10
	db	"* Welcome to CSC231             *", 10
	db	"* Home of the Assembly Language *", 10	
	db	"*********************************", 10, 10
	
msgLen	equ	$-msg

	section	.text
	global	_start
_start:
	mov	eax,4
	mov	ebx,1
	mov	ecx,msg
	mov	edx,msgLen
	int	0x80

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


Solution 2


;;; minilab1_v2.asm
;;; D. Thiebaut
;;; prints this string on the screen:
;;;
;;; 	*********************************
;;;     * Welcome to CSC231             *
;;;     * Home of the Assembly Language *
;;;     *********************************


	section	.data

msg	db	"*********************************", 10
msgLen1	equ	$-msg	
	db	"* Welcome to CSC231             *", 10
	db	"* Home of the Assembly Language *", 10	
msgLen2	equ	$-msg
	
	section	.text
	global	_start
_start:
	
;;; print first 3 lines
	mov	eax,4
	mov	ebx,1
	mov	ecx,msg
	mov	edx,msgLen2
	int	0x80

;;; print first line back, to close box
	mov	eax,4
	mov	ebx,1
	mov	ecx,msg
	mov	edx,msgLen1
	int	0x80

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



Understanding what's inside the executable

  • Generate the listing of the assembly program:
      nasm -f elf -F stabs -l minilab1_v1.lst  minilab1_v1.asm            (that's a minus ell option in the command)
    

  • Look at the new files in your account:
      ls -l minilab1_v1.*
 
      -rwx------. 1 231a 231a 1079 Sep 12 09:18 minilab1_v1*
      -rw-------. 1 231a 231a  606 Sep 12 09:18 minilab1_v1.asm
      -rw-------. 1 231a 231a 2398 Sep 12 09:47 minilab1_v1.lst
      -rw-------. 1 231a 231a 1168 Sep 12 09:47 minilab1_v1.o 
  • Look at the listing file generated by the -l switch


     1                                  ;;; minilab1.asm
     2                                  ;;; D. Thiebaut
     3                                  ;;; prints this string on the screen:
     4                                  ;;;
     5                                  ;;; 	*********************************
     6                                  ;;;     * Welcome to CSC231             *
     7                                  ;;;     * Home of the Assembly Language *
     8                                  ;;;     *********************************
     9                                  
    10                                  
    11                                  	section	.data
    12                                  
    13 00000000 2A2A2A2A2A2A2A2A2A-     msg	db	"*********************************", 10
    14 00000009 2A2A2A2A2A2A2A2A2A-
    15 00000012 2A2A2A2A2A2A2A2A2A-
    16 0000001B 2A2A2A2A2A2A0A     
    17 00000022 2A2057656C636F6D65-     	db	"* Welcome to CSC231             *", 10
    18 0000002B 20746F204353433233-
    19 00000034 312020202020202020-
    20 0000003D 20202020202A0A     
    21 00000044 2A20486F6D65206F66-     	db	"* Home of the Assembly Language *", 10	
    22 0000004D 207468652041737365-
    23 00000056 6D626C79204C616E67-
    24 0000005F 75616765202A0A     
    25 00000066 2A2A2A2A2A2A2A2A2A-     	db	"*********************************", 10, 10
    26 0000006F 2A2A2A2A2A2A2A2A2A-
    27 00000078 2A2A2A2A2A2A2A2A2A-
    28 00000081 2A2A2A2A2A2A0A0A   
    29                                  	
    30                                  msgLen	equ	$-msg
    31                                  
    32                                  	section	.text
    33                                  	global	_start
    34                                  _start:
    35 00000000 B804000000              	mov	eax,4
    36 00000005 BB01000000              	mov	ebx,1
    37 0000000A B9[00000000]            	mov	ecx,msg
    38 0000000F BA89000000              	mov	edx,msgLen
    39 00000014 CD80                    	int	0x80
    40                                  
    41                                  ;;; exit
    42 00000016 B801000000              	mov	eax,1
    43 0000001B BB00000000              	mov	ebx,0
    44 00000020 CD80                    	int	0x80
    45                                  
    46


  • Try to recognize all the features. What is code, what is data, what strings like "CD80" mean... (we'll do that in class!)


How does this relate to the size of the executable?

    -rw-r--r--. 1 231a 231a  324 Sep 12 10:04 skel.asm
    -rw-r--r--. 1 231a 231a  780 Sep 12 10:04 skel2.asm
    -rw-------. 1 231a 231a  707 Sep 12 10:04 minilab1_v2.asm
    -rw-------. 1 231a 231a  606 Sep 12 10:04 minilab1_v1.asm
    -rw-------. 1 231a 231a  606 Sep 12 10:04 minilab1.asm
    -rw-r--r--. 1 231a 231a  996 Sep 12 10:04 lab1.asm
    -rw-r--r--. 1 231a 231a  556 Sep 12 10:04 hello.asm
    -rw-r--r--. 1 231a 231a  208 Sep 12 10:04 hello3.asm
    -rw-r--r--. 1 231a 231a  501 Sep 12 10:04 hello2.asm
    -rw-------. 1 231a 231a  752 Sep 12 10:05 skel.o
    -rw-------. 1 231a 231a 1248 Sep 12 10:05 minilab1_v2.o
    -rw-------. 1 231a 231a 1168 Sep 12 10:05 minilab1_v1.o
    -rw-------. 1 231a 231a 1136 Sep 12 10:05 minilab1.o
    -rw-r--r--. 1 231a 231a 1024 Sep 12 10:05 lab1.o
    -rw-r--r--. 1 231a 231a 1024 Sep 12 10:05 hello.o
    -rwx------. 1 231a 231a  705 Sep 12 10:05 skel*
    -rwx------. 1 231a 231a 1148 Sep 12 10:05 minilab1_v2*
    -rwx------. 1 231a 231a 1079 Sep 12 10:05 minilab1_v1*


Could skel.asm be useful?


;;; skel.asm
;;; D. Thiebaut
;;;
;;; 
;;;
;;; To assemble, link, and run:
;;; 	nasm -f elf -F stabs skel.asm
;;; 	ld -melf_i386 -o skel skel.o
;;; 	./skel
;;;

		section	.data
;;; put your variables here...

	
		section	.text
		global	_start
_start:	

;;; put your code here

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