;programul calculeaza suma, diferenta, 
;produsul si catul a doua numere intregi
;initializateprin registri
includelib libcmt.lib
includelib legacy_stdio_definitions.lib
printf proto
scanf  proto
.code
main proc
; add op1,op2 efectueaza op1:=op1+op2
; sub op1,op2 efectueaza op1:=op1-op2
mov rax,13  ;rax := 13
mov rbx, 5  ;rbx := 5
add rax,rbx ;rax := rax+rbx= 18

mov rax,13
mov rbx,5
sub rax,rbx; rax :=rax-rbx=8            

; imul op efectueaza (rdx:rax) := rax * op
; rezultatul inmultirii este calculat pe 128 de biti
; ultimii 64 de biti sunt stocati in rax
; rdx primeste bitii din rezultat care 'depasesc' 64 de biti
; daca inmultirea nu genereaza overflow, rdx=0.
mov rax,13
mov rbx,5
imul rbx          ;(rdx:rax) := rax * rbx = 65

       
;cqo extinde bitul de semn din rax in (rdx:rax)
;se efectueaza conversia lui rax (64 bit) in (rdx:rax) (128 biti)
;idiv y efectueaza (rdx:rax) / y (impartim 128 biti la 64 de biti )
;catul este plasat in rax
;restul este plasat in rdx
mov rax,13
mov rbx,5
cqo   
idiv ebx;      rax=13/5, rbx= 13mod5

ret
main endp   
END