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