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になっていたり、その逆もあるので説明がつかないような気もしますが…。
詳しい方、ご教示ください。
No.1
- 回答日時:
これを読めば理解できますか?
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でしょうが…)
No.2ベストアンサー
- 回答日時:
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
とか、そんな感じです。
回答ありがとうございます。疑問が氷解するようなご説明で助かりました。
キーワードをもとに、自力で調べて、実践してみます。
でも、COMかEXEか決定するのは最終的にはほぼプログラム作成者の
意向に委ねられていて、深い意味がない場合もある、というのはかなり以外でした。
No.3
- 回答日時:
今さら確認するつもりはありません (というか実機が手元にないから確認できない) が, COM か EXE かってのは「ファイルを実
際に見ないとわからない」はずです. 実行可能かどうかはファイル名で決まりますが, メモリにロードして実行するときにはファイル名は無関係だったと思う.ご回答ありがとうございます。
確かに、EMM386.EXEやLEMM.EXE、VEM486.EXE、SMARTDRV.EXE
(INSTALL=\DOS62\SMARTDRV.EXE /Xなど)もCONFIG.SYS内で
ロードできちゃいますから、その点では「COMは常駐」とは必要十分条件ではないのですね。
No.4
- 回答日時:
COMの短い例をあげますね。
RESET.COM : 9Bytes
これなら、逆アセンブルしても追えるでしょう。
参考URL:http://kan-chan.stbbs.net/download/dos/main.html
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(セキュリティ) 役所など、情報系システムのセキュリティが弱くても業務システムに問題ないか 3 2022/11/02 16:38
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- その他(セキュリティ) exeファイルの個人情報について 3 2023/06/29 17:36
- 労働相談 合意済み仕様の商品納入後における仕様変更要求への対応について 5 2023/04/19 09:41
- フリーソフト 数字を縦長に拡大する方法について 7 2022/11/28 08:23
- Windows 10 windows11のUSB接続の機器がcomポートに表示されない。 3 2023/04/13 07:51
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- C言語・C++・C# exeファイルが作れない(windows10) 6 2022/08/13 08:47
- その他(IT・Webサービス) エクセルの実行ファイルについての質問です。 1 2023/05/04 03:58
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PICに書き込むプログラムや変数...
-
アセンブラのLA
-
データコピー
-
バイナリの実行ファイルをgccを...
-
アセンブラからC言語に変換する...
-
アセンブラで割り算
-
PICはアセンブラとC言語のどち...
-
PICのアセンブラからC言語へ変...
-
ライン数とステップ数の違いは?
-
SHの命令の意味について
-
素数を求めるプログラム(アセン...
-
素朴な疑問 (C言語とアセン...
-
情報処理技術者試験センター・...
-
MASMの機種依存についてお尋ね...
-
アセンブラエディタ
-
アセンブラ(アセンブリ)の何か...
-
PIC16F84AのデバイスでC言語を...
-
Linuxについて。
-
Cとアセンブリ
-
【H8マイコン】HEWで埋め込みア...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ライン数とステップ数の違いは?
-
アセンブラからC言語に変換する...
-
Windowsはオープンソースですか?
-
[C言語→アセンブリ言語]はどう...
-
実行ファイルからソースはみれる?
-
PICはアセンブラとC言語のどち...
-
void __cdeclなど_
-
アセンブラ言語がわかりません。
-
このアセンブラの意味を教えて...
-
エンディアンについて。
-
アセンブラのコマンドについて
-
PICのアセンブラからC言語へ変...
-
アセンブラで割り算
-
最初のアセンブラ
-
CASIOのポケコンZ-1GRのアセン...
-
SHの命令の意味について
-
PC-9801でマシン語を学習するに...
-
PC-9801 MS-DOSでの実行ファイ...
-
アセンブラのLA
-
masm32がうまく動きません。
おすすめ情報