SkyOS Assembly Programming

Argument order for syscalls is:

ebx ecx edx esi edi

For function calls, arguments are pushed onto the stack, so that esp+4 is ebx

If more arguments are needed, put them in a structure and pass a pointer to it in the first argument. All registers are preserved across calls. Return value is put into eax.

For a list of syscalls, look at skyos/syscalls.h in the include directory. One should call interrupt 0xA0 to execute a syscall.

Here is an example program written in assembly for SkyOS. They should be compiled and linked by doing the following.

fasm file.asm file.o
gcc file.o -o file.app

Hello, World!

format ELF
public main

section '.text' executable align 16

main:
mov edx,len ; message length
mov ecx,msg ; message
mov ebx,1   ; stdout
mov eax,3   ; sys_write
int 0xA0    ; call interrupt

mov eax,5   ; sys_exit
mov ebx,0   ; return value
int 0xA0    ; call interrupt

section '.data' writeable align 4

msg db 'Hello, World!',0xa
len = $ - msg