Skip to content

Instantly share code, notes, and snippets.

@reginaldojunior
Last active May 6, 2026 22:51
Show Gist options
  • Select an option

  • Save reginaldojunior/9eaa61ab8b04d914e2aff57d5d5876fb to your computer and use it in GitHub Desktop.

Select an option

Save reginaldojunior/9eaa61ab8b04d914e2aff57d5d5876fb to your computer and use it in GitHub Desktop.
exemplos assemblys
default rel
section .data
valorA dd 42
valorB dd 17
msg_maior db "valorA e maior que valorB", 10
len_maior equ $ - msg_maior
msg_menor db "valorA e menor ou igual a valorB", 10
len_menor equ $ - msg_menor
section .bss
written resd 1
section .text
global _start
extern GetStdHandle
extern WriteFile
extern ExitProcess
_start:
sub rsp, 40
; pegar stdout handle
mov ecx, -11 ; STD_OUTPUT_HANDLE
call GetStdHandle
mov rbx, rax ; salvar handle
mov eax, [valorA]
mov edx, [valorB]
cmp eax, edx
jle menor
maior:
mov rcx, rbx ; handle
lea rdx, [msg_maior] ; buffer
mov r8d, len_maior ; tamanho
lea r9, [written] ; bytes escritos
mov qword [rsp+32], 0 ; lpOverlapped = NULL
call WriteFile
jmp fim
menor:
mov rcx, rbx
lea rdx, [msg_menor]
mov r8d, len_menor
lea r9, [written]
mov qword [rsp+32], 0
call WriteFile
fim:
xor ecx, ecx
call ExitProcess
; montar: nasm -f win64 loop.asm -o loop.obj
; linkar: ld loop.obj -o loop.exe -lkernel32 -e _start
extern GetStdHandle
extern WriteConsoleA
extern ExitProcess
section .bss
char resb 1
written resd 1
section .text
global _start
_start:
; HANDLE = GetStdHandle(-11)
mov rcx, -11
call GetStdHandle
mov rbx, rax
xor rsi, rsi ; contador = 0
loop:
cmp rsi, 11 ; até 10
jge fim
; ---- conversão número → ASCII ----
mov rax, rsi
add al, '0' ; transforma em caractere
mov [char], al
; WriteConsoleA(handle, &char, 1, &written, NULL)
mov rcx, rbx
lea rdx, [char]
mov r8, 1
lea r9, [written]
sub rsp, 40
mov qword [rsp+32], 0
call WriteConsoleA
add rsp, 40
; imprimir espaço (opcional)
mov byte [char], ' '
mov rcx, rbx
lea rdx, [char]
mov r8, 1
lea r9, [written]
sub rsp, 40
mov qword [rsp+32], 0
call WriteConsoleA
add rsp, 40
inc rsi
jmp loop
fim:
mov rcx, 0
call ExitProcess
default rel
section .data
numero dd 7
prefixo db " x ", 0
igual db " = ", 0
newline db 10, 0
section .bss
buffer resb 32
written resd 1
section .text
global _start
extern GetStdHandle
extern WriteFile
extern ExitProcess
;---------------------------------------
; imprime string (rcx=handle, rdx=ptr, r8=tamanho)
print:
mov r9, written
mov qword [rsp+32], 0
call WriteFile
ret
;---------------------------------------
; converte inteiro em string (eax → buffer)
; retorna: rdx=ponteiro, r8=tamanho
itoa:
lea rsi, [buffer+31]
mov byte [rsi], 0
mov ecx, 10
.convert:
dec rsi
xor edx, edx
div ecx
add dl, '0'
mov [rsi], dl
test eax, eax
jnz .convert
mov rdx, rsi
lea r8, [buffer+31]
sub r8, rsi
ret
;---------------------------------------
_start:
sub rsp, 40
; stdout handle
mov ecx, -11
call GetStdHandle
mov rbx, rax
mov r12d, 0
mov r13d, [numero]
.loop:
cmp r12d, 10
jg .fim
; imprime numero
mov eax, r13d
call itoa
mov rcx, rbx
call print
; " x "
mov rcx, rbx
lea rdx, [prefixo]
mov r8d, 3
call print
; imprime contador
mov eax, r12d
call itoa
mov rcx, rbx
call print
; " = "
mov rcx, rbx
lea rdx, [igual]
mov r8d, 3
call print
; resultado
mov eax, r13d
imul eax, r12d
call itoa
mov rcx, rbx
call print
; newline
mov rcx, rbx
lea rdx, [newline]
mov r8d, 1
call print
inc r12d
jmp .loop
.fim:
xor ecx, ecx
call ExitProcess
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment