section .data
m1 db "---beatriz (somas)---", 10 
l1 equ $ - m1
m2 db "---Bianca (subtrações)---", 10
l2 equ $ - m2
m3 db "---Melissa (Multiplicações)---", 10
l3 equ $ - m3 
m4 db "---Isabelle (Divisões)---", 10
l4 equ $ - m4 
m5 db "---Katelyn (Incremento, decremento e bitwise)---", 10 
l5 equ $ - m5 

section .bss  
    char resb 2 

section .text
    global _start
    
_start:
    mov byte [char+1], 10   ;Prepara a quebra de linha(\n)

    ;-----------------------------------------------------
    ;BLOCO 1 - BEATRIZ (4 Somas )
    ;-----------------------------------------------------

    mov rax, 1         ;Comando de escrita(sys_write)
    mov rdi, 1         ;Saída padrão (Tela)
    mov rsi, m1        ;Texto a ser impresso 
    mov rdx, l1        ;Tamanho do texto
    syscall

    ; Cálculo 1: 2 + 1 = 3
    mov rax, 2
    add rax, 1 
    call print_num

    ; Cálculo 2: 2 + 2 = 4 
    mov rax, 2 
    add rax, 2
    call print_num

    ;Cálculo 3: 4 + 1 = 5
    mov rax, 4
    add rax, 1
    call print_num

    ;Cálculo 4: 3 + 3 = 6 
    mov rax, 3
    add rax, 3 
    call print_num

    ;---------------------------------------------------
    ; BLOCO 2 - Bianca (4 subtrações)
    ;---------------------------------------------------
    mov rax, 1
    mov rdi, 1 
    mov rsi, m2 
    mov rdx, l2
    syscall

    ;Cálculo 5: 9 - 1 = 8
    mov rax, 9
    sub rax, 1 
    call print_num

    ;Cálculo 6: 8 - 1 = 7
    mov rax, 8
    sub rax, 1 
    call print_num

    ;Cálculo 7: 5 - 2 = 3
    mov rax, 5
    sub rax, 2
    call print_num

    ;Cálculo 8: 4 - 3 = 1
    mov rax, 4
    sub rax, 3 
    call print_num

    ;------------------------------------------------
    ; BLOCO 3 - Melissa (4 Multiplicações) 
    ;------------------------------------------------
    mov rax, 1
    mov rdi, 1 
    mov rsi, m3
    mov rdx, l3
    syscall

    ;Cálculo 9: 2 * 2 = 4
    mov rax, 2
    mov rbx, 2
    mul rbx 
    call print_num

    ;Cálculo 10: 3 * 2 = 6
    mov rax, 3
    mov rbx, 2 
    mul rbx
    call print_num

    ;Cálculo 11: 4 * 2 = 8
    mov rax, 4
    mov rbx, 2
    mul rbx
    call print_num

    ;Cálculo 12: 3 * 3 = 9 
    mov rax, 3 
    mov rbx, 3
    mul rbx
    call print_num

    ;------------------------------------------------
    ;BLOCO 4 - Isabelle (4 Divisoes)
    ;------------------------------------------------
    mov rax, 1
    mov rdi, 1 
    mov rsi, m4
    mov rdx, l4 
    syscall

    ;Cálculo 13: 8 / 2 = 4 
    mov rax, 8 
    xor rdx, rdx        ; Limpa o registrador rdx antes de dividir 
    mov rbx, 2 
    div rbx
    call print_num

    ;Cálculo 14: 6 / 2 = 3
    mov rax, 6
    xor rdx, rdx
    mov rbx, 2 
    div rbx
    call print_num

    ;Cálculo 15: 9 / 3 = 3 
    mov rax, 9 
    xor rdx, rdx 
    mov rbx, 3
    div rbx
    call print_num

    ;Cálculo 16: 4 / 2 = 2
    mov rax, 4
    xor rdx, rdx 
    mov rbx, 2 
    div rbx
    call print_num

    ;-------------------------------------------------
    ; BLOCO 5 - Katelyn (Mistas e Bitwise)
    ;-------------------------------------------------
    mov rax, 1 
    mov rdi, 1 
    mov rsi, m5 
    mov rdx, l5
    syscall

    ;Cálculo 17: Incremento (3 vira 4)
    mov rax, 3
    inc rax
    call print_num

    ;Cálculo 18: Decremento (8 vira 7)
    mov rax, 8 
    dec rax
    call print_num

    ;Cálculo 19: Lógica OR bit a bit (1 OR 2 = 3)
    mov rax, 1
    or rax, 2 
    call print_num

    ;Cálculo 20: Lógica XOR (5 XOR 4 = 1)
    mov rax, 5 
    xor rax, 4
    call print_num

    ; Encerramento limpo
    mov rax, 60
    xor rdi, rdi 
    syscall

    ;------------------------------------------------
    ;FUNÇAÕ AUXILIAR DE IMPRESSÃO 
    ; Salva e restaura os registros para evitar corrupção de dados
    ;------------------------------------------------
    print_num:
    push rax
    push rbx
    push rcx
    push rdx
    push rsi
    push rdi

    add rax, 48          ; Converte o número para caractere ASCII
    mov [char], al       ; Armazena o caractere na memória
    mov rax, 1           ; sys_write
    mov rdi, 1           ; Saída padrão (ecrã)
    mov rsi, char
    mov rdx, 2           ; 2 bytes (dígito + \n)
    syscall

    pop rdi
    pop rsi
    pop rdx
    pop rcx
    pop rbx
    pop rax
    ret
    

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: