• ベストアンサー

command.comとASCIIコードについて

command.comとASCIIコードについて質問させて下さい。 もし御存じであれば以下について御回答いただけないでしょうか。 例えば、 キーボード上「 あ」・「 い」・「 う」・「 え」・「BS」・「 ←」というキーがあり そしてそれに対応するASCIIコードが それに対応して「a1」・「a2」・「a3」・「a4」・「b1」・「b2」となっていたとします。 その時、「あ・い・う」というコマンドを入れたかった場合に 「え・い・う」と間違えて入力してしまった場合、command.comにはENTERが押された時点で「a4・a2・a3」という命令がされることになるのですか? その後で、「a1・a2・a3」に直したいとき「BS」で戻るというのは「BS」の「b1」というコードが 「a4・a2・a3・b1」と入るわけではなく、直接command.comの入力用バッファが 「a4・a2」となってしまうということになるのでしょうか? それとも、やはり「a4・a2・a3・b1」となっているんだけどディスプレイ上「え・い」となっているということなのでしょうか? それに対して「 ←」キーは異なる動作をするということなのですか? それとも、もともと「b2」というコードはなくて「 ←」と入力されたときは 「BS」と入力されたものと同じ処理をするということになるのでしょうか? 質問の意図が取りにくいかとは思うのですが、是非お答いただけたらと思います。どうか宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nuts
  • ベストアンサー率36% (141/389)
回答No.5

そろそろ「自信なし」の回答になってきます。 まずアセンブラの概念ですね。アセンブラ(というのはプログラムの名前なので、厳密にはアセンブリ言語)は、CPUやメモリを直接操作します。それに対してコンパイラで使うCやJavaなどの高級言語は、メモリなどを抽象化したものを扱います。 具体的にたとえば、文字列の操作をするとき、高級言語では名前をつけた文字列変数を用意して、文字列削除の命令で何番めの文字を削除、という操作をするのですが、アセンブリ言語ではメモリのx1番地からx4番地までを文字列の領域として使う、3文字めを削除するときはx3番地をクリアする、といった操作をプログラム自体に指定します。高級言語でも最終的にやっていることは同じなのですが、高級言語のプログラムソースを見ていても、こうしたことはわかりません。 (実際には、シンプルなC言語での文字列処理はメモリの直接操作に近い方法ですし、アセンブリ言語でもマクロアセンブラを使えばかなり抽象化できますが、とりあえずここでは概念の話です)。 このへんはまさしく「概念」なので、これがわかったからといって実際のアセンブリ言語でのプログラミングには結びつきません(わたしも実はできません)。ただ、最終的にコンピュータの中でこうした仕組みが働いている、と理解しておけば、もちろんアセンブリプログラミングの第一歩になりますし、高級言語のプログラミングや、単に利用する上だけでも、有効なのではないかと思います。 io.sysは、本来のMS-DOSでは、外部入出力(I/O、input/output)とCPUを繋ぐ働きをします。command.comなどからの「この文字を表示しろ」という命令(ファンクションコール)をmsdos.sysが解釈し、それをio.sysが実際のVRAM(表示用のメモリ)の番地に変換して書き込む、といった作業を行っていたはずです。もっとも最近のWindowsでは、msdos.sysは単に以前との互換性のために残されているだけで、io.sysがファンクションコールの処理から行っているような気配ですね。 うーん、このへんは思いっきり「自信なし」です。どなたか補足を……。

masahiro_chi
質問者

お礼

御回答ありがとうございました。 本当に参考になりました。 御厚意に感謝いたします。

その他の回答 (4)

  • nuts
  • ベストアンサー率36% (141/389)
回答No.4

質問の履歴を見ると、だいぶお困りのようですね……。 これについては、入力バッファがどういう構造のメモリであるかを考えるのが近道だと思います。アセンブラそのものの知識は必要ないですが、その基礎になっている概念が必要だ、ということでしょう。 まず、command.comは入力バッファというメモリ領域を用意しています。メモリには(この場合は)1バイト単位で番地が割り振られ、直線上に並んでいると考えることができます。仮にx1,x2,x3,x4...としましょう。また、画面表示用のメモリ領域(内容がそのまま画面に反映される)もあり、これをv1,v2,v3,v4...とします。 質問の例では、x1にa4,x2にa2,x3にa3と、入力された文字を順に格納していき、それがふつうの文字コードなら、そのままv1~v3にコピーして画面上に表示させます。BSまたは←キーを押したとき、x4にいったんコードb1が格納されますが、これは前削除のコードなので、command.comのプログラムがb1を解釈し、x3ひいてはv3をクリアします。もちろんx4に格納されていたb1自体もクリアされます。x4をv4に反映する前にこの処理を行うわけです。(まとめてcommand.comと書きましたが、v1~に反映させるのはio.sysあたりの仕事かもしれません。あいまいな回答ですみませんが)。 素のcommand.comのバッファエディタは、これだけの(x1~に格納されたコードを解釈し、反映させる)作業しかしません。他に、ふつうのキーではEnterとBreakの解釈をするぐらいです。ctrl-H,ctrl-M,crtl-C,ctrl-J,ctrl-Eなどの動作も試してみてください。上記以外がどうなるかは細かく覚えていませんが(^_^;(ctrl-Pとctrl-Nはプリンタ関係なので、下手に触るとハングアップするかもしれないので気をつけて)。 もともとcommand.comの動作はテレタイプを真似たVT-52やVT-100という規格に基づいています。このへんのキーワードも調べてみると面白いかもしれません。新刊書店で参考書を見つけることが難しいようだったら、専門の古書店に当たってみてはどうでしょう。東京なら神保町に、理工学書専門の古書店がいくつかあったと思います。

masahiro_chi
質問者

お礼

御回答頂きまして誠にありがとうございます。 御丁寧に教えていただきまして、非常に感謝しております。 入力バッファ領域と画面表示用の領域が別にあるのですか。 そのあたりが私の中で整理がついていませんでした。 おかげさまで何とか宿題の回答を作成することが出来そうです。 ただ、少しだけ御回答いただいたものの中で気になるところがありまして、 しつこくて大変恐縮なのですが、なんとか再度御回答いただけないでしょうか。 ここにいわれるアセンブラの基礎概念とはどういったものなのでしょうか? また、io.sysとは基本的にどういう働きをするものなのでしょうか。 本当に申し訳なく思いますが、是非よろしくお願いいたします。

  • bluesky
  • ベストアンサー率33% (3/9)
回答No.3

先ほどの回答に補足します COMMAND・COMといってもどれくらいの範囲でしょうか というのはDOS起動時におそらくMS-DOS・SYSと IO・SYSというファイルが読み込まれると思われるので プロンプトの制御ルーチンがここに記述されている可能性はあります masahiro_chi さんが何をやらんとされているのか教えていただければ もうすこし具体的に回答できるのですが・・・

masahiro_chi
質問者

お礼

御回答いただきまして誠にありがとうございます。 io.sysファイルというものもあるのですか。 大変参考になりました。 私が何をしようとしているかと言いますと 数日前に「MS-DOSについて」と言う質問をさせていただきまして 皆様の御回答を拝見させていただくうちに このような質問に至りました。 御親切にありがとうございました。

  • bluesky
  • ベストアンサー率33% (3/9)
回答No.2

質問の回答のお礼の回答(・・・?)です > > 後者の「a4・a2」が正解です。 > > > とのことなのですが、一度は「b1」をcommand.comが認識して > 「a3」を消すことになるのでしょうか? > それとも何か他に制御しているものがあるということなのでしょうか? command・comを解剖したわけではないので100%ではありませんが 99%command・comがやっているでしょう 私が調べた範囲でですがPC-98シリーズもDOS/V機も そういった機能をもつBIOSサービスルーチンはありませんでした ・・・となると後はcommand・comがやっているしか考えられません

masahiro_chi
質問者

お礼

なるほど。 概要が分かってきました。 御回答いただきましてありがとうございました。

  • bluesky
  • ベストアンサー率33% (3/9)
回答No.1

えーと MS-DOSに関してでしたら > 「え・い・う」と間違えて入力してしまった場合、command.com にはENTERが > 押された時点で「a4・a2・a3」という命令がされることになるのですか? そのとおりです。 > その後で、「a1・a2・a3」に直したいとき「BS」で戻るというのは > 「BS」の「b1」というコードが「a4・a2・a3・b1」と入るわけではなく > 直接command.comの入力用バッファが 「a4・a2」となってしまう > ということになるのでしょうか? 後者の「a4・a2」が正解です。 > それに対して「 ←」キーは異なる動作をするということなのですか? > それとも、もともと「b2」というコードはなくて「 ←」と > 入力されたときは「BS」と入力されたものと同じ処理をするということに > なるのでしょうか? これについてはPC-98シリーズMS-DOSに限って言えば BSキーと←キーのキーコードは同一 したがって同一の動作をします DOS/VのMS-DOSやWin95のプロンプトではどうだったかは・・・

masahiro_chi
質問者

お礼

御回答ありがとうございます。 質問事項が抜けていたのですね。 その通りMS-DOSに関しての質問でした。 申し訳ありません。 >後者の「a4・a2」が正解です。 > とのことなのですが、一度は「b1」をcommand.comが認識して 「a3」を消すことになるのでしょうか? それとも何か他に制御しているものがあるということなのでしょうか? もしお分かりでしたら教えていただけないでしょうか。 宜しくお願いいたします。