Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions Assembly/loop.asm
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
section .data
newline db 10 ; newline character

section .bss
buffer resb 20 ; buffer for number string

section .text
global _start

_start:
mov rbx, 1 ; counter starts at 1

print_loop:
; Convert number to string
mov rax, rbx ; number to convert
lea rdi, [buffer+19]; point to end of buffer
mov byte [rdi], 0 ; null terminate
mov rcx, 10 ; divisor

convert_loop:
xor rdx, rdx ; clear rdx for division
div rcx ; divide rax by 10
add dl, '0' ; convert remainder to ASCII
dec rdi ; move buffer pointer back
mov [rdi], dl ; store digit
test rax, rax ; check if quotient is 0
jnz convert_loop ; continue if not zero

; Calculate string length
lea rsi, [buffer+19]; end of buffer
mov rdx, rsi ; copy end address
sub rdx, rdi ; length = end - start

; Write number to stdout
mov rax, 1 ; sys_write
mov rsi, rdi ; string start address
mov rdi, 1 ; stdout
syscall

; Write newline
mov rax, 1 ; sys_write
mov rdi, 1 ; stdout
lea rsi, [newline] ; newline character
mov rdx, 1 ; length
syscall

; Increment counter and repeat
inc rbx ; next number
jmp print_loop ; infinite loop

; Exit (never reached)
mov rax, 60 ; sys_exit
xor rdi, rdi ; exit code 0
syscall