カピバラ父さんのプログラミング処方箋~実行ファイルとは

コマンドプロンプトからファイル名を入力すると実行することができるファイルを、実行ファイルと言います。

X68000におけるプログラミングの最終目的は、この実行ファイルを作ることです。
あるいは、X-BASICのようにプログラムリストを解析実行する処理系が解釈できるプログラムを作り、実際に動作させることです。

いずれにせよ、アプリケーションプログラムを実行するには、実行ファイルをOSがメモリ上にロードした上で展開し、 制御を渡してもらう必要があります。

実行ファイルはどこにある?

おそらく最も馴染みがある例をひとつ上げると、Aドライブのルートにあるcommand.xは実行ファイルです。 他には、コマンドプロンプトから
dir A:¥bin と入力すると、いくつかの実行ファイルが確認できます。

実行ファイルは、それぞれ使用目的も動作内容も異なります。 もし、ゲームを遊びたいのなら、ゲーム用の実行ファイルを用意する必要があり、かつては、 パソコン通信やディスクマガジンなどで入手する方法がありました。

2026年現在において、インターネットの海を探せば、見つかるものもあるかもしれません。 もしかしたら、生成AIが希望の実行ファイルを作ってくれるのかもしれません。 ですが私の場合は、世の中に有ろうと無かろうと、自分で作れそうなものは自作します。

その理由は単純で、「自作したプログラムが期待通り動いたら嬉しいから」に決まっています。

拡張子XとかRの話

Human68kの実行ファイルは、〇〇〇.Xのほかに、〇〇〇.Rというのがあります。 開発ツールに含まれるコンバータCV.Xは、.Xから.Rのファイルに変換するプログラムです。

どのようなファイルなら.Rにできるか、また、.Rに変換するメリットは何かと問われると 中々難しいのですが、.R形式にできるプログラムというのは、その実行ファイルをメモリに 読み込んだあとに、moveとかjmpで参照するラベルのアドレスを計算しなおす必要がない、という特徴があります。

例えば次のプログラムは、メモリにおいてからアドレスを計算しなおして、それから実行されます。

	.include doscall.mac
	.text
start:
	move.w	#10,count	* countのアドレスは実行時に決まる
loop:
	pea	message		* messageのアドレスも実行時に決まる
	DOS	_PRINT
	addq.l	#4,sp
	sub.w	#1,count
	bne	loop		* bneは、アセンブル時にPC相対アドレスで計算される
	DOS	_EXIT
message:	.dc.b	'Hello, world.',$d,$a,0
	.bss
	.even
count:	.ds.w	1
	.end

この再計算処理を「再配置処理」と呼びます。 OSがこの処理を行うためには、.Xファイルには計算しなおすべきアドレスの一覧テーブルを持つ必要があるため、その分だけファイルサイズが大きくなります。

.Rファイルは、この再配置処理とアドレス一覧テーブルが不要な実行ファイルです。 プログラムの動作開始までの動きがシンプルで、ファイルサイズが小さいことがメリットの一つになります

.Rに変換可能なプログラムを作るには、以下の条件をクリアしなければなりません。

特に、プログラムカウンタPCとの相対アドレスは±32kバイト以内しか使えないことと、 デスティネーションアドレスに使うことはできませんので注意が必要です。 それを踏まえて先ほどのサンプルプログラムを書き直すと、以下のようになります。

	.include doscall.mac
	.text
start:
	lea	count(pc),a5
	move.w	#10,(a5)
loop:
	pea	message(pc)
	DOS	_PRINT
	addq.l	#4,sp
	sub.w	#1,(a5)
	bne	loop
	DOS	_EXIT
message:	.dc.b	'Hello, world.',$d,$a,0
	.bss
	.even
count:	.ds.w	1
	.end	start

プログラミング処方箋へ

Copyright©2026 カピバラ父さん