Difference between revisions of "CSC231 Homework 2 Solutions 2014"

From dftwiki3
Jump to: navigation, search
(Created page with "--~~~~ ---- <onlydft> =Problem 1= <source lang="asm"> ;;; ----------------------------------------------------- ;;; hw2_1.asm ;;; D. Thiebaut ;;; ;;; To assemble, link and ru...")
 
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
--[[User:Thiebaut|D. Thiebaut]] ([[User talk:Thiebaut|talk]]) 13:41, 22 September 2014 (EDT)
 
--[[User:Thiebaut|D. Thiebaut]] ([[User talk:Thiebaut|talk]]) 13:41, 22 September 2014 (EDT)
 
----
 
----
<onlydft>
+
 
 
 
=Problem 1=
 
=Problem 1=
 
<source lang="asm">
 
<source lang="asm">
Line 177: Line 176:
 
=Problem 3=
 
=Problem 3=
 
<source lang="asm">
 
<source lang="asm">
 +
;;; -----------------------------------------------------
 +
;;; hw2_3.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 hw2_3.asm
 +
;;; ld -melf_i386 hw2_3.o 231Lib.o -o hw2_3
 +
;;; ./hw2_3
 +
;;; -----------------------------------------------------
 +
 +
;;; 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 = "
 +
z      dd      0              ; the integer used for IO
 +
msgZ    db      "z = "
 +
y      dd      0              ; the integer used for IO
 +
msgY    db      "y = "
 +
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
 +
 +
;;; get number from user
 +
        mov            ecx, prompt
 +
        mov            edx, 2
 +
        call            _printString
 +
        call            _getInput
 +
        mov            dword[y], 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
 +
 +
;;; print "y = dddd" where dddd is the contents of x
 +
;;; in decimal
 +
        mov            ecx, msgY
 +
        mov            edx, 4
 +
        call            _printString
 +
        mov            eax, dword[y]
 +
        call            _printDec
 +
        call            _println
 +
 +
;;; compute z = ( x + y )* 3 + ( x - y ) * 4
 +
       
 +
        mov            eax, dword[x]
 +
        add            eax, dword[y]
 +
        mov            ebx, eax        ; x + y
 +
        add            ebx, eax        ; 2*(x+y)
 +
        add            ebx, eax        ; 3*(x+y)
 +
 +
        mov            eax, dword[x]
 +
        sub            eax, dword[y]  ; (x-y)
 +
        add            eax, eax        ; 2*(x-y)
 +
        add            eax, eax        ; 4*(x-y)
 +
 +
        sub            ebx, eax        ; 3(x+y) - 4(x-y)
 +
        mov            dword[z], ebx
 +
       
 +
        mov            ecx, msgZ     
 +
        mov            edx, 4
 +
        call            _printString
 +
        mov            eax, dword[z]
 +
        call            _printDec
 +
        call            _println
 +
       
 +
;;; ; exit
 +
        mov    ebx, 0
 +
        mov    eax, 1
 +
        int    0x80
  
 +
 
</source>
 
</source>
 
=Problem 4=
 
=Problem 4=
 
<source lang="asm">
 
<source lang="asm">
 +
;;; -----------------------------------------------------
 +
;;; hw2_4.asm
 +
;;; D. Thiebaut
 +
;;;
 +
;;; To assemble, link and run:
 +
;;; nasm -f elf 231Lib.asm
 +
;;; nasm -f elf hw2_4.asm
 +
;;; ld -melf_i386 hw2_4.o 231Lib.o -o hw2_4
 +
;;; ./hw2_4
 +
;;; -----------------------------------------------------
 +
 +
;;; 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      dw      0              ; the integer used for IO
 +
msgX    db      "x = "
 +
z      dw      0              ; the integer used for IO
 +
msgZ    db      "z = "
 +
prompt  db      "> "
 +
       
 +
;;; -----------------------------------------------------
 +
;;; code section
 +
;;; -----------------------------------------------------
 +
        section .text
 +
        global _start
 +
_start:
 +
 +
;;; get number from user
 +
        mov            ecx, prompt
 +
        mov            edx, 2
 +
        call            _printString
 +
        call            _getInput
 +
        mov            word[x], ax
 +
 +
       
 +
;;; print "x = dddd" where dddd is the contents of x
 +
;;; in decimal
 +
        mov            ecx, msgX
 +
        mov            edx, 4
 +
        call            _printString
 +
        mov            eax, 0
 +
        mov            ax, word[x]
 +
        call            _printDec
 +
        call            _println
  
 +
        mov            eax, 0
 +
        mov            ax, word[x]
 +
        add            ax, ax
 +
        add            ax, ax
 +
        sub            ax, 1
 +
        mov            word[z], ax
 +
       
 +
        mov            ecx, msgZ
 +
        mov            edx, 4
 +
        call            _printString
 +
        mov            eax, 0
 +
        mov            ax, word[z]
 +
        call            _printDec
 +
        call            _println
 +
       
 +
