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」と入力されたものと同じ処理をするということになるのでしょうか?
質問の意図が取りにくいかとは思うのですが、是非お答いただけたらと思います。どうか宜しくお願いします。
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のプロンプトではどうだったかは・・・
御回答ありがとうございます。
質問事項が抜けていたのですね。
その通りMS-DOSに関しての質問でした。
申し訳ありません。
>後者の「a4・a2」が正解です。
>
とのことなのですが、一度は「b1」をcommand.comが認識して
「a3」を消すことになるのでしょうか?
それとも何か他に制御しているものがあるということなのでしょうか?
もしお分かりでしたら教えていただけないでしょうか。
宜しくお願いいたします。
No.2
- 回答日時:
質問の回答のお礼の回答(・・・?)です
> > 後者の「a4・a2」が正解です。
> >
> とのことなのですが、一度は「b1」をcommand.comが認識して
> 「a3」を消すことになるのでしょうか?
> それとも何か他に制御しているものがあるということなのでしょうか?
command・comを解剖したわけではないので100%ではありませんが
99%command・comがやっているでしょう
私が調べた範囲でですがPC-98シリーズもDOS/V機も
そういった機能をもつBIOSサービスルーチンはありませんでした
・・・となると後はcommand・comがやっているしか考えられません
No.3
- 回答日時:
先ほどの回答に補足します
COMMAND・COMといってもどれくらいの範囲でしょうか
というのはDOS起動時におそらくMS-DOS・SYSと
IO・SYSというファイルが読み込まれると思われるので
プロンプトの制御ルーチンがここに記述されている可能性はあります
masahiro_chi さんが何をやらんとされているのか教えていただければ
もうすこし具体的に回答できるのですが・・・
御回答いただきまして誠にありがとうございます。
io.sysファイルというものもあるのですか。
大変参考になりました。
私が何をしようとしているかと言いますと
数日前に「MS-DOSについて」と言う質問をさせていただきまして
皆様の御回答を拝見させていただくうちに
このような質問に至りました。
御親切にありがとうございました。
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という規格に基づいています。このへんのキーワードも調べてみると面白いかもしれません。新刊書店で参考書を見つけることが難しいようだったら、専門の古書店に当たってみてはどうでしょう。東京なら神保町に、理工学書専門の古書店がいくつかあったと思います。
御回答頂きまして誠にありがとうございます。
御丁寧に教えていただきまして、非常に感謝しております。
入力バッファ領域と画面表示用の領域が別にあるのですか。
そのあたりが私の中で整理がついていませんでした。
おかげさまで何とか宿題の回答を作成することが出来そうです。
ただ、少しだけ御回答いただいたものの中で気になるところがありまして、
しつこくて大変恐縮なのですが、なんとか再度御回答いただけないでしょうか。
ここにいわれるアセンブラの基礎概念とはどういったものなのでしょうか?
また、io.sysとは基本的にどういう働きをするものなのでしょうか。
本当に申し訳なく思いますが、是非よろしくお願いいたします。
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がファンクションコールの処理から行っているような気配ですね。
うーん、このへんは思いっきり「自信なし」です。どなたか補足を……。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) セルの計算の上限値を設定し、残りを別のセルに表示させる 7 2022/06/17 13:12
- Excel(エクセル) 時間差を求めるマクロコードを教えてください。 4 2022/05/17 18:22
- Excel(エクセル) 【マクロ】ボタンを押すごとに、A1セル、A2セル、A3セルに日付を入力 3 2023/01/25 00:12
- Excel(エクセル) スプレッドシートについて A1÷B1の値をC1に、A2÷B2をC2、A3÷B3をC3…といった感じで 1 2022/05/17 20:24
- Excel(エクセル) 全角文字「ヴ」の半角文字「ヴ」への変換方法について 3 2022/11/05 12:07
- Excel(エクセル) エクセル・セルに数式を入力してセル指定計算 2 2023/04/21 12:46
- Excel(エクセル) エクセルの参照先が空白の場合、「0」ではなく空白を表示させたい。 3 2023/02/28 17:41
- Visual Basic(VBA) 【VBA】特定の文字で改行(次の行)に行きたい。 3 2022/04/11 17:20
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windows Media Playerを開くと...
-
SHARPのBRAIN(第一世代)をWindo...
-
Windows(11)ってもうゴミなんで...
-
「Wi-Fiアダプターへのアクセス...
-
windowsにいてなぜwindowsxpか...
-
windows11 きれいなロック画面...
-
MS-DOS 6.22のダウンロード
-
アイコンに、四角い枠が出来て...
-
windows11でクイックスキャン等...
-
Windowsファイルエクスプローラ...
-
Windows Mac Linux で共用可能...
-
Raspberry Pi 3 A+ ブラウザ遅い
-
Windows11のデスクトップのアプ...
-
Microsoftアカウントのユーザー...
-
疑問符表示が出てハードディス...
-
Windows11のデスクトップについて
-
Windowsアップデートしたらタス...
-
エクスプローラのアクティブウ...
-
windows11におけるファイルの並...
-
Windows11でアイコンが変更でき...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Windows Media Playerを開くと...
-
エクスプローラのアクティブウ...
-
windows11でクイックスキャン等...
-
Windows11のデスクトップのアプ...
-
windowsにいてなぜwindowsxpか...
-
windows11におけるファイルの並...
-
アイコンに、四角い枠が出来て...
-
MS-DOS 6.22のダウンロード
-
Windows11 システム通知音がも...
-
Acer AXC605-H54D にOSをインス...
-
勝手に無変換になる
-
VirtualBoxのゲストOS起動時にU...
-
Windowsの古いゲーム(32bit OS...
-
windows11 きれいなロック画面...
-
Microsoft edgeのメッセージに...
-
Windows10で小規模LANの構築は...
-
Windowsで大量の画像サイズを半...
-
Windowsアップデートしたらタス...
-
「Wi-Fiアダプターへのアクセス...
-
Microsoftのページだけ全て「申...
おすすめ情報