Difference between revisions of "CSC231 Homework 2 2014"

From dftwiki3
Jump to: navigation, search
(Problem 1)
(Preparation)
Line 73: Line 73:
 
* '''231Lib.asm''' is a library of functions that will be useful for this assignment.  You do not, and should not have to modify the code in this program.
 
* '''231Lib.asm''' is a library of functions that will be useful for this assignment.  You do not, and should not have to modify the code in this program.
 
* '''IOskel.asm''' is a skeleton which you will have to copy into new assembly programs, which you will edit to solve various problems.
 
* '''IOskel.asm''' is a skeleton which you will have to copy into new assembly programs, which you will edit to solve various problems.
* Assemble, link, and run the programs as follows:
+
* Assemble, link, and run the programs as follows (user input in boldface):
 
<br />
 
<br />
 
   
 
   
  nasm -f elf IOskel.asm
+
  '''nasm -f elf IOskel.asm'''
  nasm -f elf 231Lib.asm &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;''(once you have assembled it, you don't need to repeat this step)''
+
  '''nasm -f elf 231Lib.asm''' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;''(once you have assembled it, you don't need to repeat this step)''
  ld -melf_i386 -o IOskel IOskel.o 231Lib.o
+
  '''ld -melf_i386 -o IOskel IOskel.o 231Lib.o'''
  ./IOskel
+
  '''./IOskel'''
 
  &gt;
 
  &gt;
 
    
 
    
Line 86: Line 86:
 
<br />
 
<br />
 
   
 
   
  &gt; 22334
+
  &gt; '''22334'''
 
  x = 22334
 
  x = 22334

Revision as of 08:56, 21 September 2014

--D. Thiebaut (talk) 09:48, 21 September 2014 (EDT)


This homework is due on Tuesday, Sept. 30th, at 11:55 p.m.


Preparation


  • Create a program called IOskel.asm using your 231a-xx account, on a Linux machine (beowulf2, grendel, or any of the Linux Mint PCs in FH342 or FH345, and copy this code in it:


;;; -----------------------------------------------------
;;; IOskel.asm
;;; D. Thiebaut
;;; Simple skeleton program illustrating how to get an
;;; integer from the command line and displaying it back
;;;
;;; To assemble, link and run:
;;; nasm -f elf 231Lib.asm
;;; nasm -f elf IOskel.asm
;;; ld -melf_i386 IOskel.o 231Lib.o
;;; ./IOskel
;;; -----------------------------------------------------

;;; extern functions that will be linked to this program
;;; contained in 231Lib.asm

extern  _printDec
extern  _printString
extern  _println
extern  _getInput
        
;;; -----------------------------------------------------
;;; data section
;;; -----------------------------------------------------
        section .data
x       dd      0               ; the integer used for IO
msgX    db      "x = "
prompt  db      "> "
        
;;; -----------------------------------------------------
;;; code section
;;; -----------------------------------------------------
        section .text
        global _start
_start:

;;; get number from user
        mov             ecx, prompt
        mov             edx, 2
        call            _printString
        call            _getInput
        mov             dword[x], eax

        
;;; print "x = dddd" where dddd is the contents of x
;;; in decimal
        mov             ecx, msgX
        mov             edx, 4
        call            _printString
        mov             eax, dword[x]
        call            _printDec
        call            _println

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


  • Also create another program called 231Lib.asm, and copy the code found on this page in it.
  • 231Lib.asm is a library of functions that will be useful for this assignment. You do not, and should not have to modify the code in this program.
  • IOskel.asm is a skeleton which you will have to copy into new assembly programs, which you will edit to solve various problems.
  • Assemble, link, and run the programs as follows (user input in boldface):


nasm -f elf IOskel.asm
nasm -f elf 231Lib.asm       (once you have assembled it, you don't need to repeat this step)
ld -melf_i386 -o IOskel IOskel.o 231Lib.o
./IOskel
>
 


  • The ">" symbol is a prompt: the program is asking you to input a number. Just input an integer, and press Enter:


> 22334
x = 22334