;;; ; exit
 +
        mov    ebx, 0
 +
        mov    eax, 1
 +
        int    0x80
 
</source>
 
</source>
 
=Problem 5=
 
=Problem 5=
 
<source lang="asm">
 
<source lang="asm">
 +
;;; -----------------------------------------------------
 +
;;; Hw2_5.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 Hw2_5.asm
 +
;;; ld -melf_i386 Hw2_5.o 231Lib.o -o Hw2_5
 +
;;; ./Hw2_5
 +
;;; -----------------------------------------------------
 +
 +
;;; 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      dw      0              ; the integer used for IO
 +
msgX    db      "x = "
 +
z      dw      0              ; the integer used for IO
 +
msgZ    db      "z = "
 +
y      dw      0              ; the integer used for IO
 +
msgY    db      "y = "
 +
prompt  db      "> "
 +
       
 +
;;; -----------------------------------------------------
 +
;;; code section
 +
;;; -----------------------------------------------------
 +
        section .text
 +
        global _start
 +
_start:
 +
 +
;;; get number from user
 +
        mov            ecx, prompt
 +
        mov            edx, 2
 +
        call            _printString
 +
        call            _getInput
 +
        mov            word[x], ax
 +
 +
;;; get number from user
 +
        mov            ecx, prompt
 +
        mov            edx, 2
 +
        call            _printString
 +
        call            _getInput
 +
        mov            word[y], ax
 +
 +
       
 +
;;; print "x = dddd" where dddd is the contents of x
 +
;;; in decimal
 +
        mov            ecx, msgX
 +
        mov            edx, 4
 +
        call            _printString
 +
        mov            eax, 0
 +
        mov            ax, word[x]
 +
        call            _printDec
 +
        call            _println
 +
 +
;;; print "y = dddd" where dddd is the contents of x
 +
;;; in decimal
 +
        mov            ecx, msgY
 +
        mov            edx, 4
 +
        call            _printString
 +
        mov            eax, 0
 +
        mov            ax, word[y]
 +
        call            _printDec
 +
        call            _println
  
 +
;;; compute z = 2 * x - 3 * y + 7
 +
        mov            ax, word[x]
 +
        add            ax, ax
 +
        sub            ax, word[y]
 +
        sub            ax, word[y]
 +
        sub            ax, word[y]
 +
        add            ax, 7
 +
        mov            word[z], ax
 +
       
 +
        mov            ecx, msgZ
 +
        mov            edx, 4
 +
        call            _printString
 +
        mov            eax, 0
 +
        mov            ax, word[z]
 +
        call            _printDec
 +
        call            _println
 +
       
 +
;;; ; exit
 +
        mov    ebx, 0
 +
        mov    eax, 1
 +
        int    0x80
 
</source>
 
</source>
 
=Problem 6=
 
=Problem 6=
 
<source lang="asm">
 
<source lang="asm">
 +
;;; -----------------------------------------------------
 +
;;; Hw2_6.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 Hw2_6.asm
 +
;;; ld -melf_i386 Hw2_6.o 231Lib.o -o Hw2_6
 +
;;; ./Hw2_6
 +
;;; -----------------------------------------------------
 +
 +
;;; 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      db      0              ; the integer used for IO
 +
msgX    db      "x = "
 +
z      db      0              ; the integer used for IO
 +
msgZ    db      "z = "
 +
y      db      0              ; the integer used for IO
 +
msgY    db      "y = "
 +
prompt  db      "> "
 +
       
 +
;;; -----------------------------------------------------
 +
;;; code section
 +
;;; -----------------------------------------------------
 +
        section .text
 +
        global _start
 +
_start:
  
</source>
+
;;; get number from user
=Problem 7=
+
        mov            ecx, prompt
<source lang="asm">
+
        mov            edx, 2
 +
        call            _printString
 +
        call            _getInput
 +
        mov            byte[x], al
  
</source>
+
;;; get number from user
=Problem 8=
+
        mov            ecx, prompt
<source lang="asm">
+
        mov            edx, 2
 +
        call            _printString
 +
        call            _getInput
 +
        mov            byte[y], al
  
</source>
+
       
 +
;;; print "x = dddd" where dddd is the contents of x
 +
;;; in decimal
 +
        mov            ecx, msgX
 +
        mov            edx, 4
 +
        call            _printString
 +
        mov            eax, 0
 +
        mov            al, byte[x]
 +
        call            _printDec
 +
        call            _println
  
 +
