## Program za uneta dva operanda i jedne operacije
## ispisuje rezultat operacije.

.intel_syntax noprefix
		
.data
rdfmt:	.asciz  "%d%c%d"	# Ulazni format.
wrfmt:	.asciz  "%d\n"		# Izlazni format.

.bss
.lcomm	x,  4               # Prvi operand.
.lcomm	op, 1               # Operator.
.lcomm	y,  4               # Drugi operand.
		
.text
.global main

main:
    ## Prolog funkcije.
    enter   0, 0
        
    ## Ucitava se izraz.
again:
    lea	    rdi, rdfmt
    lea	    rsi, x
    lea	    rdx, op
    lea	    rcx, y
    call    scanf

    ## Odredjuje se koja je operacija u pitanju.
    mov	    al, op
    cmp	    al, '+'
    je      addition
    cmp	    al, '-'
    je      subtraction
    cmp	    al, '*'
    je      multiplication
    cmp	    al, '/'
    je      division
    jmp     again

    ## Izracunava se zbir.
addition:
    mov	    eax, x
    add	    eax, y
    jmp     print

    ## Izracunava se razlika.
subtraction:
    mov	    eax, x
    sub	    eax, y
    jmp     print

    ## Izracunava se proizvod.
multiplication:
    mov	    eax, x
    imul	dword ptr y
    jmp     print

    ## Izracunava se kolicnik.
division:
    mov	    eax, x
    cqto
    idiv	dword ptr y

    ## Stampa se rezultat i prelazi se na ucitavanje narednog
    ## izraza.
print:
    lea	    rdi, wrfmt
    mov	    esi, eax
    call    printf
    jmp     again

    ## Epilog funkcije.
    xor	    rax, rax
    leave
    ret
