0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CUIOS開発 COM実行実装 第1段階 COMファイルの準備

Posted at

「手探りでCUI OS作成に挑む」連載

この記事は「手探りでCUI OS作成に挑む」連載の一部です。
全体の目次は「手探りでCUI OS作成に挑む」連載目次を御覧下さい。

やりたいこと

現在CUIのOSを開発中です。以下は開発中のソースです。
https://github.com/ooe1220/sourouOS/tree/20250628

OS内でCOMファイルを実行する機能を実装する前段階として、NASMで生成したCOMファイルがMS-DOS上で問題なく動作するかを確認します。

MS-DOSでCOMファイルを実行することで、筆者が作成したCOMファイルがMS-DOSの規格に準拠していることを証明できます。

MSDOSの環境

以下の記事で仮想HDDへMSDOSをインストールし、QEMU上で実行する手順を紹介しております。
https://qiita.com/earthen94/items/7491ac22a98e4ae823c9

COMの作成

COMファイルは以下の特徴を持ちます:

  • EXEと異なりヘッダがなく単純な構造
  • 実行開始アドレスは 0x100 固定

今回は以下のように「Hello, World!」を表示するCOMを作成します。

int 21hはMSDOSのシステムコールであり、AHを通じて呼び出す機能を選択します。
以下は今回使用したシステムコールです。
0009h:「文字列表示」機能
4C00h:「プログラム終了」

hello.asm
org 0x100          ; COMは必ず0x100から開始(セグメントは自由)
mov ah, 0009h
mov dx, msg
int 21h

mov ax, 4C00h
int 21h

msg db 'Hello, World!$'

MSDOS上で実行

# コンパイル
nasm -f bin hello.asm -o hello.com

# 空のフロッピーイメージ作成 FAT12で初期化
dd if=/dev/zero of=floppy.img bs=512 count=2880
mkfs.fat -F 12 floppy.img

# フロッピーにhello.comを入れる
sudo mkdir /mnt/floppy
sudo mount -o loop floppy.img /mnt/floppy

sudo cp hello.com /mnt/floppy

sudo umount /mnt/floppy

## QEMUで起動
qemu-system-i386 -fda floppy.img -hda msdos_hdd.img -boot c

起動後、以下のようにAドライブを選択し、COMファイルを実行できます。

图片.png

Hello, World! が正しく表示されました。

今後の予定

ここからint21hを自力で実装し、COMファイル実行機能を実装していきます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?