ブート考

現在のブートソース。

bits 16
org 0x7c00

section .text

main:
	mov si,hello
	call print
	jmp halt

; void print(char *si)
print:
.start
	mov al, [si]
	inc si
	
	cmp al, 0
	je .end
	
	call put
	
	jmp .start
.end:
	ret

; void put(char al)
put:
	mov bx, 15    ; カラーコードの指定(先に指定した方がよさげ)
	mov ah, 0x0e  ; 1文字表示
	int 0x10      ; BIOSコール
	ret
; halt loop

halt:
.start
	hlt
	jmp .start

; data

hello: db "Hello, boxnos World!!", 0

; boot trap
	times 0x01fe-($-$$) db 0
	db 0x55,0xaa

う〜前とあんまり変わってない・・・。ふと会社帰りに思ってしまった。

「ブートをGASで書いてみよう!」

残念ながらアセンブラ苦手だし、GASなんて・・・。しかし、OSを作る上でGASは避けて通れない道。GCCでNASM形式アセンブラを吐くことも出来るけど、標準はGASなのですよ。インラインアセンブラを書こうと思ったら、GASと言う選択肢しかない!迷ったときはより困難な道を目指せ(カッコイイ

そんなわけで、ブートをGASで書き直すことにしまっす。まだコレだけしか書いてないし〜。アセンブリ言語の教科書を再読することにします。

アセンブリ言語の教科書

アセンブリ言語の教科書

アセンブラと言えばこの本。良書です。実際にDEBUGコマンドをやってみると、レジスタの様子がわかって楽しいです。文句を付けるとするなら、

  • レジスタの説明が足りない。
  • リファレンスが見にくい。

Webでも一部読めるので、買う前に一読しておくと幸せです。

アセンブリ言語の教科書

3章よむべぇ〜