Własny system operacyjny - Nic trudnego!

2

Cześć!

Jakieś 15 lat temu pisałem własny system operacyjny.
Aktualnie jestem programistą C/C++ dla Embedded/Linux i dla odetchnienia postanowiłem wrócić do tamtych czasów.
System który wtedy napisałem był już dość zaawansowany, posiadał stos TCP/IP, serwer HTTP, własne mini kompilatory. Jak teraz do tego wracam, to lekka magia :)
Chciałbym teraz napisać coś na nowo, lecz całkowicie zgodnie ze sztuką programowania.
Robię teraz wszystko krok po kroku.
Ze względu że odświeżam sobie assemblera, schematy funkcji, gdzie argumenty są przekazywane przez stos, chciałbym o abyście przeanalizowali ten kawałek kodu.

[ORG 0x7C00]
[BITS 16]

; STACK
mov ax, 0x1000
mov ss, ax
xor sp, sp

push msg
call puts
add  sp, 0x02

push msg
call puts
add  sp, 0x02

forever:
jmp forever

puts:
	push bp
	mov  bp, sp
	
	mov  si, [bp+0x04]
	
	puts_loop:
		mov  ax, [si]
		cmp  al, 0x0
		jz puts_exit
		
		push ax
		call putc
		add  sp, 0x02
		
		inc si
	jmp puts_loop
	
puts_exit:

	;leave
	mov  sp, bp
	pop  bp
ret

putc:
	push bp
	mov  bp, sp
	
	mov  ah, 0x0e
	mov  al, [bp + 0x4]
	int  0x10

	;leave
	mov  sp, bp
	pop  bp
ret

msg: db 'Hello World!', 13, 10, 0

times 510 - ($ - $$) db 0
dw 0xAA55

Tutaj chciałbym się poczuć jako super początkujący i przyjąć wszystkie uwagi i krytykę:

  1. Uwagi dotyczące formatowania kodu dla assemblera
  2. Szablon funkcji, przekazywanie argumentów, wyrównywanie stosu po wykonaniu funkcji
  3. Nazwy funkcji
  4. Wszystko inne czego nie poruszyłem

Budowanie i uruchomienie (np. aktualny Debian i jego programy z repozytorium):

nasm -f bin boot.asm -o boot
qemu-system-i386 -fda boot

Bardzo dziękuję i pozdrawiam,
OsReBeginner

0

Zerknij mi tu https://github.com/akasei/Cyjon/blob/master/bootloader/stage1.asm
Jest to mój styl pisania kodu w asemblerze.

1 użytkowników online, w tym zalogowanych: 0, gości: 1