在要把helloos.nas转成helloos.asm之间,碰到了Notepad++无法检视课本所附程式的日文注解,全部都是问号空格,让人真是不自在,好在有这个外挂Notepad++ 多国语浏览 plugin v0.1 pre-alpha可以解决问题,但是这个外挂只有附原始程式,听说还要用Visual C++ 2005 Express来编译,现在早就没有这种就软体了,感谢也有人翻译了放在网路上,不过是放在http://www.badongo.com/file/10406839,这样下载有点麻烦说!NppEnc_v0.1我另外放在工作达人这里,有兴趣的人可以参考使用,解压缩后将.dll档放在Notepad++的plugins里,重新启动就可以使用!
解码后的程式码如下:
; hello-os
; TAB=4
ORG 0x7c00 ; このプログラムがどこに读み迂まれるのか
; 以下は标准的なFAT12フォーマットフロッピーディスクのための记述
JMP entry
DB 0x90
DB “HELLOIPL” ; ブートセクタの名前を自由に书いてよい(8バイト)
DW 512 ; 1セクタの大きさ(512にしなければいけない)
DB 1 ; クラスタの大きさ(1セクタにしなければいけない)
DW 1 ; FATがどこから始まるか(普通は1セクタ目からにする)
DB 2 ; FATの个数(2にしなければいけない)
DW 224 ; ルートディレクトリ领域の大きさ(普通は224エントリにする)
DW 2880 ; このドライブの大きさ(2880セクタにしなければいけない)
DB 0xf0 ; メディアのタイプ(0xf0にしなければいけない)
DW 9 ; FAT领域の长さ(9セクタにしなければいけない)
DW 18 ; 1トラックにいくつのセクタがあるか(18にしなければいけない)
DW 2 ; ヘッドの数(2にしなければいけない)
DD 0 ; パーティションを使ってないのでここは必ず0
DD 2880 ; このドライブ大きさをもう一度书く
DB 0,0,0×29 ; よくわからないけどこの值にしておくといいらしい
DD 0xffffffff ; たぶんボリュームシリアル番号
DB “HELLO-OS ” ; ディスクの名前(11バイト)
DB “FAT12 ” ; フォーマットの名前(8バイト)
RESB 18 ; とりあえず18バイトあけておく
; プログラム本体
entry:
MOV AX,0 ; レジスタ初期化
MOV SS,AX
MOV SP,0x7c00
MOV DS,AX
MOV ES,AX
MOV SI,msg
putloop:
MOV AL,[SI]
ADD SI,1 ; SIに1を足す
CMP AL,0
JE fin
MOV AH,0x0e ; 一文字表示ファンクション
MOV BX,15 ; カラーコード
INT 0x10 ; ビデオBIOS呼び出し
JMP putloop
fin:
HLT ; 何かあるまでCPUを停止させる
JMP fin ; 无限ループ
msg:
DB 0x0a, 0x0a ; 改行を2つ
DB “hello, world”
DB 0x0a ; 改行
DB 0
RESB 0x7dfe-$ ; 0x7dfeまでを0x00で埋める命令
DB 0x55, 0xaa
; 以下はブートセクタ以外の部分の记述
DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
RESB 4600
DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
RESB 1469432
这样是不是较清楚了!
今天8/27又借到这本书,再度读到这里,为什么要写oRG 0x7c00,大家可以看作者的这个对照图,是日文的,看起来可能就有点痛苦了,不过课本直接这样写‘0x00007c00-0x00007dff:开机磁区(Boot Sector)被读入的位址’,好了,这是规定,所以作者也布希望再有人问为什么了!