;;; print "y = dddd" where dddd is the contents of x
 +
;;; in decimal
 +
        mov            ecx, msgY
 +
        mov            edx, 4
 +
        call            _printString
 +
        mov            eax, 0
 +
        mov            al, byte[y]
 +
        call            _printDec
 +
        call            _println
  
 +
;;; compute z = ( x + y )* 3 + ( x - y ) * 4
 +
       
 +
        mov            al, byte[x]
 +
        add            al, byte[y]
 +
        mov            bl, al          ; x + y
 +
        add            bl, al          ; 2*(x+y)
 +
        add            bl, al          ; 3*(x+y)
  
 +
        mov            al, byte[x]
 +
        sub            al, byte[y]    ; (x-y)
 +
        add            al, al          ; 2*(x-y)
 +
        add            al, al          ; 4*(x-y)
  
</onlydft>
+
        sub            bl, al          ; 3(x+y) - 4(x-y)
 +
        mov            byte[z], bl
 +
       
 +
        mov            ecx, msgZ     
 +
        mov            edx, 4
 +
        call            _printString
 +
        mov            eax, 0
 +
        mov            al, byte[z]
 +
        call            _printDec
 +
        call            _println
 +
       
 +
;;; ; exit
 +
        mov    ebx, 0
 +
        mov    eax, 1
 +
        int    0x80
 +
</source>

Latest revision as of 06:42, 9 October 2014

--D. Thiebaut (talk) 13:41, 22 September 2014 (EDT)


Problem 1

;;; -----------------------------------------------------
;;; hw2_1.asm
;;; D. Thiebaut
;;;
;;; To assemble, link and run:
;;; nasm -f elf 231Lib.asm
;;; nasm -f elf hw2_1.asm
;;; ld -melf_i386 hw2_1.o 231Lib.o -o hw2_1
;;; ./hw2_1
;;; -----------------------------------------------------

;;; 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 = "
z       dd      0               ; the integer used for IO
msgZ    db      "z = "
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

        mov             eax, dword[x]
        add             eax, eax
        add             eax, eax
        sub             eax, 1
        mov             dword[z], eax
        
        mov             ecx, msgZ
        mov             edx, 4
        call            _printString
        mov             eax, dword[z]
        call            _printDec
        call            _println
        
;;; ; exit
        mov     ebx, 0
        mov     eax, 1
        int     0x80

Problem 2

;;; -----------------------------------------------------
;;; hw2_2.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 hw2_2.asm
;;; ld -melf_i386 hw2_2.o 231Lib.o -o hw2_2
;;; ./hw2_2
;;; -----------------------------------------------------

;;; 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 = "
z       dd      0               ; the integer used for IO
msgZ    db      "z = "
y       dd      0               ; the integer used for IO
msgY    db      "y = "
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

;;; get number from user
        mov             ecx, prompt
        mov             edx, 2
        call            _printString
        call            _getInput
        mov             dword[y], 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

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

;;; compute z = 2 * x - 3 * y + 7
        mov             eax, dword[x]
        add             eax, eax
        sub             eax, dword[y]
        sub             eax, dword[y]
        sub             eax, dword[y]
        add             eax, 7
        mov             dword[z], eax
        
        mov             ecx, msgZ
        mov             edx, 4
        call            _printString
        mov             eax, dword[z]
        call            _printDec
        call            _println
        
;;; ; exit
        mov     ebx, 0
        mov     eax, 1
        int     0x80

Problem 3

 ;;; -----------------------------------------------------
;;; hw2_3.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 hw2_3.asm
;;; ld -melf_i386 hw2_3.o 231Lib.o -o hw2_3
;;; ./hw2_3
;;; -----------------------------------------------------

;;; 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 = "
z       dd      0               ; the integer used for IO
msgZ    db      "z = "
y       dd      0               ; the integer used for IO
msgY    db      "y = "
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

;;; get number from user
        mov             ecx, prompt
        mov             edx, 2
        call            _printString
        call            _getInput
        mov             dword[y], 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

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

;;; compute z = ( x + y )* 3 + ( x - y ) * 4
        
        mov             eax, dword[x]
        add             eax, dword[y]
        mov             ebx, eax        ; x + y
        add             ebx, eax        ; 2*(x+y)
        add             ebx, eax        ; 3*(x+y)

        mov             eax, dword[x]
        sub             eax, dword[y]   ; (x-y)
        add             eax, eax        ; 2*(x-y)
        add             eax, eax        ; 4*(x-y)

        sub             ebx, eax        ; 3(x+y) - 4(x-y)
        mov             dword[z], ebx
        
        mov             ecx, msgZ       
        mov             edx, 4
        call            _printString
        mov             eax, dword[z]
        call            _printDec
        call            _println
        
