nask と nasm

haribote OSは、アセンブラを極力減らしてC言語で記述されています。ということはアセンブラ部分さえクリアできれば、よりなじみ深い nasm + gcc で開発できるはずです。というわけで、まずはブートセクタ部分を nasm にかけてみました。短いプログラムなのに結構違いがあるようです。先は長そうです・・。

ORGの違い

nask (ipl09.nas)

 ORG 0x7c00 ; このプログラムがどこに読み込まれるのか

nasm (firstboot.asm)

 org 0

プログラムの開始アドレスが異なっています。ということは以降のアドレスも全部 0x7c00 分引かなければいけないんですかね?教えてえらいひと。

RESBとTIMES

nask (ipl09.nas)

RESB 18       ; とりあえず18バイトあけておく
  :
  :
RESB 0x7dfe-$ ; 0x7dfeまでを0x00で埋める命令

nasm (firstboot.asm)

TIMES 18 db 0 ; とりあえず18バイトあけておく
  :
  :
TIMES 0x01fe-($-$$) db 0 ; 0x7dfeまでを0x00で埋める命令

RESBという命令がないみたいで、代わりにTIMESを使っていました。ここでも記法に違いがあるようです。