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
To embed this project on your website, copy the following code and paste it into your website's HTML: