「夫を成功」へ導く妻の秘訣 座談会

PC-9801実機上で、NASMやDJGPP(GCC v4.3.2)を使用しプログラミングを
しています。ハードウェア・ソフトウェア(DOS関連)資料も40冊ほど
買い込み、実機も7台揃えて80286/V30~Pentium初代まで互換をもたせるよう
がんばっています。
念のためフリーでダウンロードしたBorlandのTurbo C(英語版パッチ済み)と
TASM(BCC5.5に同梱)はありますが、まだ入れてません。
箱物の日本語版 PC-98用MASMや日本語版 PC-98用Turbo Cが欲しいんですが、
オクでもめったにないので…(not MASM32。
あれ[MASM32]はライセンス的にヤバいと聞きました)。

さて、質問ですが、標題の件。MS-DOSでは実行ファイル形式として、
COMとEXEがあり、
1)COMはセグメントを気にせずコーディングできる反面、64KBまでの制約があり、
大型のプログラミングには向かない。フルアセンブルのコードが当たり前。
速度重視(極論ですが)。I/Oポートやデバイスを直に叩く、ことが多い。
2)EXE型プログラムは、セグメントを意識しなければならないが、
64KB以上の実行ファイルを生成可能であり、Cとアセンブラオブジェクトとの
連携が可能。Cでのインラインアセンブルも活用できる。構造化。可読性。
可搬性。AVRマイコンのライタなどでもEXEのものがある。

実際にDOSディレクトリ以下を見ますと、いったい何を基準に
COMとEXEを使い分けたのか、いまいちつかみかねています。
所有バージョンは日電版 DOS3.3C/3.3D/5.0A/6.2、EPSON版 DOS3.3/6.2ですが、
具体的には日電版 DOS6.2では
1)DISKCOPY.EXE サイズ: 63.1KB
2)ATTRIB.EXE サイズ: 11.2KB
3)MORE.COM サイズ: 2.76KB
4)MEM.EXE サイズ: 32.3KB
5)EDLIN.EXE サイズ: 13.9KB
6)MOVE.EXE サイズ: 18.9KB
7)UNFORMAT.COM サイズ: 24.1KB
などです。

C + インラインアセンブラ(もしくはアセンブラオブジェクトと
Cオブジェクトとのリンク)ではなく、フルアセンブルであればなおさら
上記実行ファイルは全部.COMにして差し支えないように思えるのですが、
所望の結果がセグメントをまたぐ・またがないに関わることで基準があるのでしょうか
(セグメントの概念にいま取り掛かったばかりのヒヨッコですが)。

しかしそれだと、DISKCOPY.COMとか、FreeDOSなどでは.EXEではなく、
.COMになっていたり、その逆もあるので説明がつかないような気もしますが…。
詳しい方、ご教示ください。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

1) HOGE.COMの、メモリモデルは tiny です。


 64KBの制限は tiny からきます。( 逆だったかな? )
 
・C / ASM は、メモリモデルとポインタを意識すれば(セグメント)
 C = ミデアムと ASMモジュール : far扱い
 C = ラージと  ASMモジュール : hugeでなければ普通
 C = ヒュージと ASMモジュール : 理解してれば問題なし
 使えますよ。スモールは忘れました…

COMを作るときには「tinyでつくるぞ」としないとだめなんです。
だからほとんど、最初の段階で決まってしまいます。
COM/EXEで、なんで? → つくった人に聞くしか無い場合もあります。
 → 深く追求する意味は、あまりないですよ。


メインメモリ640KBの空間なので、効率的にしないと
必要な機能を実装することが出来ません。

HOGE.COMは64Kですしメモリを食いません。
HOGE.COM 内部で HOGEBODY.EXE を呼び出すことも可能です。

また FOO.COM は、メモリに常駐することも可能です。
# デバドラのSYSではなく
# ADDDEV/ADDRV は、確かあとになって出てきた代物です。

COMの常駐は、割り込みベクターテーブル / int21 のソフトウェア割り込み近辺

速度重視は
・必要な機能がDOSファンクションコールでは不十分だった
・BIOSコールでも不十分
・お手製デバイスなので、全部作るしかない
・かつかつタイミング制御
・機器内のレジスタR/W
とか、そんな感じです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。疑問が氷解するようなご説明で助かりました。
キーワードをもとに、自力で調べて、実践してみます。

でも、COMかEXEか決定するのは最終的にはほぼプログラム作成者の
意向に委ねられていて、深い意味がない場合もある、というのはかなり以外でした。

お礼日時:2009/02/26 23:26

COMの短い例をあげますね。


RESET.COM : 9Bytes

これなら、逆アセンブルしても追えるでしょう。

参考URL:http://kan-chan.stbbs.net/download/dos/main.html
    • good
    • 0

今さら確認するつもりはありません (というか実機が手元にないから確認できない) が, COM か EXE かってのは「ファイルを実

際に見ないとわからない」はずです. 実行可能かどうかはファイル名で決まりますが, メモリにロードして実行するときにはファイル名は無関係だったと思う.
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
確かに、EMM386.EXEやLEMM.EXE、VEM486.EXE、SMARTDRV.EXE
(INSTALL=\DOS62\SMARTDRV.EXE /Xなど)もCONFIG.SYS内で
ロードできちゃいますから、その点では「COMは常駐」とは必要十分条件ではないのですね。

お礼日時:2009/02/26 23:35

 


これを読めば理解できますか?
http://ja.wikipedia.org/wiki/COM%E3%83%95%E3%82% …

EXEはこちら
http://ja.wikipedia.org/wiki/EXE%E3%83%95%E3%82% …

 

この回答への補足

回答ありがとうございます。概要は理解できましたが、なぜ例示した
ファイルでCOMとEXEの別があるのか、その必然性が理解できません。

また、FreeDOSではDISKCOPY.COMとかFORMAT.COMとかFDISK.COMとかが
存在しますが、それがなぜ日電版やEPSON版のDOSでは、EXEなんでしょうか?
(元はといえばMSのOEMでしょうが…)

補足日時:2009/02/26 22:20
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QPC98のメモリー不足について

PC98のゲームを起動しようとしたらメモリー不足といわれてしまい、困っています。メモリは640kbあるはずなのにメモリー不足といわれたときは339kbしかないといわれてしまいました。メモリの設定を変えなければいけないのでしょうか。設定の変え方はよくわかりません。どなたか教えてください。

Aベストアンサー

多分、メモリーの内容が書き変わってしまったのだと思います、helpひーを押しながらリセットして、sw2-5の状態を、反転して起動すると直ると思います。
RX以前の物なら、直接2-5をOFF(上)にしてみて下さい。

Qpc98のエミュレータを使って N88BASICを使いたい。

こんにちは、
pc98のエミュレータを使って N88BASICを使いたい。と考えています。
(目的:PC98で作られたプログラムを動かしたい。)

環境:WindowsXP

それで、pc98のエミュレータを実際に入れてみたのですが、それだけではだめみたいです。
(T98-NEXT:起動するとNo System (T98-Next Internal Boot Loader)というメッセージが出る。

エミュレータというものをはじめて使うため、基本的なこともわかっていないのですが、ほか、何を入れれば動くようになるのでしょうか?

何かお分かりの方がいましたら教えてください。よろしくお願いします。

Aベストアンサー

そのエミュレータは、PC98のハードウェアをエミュレートしているだけではありませんか?
その環境に別途、PC98のMS-DOSをインストールする必要があると思いますが。

今、下記サイトを見たらN88BASICを動かすためには、BIOS自体も移さないと駄目みたいです。

参考URL:http://www.geocities.co.jp/SiliconValley-Bay/2754/index.html

QWindows 3.1のインストールの仕方

Windows 3.1のインストール方法を教えてください。
MS-DOSから起動する、ということを聞いていたのですが、不安なので詳細まで教えていただければ幸いです。

Aベストアンサー

手順としては、

1.ハードディスクにMS-DOSをインストールする。
 (FAT16でフォーマットした領域しかインストールできません。)
2.Windows3.1 Disk1をFDDに挿入して、
 C:\> a:
A:\> setup.exe
の順に入力してインストーラを起動する。
(※入力するのは、「a:」と「setup.exe」です。)
3.画面の指示に従って、Diskを入れ替えるだけです。(10数回ほど)
4.プリンターの設定やサウンドドライバーのインストールなどを
 行う。

ちなみに、FDDが無いPCの場合は、パーツショップなどに行って、
デスクトップPCなら内蔵用のFDDを購入する必要があります。
USBは無論使えません。


人気Q&Aランキング