;;; ; exit
        mov     ebx, 0
        mov     eax, 1
        int     0x80

Problem 4

;;; -----------------------------------------------------
;;; hw2_4.asm
;;; D. Thiebaut
;;;
;;; To assemble, link and run:
;;; nasm -f elf 231Lib.asm
;;; nasm -f elf hw2_4.asm
;;; ld -melf_i386 hw2_4.o 231Lib.o -o hw2_4
;;; ./hw2_4
;;; -----------------------------------------------------

;;; 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       dw      0               ; the integer used for IO
msgX    db      "x = "
z       dw      0               ; the integer used for IO
msgZ    db      "z = "
prompt  db      "> "
        
;;; -----------------------------------------------------
;;; code section
;;; -----------------------------------------------------
        section .text
        global _start
_start:

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

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

        mov             eax, 0
        mov             ax, word[x]
        add             ax, ax
        add             ax, ax
        sub             ax, 1
        mov             word[z], ax
        
        mov             ecx, msgZ
        mov             edx, 4
        call            _printString
        mov             eax, 0
        mov             ax, word[z]
        call            _printDec
        call            _println
        
;;; ; exit
        mov     ebx, 0
        mov     eax, 1
        int     0x80

Problem 5

;;; -----------------------------------------------------
;;; Hw2_5.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 Hw2_5.asm
;;; ld -melf_i386 Hw2_5.o 231Lib.o -o Hw2_5
;;; ./Hw2_5
;;; -----------------------------------------------------

;;; 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       dw      0               ; the integer used for IO
msgX    db      "x = "
z       dw      0               ; the integer used for IO
msgZ    db      "z = "
y       dw      0               ; the integer used for IO
msgY    db      "y = "
prompt  db      "> "
        
;;; -----------------------------------------------------
;;; code section
;;; -----------------------------------------------------
        section .text
        global _start
_start:

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

;;; get number from user
        mov             ecx, prompt
        mov             edx, 2
        call            _printString
        call            _getInput
        mov             word[y], ax

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

;;; print "y = dddd" where dddd is the contents of x
;;; in decimal
        mov             ecx, msgY
        mov             edx, 4
        call            _printString
        mov             eax, 0
        mov             ax, word[y]
        call            _printDec
        call            _println

;;; compute z = 2 * x - 3 * y + 7
        mov             ax, word[x]
        add             ax, ax
        sub             ax, word[y]
        sub             ax, word[y]
        sub             ax, word[y]
        add             ax, 7
        mov             word[z], ax
        
        mov             ecx, msgZ
        mov             edx, 4
        call            _printString
        mov             eax, 0
        mov             ax, word[z]
        call            _printDec
        call            _println
        
;;; ; exit
        mov     ebx, 0
        mov     eax, 1
        int     0x80

Problem 6

;;; -----------------------------------------------------
;;; Hw2_6.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 Hw2_6.asm
;;; ld -melf_i386 Hw2_6.o 231Lib.o -o Hw2_6
;;; ./Hw2_6
;;; -----------------------------------------------------

;;; 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       db      0               ; the integer used for IO
msgX    db      "x = "
z       db      0               ; the integer used for IO
msgZ    db      "z = "
y       db      0               ; the integer used for IO
msgY    db      "y = "
prompt  db      "> "
        
;;; -----------------------------------------------------
;;; code section
;;; -----------------------------------------------------
        section .text
        global _start
_start:

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

;;; get number from user
        mov             ecx, prompt
        mov             edx, 2
        call            _printString
        call            _getInput
        mov             byte[y], al

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

;;; print "y = dddd" where dddd is the contents of x
;;; in decimal
        mov             ecx, msgY
        mov             edx, 4
        call            _printString
        mov             eax, 0
        mov             al, byte[y]
        call            _printDec
        call            _println

;;; compute z = ( x + y )* 3 + ( x - y ) * 4
        
        mov             al, byte[x]
        add             al, byte[y]
        mov             bl, al          ; x + y
        add             bl, al          ; 2*(x+y)
        add             bl, al          ; 3*(x+y)

        mov             al, byte[x]
        sub             al, byte[y]     ; (x-y)
        add             al, al          ; 2*(x-y)
        add             al, al          ; 4*(x-y)

        sub             bl, al          ; 3(x+y) - 4(x-y)
        mov             byte[z], bl
        
        mov             ecx, msgZ       
        mov             edx, 4
        call            _printString
        mov             eax, 0
        mov             al, byte[z]
        call            _printDec
        call            _println
        
;;; ; exit
        mov     ebx, 0
        mov     eax, 1
        int     0x80