2日目のアセンブラをダンプ - HobbyOSs/opennask GitHub Wiki
- OS自作入門の2日目はさまざまな命令が出てくるのでちょいと再現が難しい
; hello-os
; TAB=4
ORG 0x7c00 ; ORGはバイナリには現れない
; 以下は標準的なFAT12フォーマットフロッピーディスクのための記述
JMP entry ; eb4e
; 上記 0x4e(78d, 4e自身から見て次のentryまで78byteある)
DB 0x90 ; 90
DB "HELLOIPL" ; 48454c4c4f49504c
DW 512 ; 0002
DB 1 ; 01
DW 1 ; 0100
DB 2 ; 02
DW 224 ; e000
DW 2880 ; 400b
DB 0xf0 ; f0
DW 9 ; 0900
DW 18 ; 1200
DW 2 ; 0200
DD 0 ; 00000000
DD 2880 ; 400b0000
DB 0,0,0x29 ; 000029
DD 0xffffffff ; ffffffff
DB "HELLO-OS " ; 48454c4c4f2d4f53202020
DB "FAT12 " ; 4641543132202020
RESB 18 ; 000000000000000000000000000000000000
; プログラム本体
entry:
MOV AX,0 ; b80000
MOV SS,AX ; 8ed0
MOV SP,0x7c00 ; bc007c
MOV DS,AX ; 8ed8
MOV ES,AX ; 8ec0
MOV SI,msg ; be747c
- ↑
MOV SI,msg
: MOV命令からラベルまでの距離をWORD単位で格納(リトルエンディアン)なのだが、0x74は全体のバイト数の累積となる
2日目ダンプ のスプシ
putloop:
MOV AL,[SI] ; 8a04
ADD SI,1 ; 83c601
CMP AL,0 ; 3c00
JE fin ; 7409
MOV AH,0x0e ; b40e
MOV BX,15 ; bb0f00
INT 0x10 ; cd10
JMP putloop ; ebee => 0xee(-18d)
fin:
HLT ; f4
JMP fin ; ebfd
msg:
DB 0x0a, 0x0a ; 0a0a
DB "hello, world" ; 68656c6c6f2c20776f726c64
DB 0x0a ; 0a
DB 0 ; 00
RESB 0x7dfe-$ ; 0x7dfeまで0x00
DB 0x55, 0xaa ; 55aa
; 後はまあいいですよね…
DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
RESB 4600
DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
RESB 1469432