Write a (kindof) proper init, at least with the capabilities we have right now

This commit is contained in:
apio 2022-10-01 15:54:42 +02:00
parent ba4806f9d3
commit 96f53922c9

View File

@ -1,24 +1,65 @@
section .text
global _start
_start:
mov rax, 1
int 42h ; sys_yield
mov rdi, HelloLabel
mov rsi, 17
mov rax, 3
int 42h ; sys_write
mov rdi, 4000
mov rdi, welcome_label
call print
call next_line
mov rdi, 1000
call sleep
mov rdi, version_label
call print
call next_line
mov rdi, 2000
call sleep
mov rdi, end_label
call print
call exit
sleep:
mov rax, 2
int 42h ; sys_sleep
mov rdi, ExitLabel
mov rsi, 26
int 42h
ret
strlen:
push rbx
push rcx
mov rbx, rdi
xor al, al
mov rcx, 0xffffffff
repne scasb
sub rdi, rbx
mov rax, rdi
pop rcx
pop rbx
dec rax
ret
print: ; string: rdi
push rdi
call strlen
mov rsi, rax
mov rax, 3
int 42h ; sys_write
pop rdi
int 42h
ret
next_line:
mov rdi, newline
mov rsi, 1
mov rax, 3
int 42h
ret
exit:
mov rax, 0
int 42h ; sys_exit
int 42h
section .rodata
HelloLabel:
db "Hello from init!", 0xA
ExitLabel:
db "Well, bye. (init exiting)", 0xA
version_label:
db "You are running Luna version v0.7-beta", 0xA, 0
welcome_label:
db "Welcome to Luna!", 0xA, 0
end_label:
db "Press any key to restart.", 0xA, 0
newline:
db 0xA