%include "asm_io.inc"
;
; initialized data is put in the .data segment
;
segment .data
;
; These labels refer to strings used for output
;
prompt1 db    "Donnez un nombre: ", 0       ; don't forget nul terminator
prompt2 db    "Un autre nombre: ", 0
outmsg1 db    "Vous avez mis ", 0
outmsg2 db    " et ", 0
outmsg3 db    ", la somme est ", 0


;
; uninitialized data is put in the .bss segment
;
segment .bss
;
; These labels refer to double words used to store the inputs
;
input1  resd 1
input2  resd 1

 

;
; code is put in the .text segment
;
segment .text
        global  asm_main
asm_main:
        enter   0,0               ; mise en place 
        pusha

        mov     eax, prompt1      ; affiche prompt1
        call    print_string

        call    read_int          ; lit un entier
        mov     [input1], eax     ; stocke à l'adresse input1

        mov     eax, prompt2      ; affiche prompt2
        call    print_string

        call    read_int          ; lit un entier
        mov     [input2], eax     ; stocke à l'adresse input1

        mov     eax, [input1]     ; eax = dword @ input1
        add     eax, [input2]     ; eax += dword @ input2
        mov     ebx, eax          ; ebx = eax

	
; Affiche les messages et la somme 
;
        mov     eax, outmsg1
        call    print_string      ; affiche outmsg1
        mov     eax, [input1]     
        call    print_int         ; affiche dword stocke input1
        mov     eax, outmsg2
        call    print_string      ; affiche outmsg2
        mov     eax, [input2]
        call    print_int         ; affiche dword stocke input1
        mov     eax, outmsg3
        call    print_string      ; affiche outmsg2
        mov     eax, ebx
        call    print_int         ; affiche la somme
        call    print_nl          ; affiche nouvelle ligne

        popa
        mov     eax, 0            ; retour vers le C
        leave                     
        ret


