水城珠洲のページ

DOSのプログラミング

資料4 DOSのプログラミング


DOSのアセンブラプログラミングについて少々概要を書きます。アセン ブラというのは下級言語と言われ、高級言語(BASIC,C,COBOL,FORTRAM,ect…)よりもはっきし言って、単純かつ難しいです。高 度な機能を持つという事は、大きな制約を持つという事でもあります。これを詳しく知りたい人は国と軍隊の関係を考えてみましょう。国がなければ軍隊はいら ない、軍隊がいらなければ侵略の驚異もなくなります。他にもいろいろありますがすぐには思いつかないので却下。効率を上げる度に、何らかの物を失わければ ならないのですね。以上は関連性の一見無い物に関連性を見いだす例でして、話がそれました。
高度な機能を持たない・・・・コンピュータとしての最低限に近い機能しか持たないアセンブラですがDOS上ともなれば拡張機能・・・・サブルーチン群があ ります。これに伴う代償はメモリの半分近くをDOSに占領されると言う事です。ちなみに16ビットの機械には1024K(1M)のメモリをダイレクトに接 続できる事になっています。が、DOSを使用すると384Kほど、無効に(正確にはあらゆる用途に)取られてしまいます。また、140K程度をDOS本体 に持って行かれてしまいます。すると500Kぐらいしか残りません。これは、FEPや、各種ドライバを導入した場合で、何もしなければMS-DOS5では 520Kぐらいは何とか空きます。
単純と言ったのは、命令がまさにプロセス群で構成されていると言う事です。これは、実際にやってみれば分かりますが、高級言語でなら、一行ですむ事を、 数行(ひどいときには数十行)に分割しなければならないと言う事です。ですが、この利点としては、高級言語で発生する無駄を一切なくす事が出来るという事 です。この利点はCPUの加速によって意味を持たなくなってきていますが。欠点としては一切自分で考える・・・つまりプログラマの高度な技術を極限までに 要求される事にあります。ただし、これはパズルみたいな物で見直すという作業で幾らかは解消されます。これは経験によってつちかわれる物ですし。
難しいのは高度な技術の解析で、いかに、経験を積むかと言う事につきます。
Z80(8ビット)で例を示しましょう。
Aレジスタに0をいれたいとします。Z80の代入命令はLDです(8086のMOV)
普通だと以下のような物を思いつきます。

        LD      A,0

これはアセンブル(実行形式に直す)すると3EH,00Hという2バイトの命令になります。私なら以下のように記述します。

        XOR     A

XORという命令はAレジスタと示されるレジスタとの排他的論理和(2進数になおして、上下に比べ同じだったらそこに0が、違ったら1が入る)をAに代入 します。AとAの排他的論理は、2進数に直すまでもなく一切同じですから、0になります。これをアセンブルすると0AFHという1バイトの命令ですんでし まいます。これが、高度な技術と呼ばれる物の一角です(分かってみれば何てことはない)。8086ですともっと自由な発想が実現する事でしょう(Z80は 以外と制約が多かった)。勇気を出して一歩・・・コンピュータの極限に近い世界に踏み出してみるのもいいでしょう。その前にハードウェアという壁がありま すが。
サブルーチンについての説明ですが、ファイルの操作が中心的です。DOSと言われる由縁の一つです。しかも、初歩的な部分はCP/M86と同様の構成に なっていて、CP/M86とかなりの互換性を持っています。これは、過去のMS-DOS1当時の対CP/M86商戦の名残です。
話が反れますが、過去、CP/Mが盛んであった当時、16ビット用のOSとしてCP/M86という商品がでていました。そこに目をつけた当時のマイクロ ソフトは初期導入OSとしてCP/M86とかなり互換性を持つMS-DOSを売り込みました。最初からついてくる物と、金を出して買わなければならないの と機能が同等であった場合は、ついてくる物を使うのが常識ですね。故にCP/M86は滅びました。これが私がマイクロソフトを嫌う理由の一つ「商戦が汚 い」です。それだけではありませんが。
さて、MS-DOS2.1から、現在もっとも利用されている機能が追加されます。どれほどの人が認識しているかは別として・・・。MS-DOS3.1か ら、アセンブラをやった人ならまず知っている04CHのルーチンが組み込まれました。MS-DOS5.0からはメモリ関係(特にUMB)が組み込まれま す。が、このころからは操作性の方に比重がおかれています。というのも、MS-DOS5.0のころから、一般的な普及が急速的に始まったからです。20万 円を切るなどと言われていたのもこの頃です。そして、MS-DOS6.0では、まったくと言っていいほどサブルーチンの追加はないでしょう(覗いてないか らしらぁない)。PC-DOSJ7.0/Vに限って言えば、多少の変更はあったようです。
私がPC-DOSJ7.0/Vにこだわったのは、最後のDOSでかつ、マイクロソフトではない、完全なDOS/V、なんといってもIBM。以上の4つの 理由によります。MS-WINDOWS95へのささやかな挑戦でもあります。もっとも、WINDOWS95にとっちゃ、なんでもないでしょうけど。

こんてんつめぬー

こんてんつめぬー

  • facebook
  • twitter
PAGETOP
Copyright © Suzu Minashiro All Rights Reserved.
Powered by WordPress & BizVektor Theme by Vektor,Inc. technology.