;Exemplo Simples demonstrando um programa básico
; formato e layout
; ************************************************
; Algumas declarações de dados (variáveis)

section .data
; -----
; Defininindo constantes
EXIT_SUCCESS equ 0 ; operação com sucesso. Em C, #define EXIT_SUCCESS  0
SYS_exit equ 60    ; chamada de código de saída

; Declaração de variáveis Byte (8-bit)
bVar1    db      17
bVar2    db      9
bResult  db      0

; -----
; Declaração de variáveis Word (16-bit)

wVar1    dw      17000
wVar2    dw      9000
wResult  dw      0

; -----
; Declaração de variáveis Double-word (32-bit)
dVar1    dd      1700000
dVar2    dd      900000
dResult  dd      0

; -----
; Declaração de variáveis Quadword (64-bit)
qVar1    dq      170000000
qVar2    dq      90000000
qResult  dq      0

; *************************************************************
; Code Section

section     .text
global _start              ; a diretiva global informa que o programa começa na linha _start
_start:                    ; label _start 

;Mostra uma série de operações básicas de adição 
;para demonstrar o formato básico de um programa.

; ----------
; Byte example
; bResult = bVar1 + bVar2

mov al, byte [bVar1]    ; é preciso explicitar que desejo só o conteúdo (entre '[' e ']') de um byte de bVar1
add al, byte [bVar2]    ; senão pode pegar dois bytes ou qualquer outra coisa
mov byte [bResult], al  ; por isso está explícito "byte"

; ----------
; Word example
; wResult = wVar1 + wVar2

mov ax, word [wVar1]   ; é preciso explicitar que desejo só o conteúdo de um word 
add ax, word [wVar2] 
mov word [wResult], ax

; ----------
; Double-word example
; dResult = dVar1 + dVar2

mov eax, dword [dVar1]
add eax, dword [dVar2]
mov dword [dResult], eax

; ----------
; Quadword example
; qResult = qVar1 + qVar2

mov rax, qword [qVar1]
add rax, qword [qVar2]
mov qword [qResult], rax

; ************************************************************
; Feito, terminando o programa.

last:            ;criação de um label com o nome last
mov rax, SYS_exit
mov rdi, EXIT_SUCCESS
syscall


