📑 Table of Contents
シングルボードコンピュータW65C816Sの機械語モニタ。逆アセンブルしたコード、レジスタ、メモリダンプなどを表示。
Apple IIの機械語モニタ。6502のもの。

機械語モニタ(きかいごモニタ、: Machine code monitor, Machine language monitor)は、機械語レベルのモニタ

概要

編集

機械語モニタは、機械語レベルのモニタ(監視・観察用のソフトウェア)であり、その基本的な機能としては、指定したメモリアドレスから機械語プログラムを実行させて、その結果の主記憶の値の状態をメモリアドレスの範囲を指定して観察したり、コアダンプCPUレジスタ類の値を観察するというものがある。その機能に加えて、主メモリの指定したメモリアドレスの値を指定した値に書き換える機能や、指定範囲のデータを補助記憶装置から主記憶へとロードしたり主記憶から補助記憶装置へとストアする機能を備えているものも一般的である。ファームウェアないし基本的なシステムソフトウェアとして提供される。

機械語モニタは、1970年代や1980年代前半のマイクロコンピュータ、特にマイクロコンピュータがまだキット形式やセミキット形式で販売されることもあった時代、特にホビーコンピュータと呼ばれる機種で広く使われたものである。

一部の機械語モニタは1ステップづつ機械語を実行するという機能(原始的なデバッガのような機能)を持たせるようになり、やがて機能が足されてゆきデバッガ、またアセンブラや逆アセンブラなどの機能も加えることも行われたが、1980年代に、マイコンよりも複雑化・高度化したパーソナルコンピュータが一般化してゆき、デバッガ・アセンブラ・逆アセンブラなどがそれぞれ高機能化し単体のソフトウェアとなってゆくにつれ、機械語モニタのほうは使われる頻度が減っていった。現代では機械語モニタが使われる状況は、組み込みシステムEFIなどできわめてハードウェア寄りの操作をする時など、かなり限られている。現代では、ハードウェア寄りの一部の技術者が使用することはあるが、一般のコンピュータユーザが直接使うことは無い。

1970年代や1980年代前半に一般的だった機械語モニタのありふれた使用法は、たとえば機械語プログラムのデバッグのために使うことであり、開始と停止のメモリアドレスをユーザが入力・指定して機械語プログラムを実行させる。指定した停止アドレスに達した段階でプログラムの実行が停止し、制御をユーザに戻し、ユーザの次の入力を待つ状態になる、というものである。

Apple IIの機械語モニタの例

たとえば、Apple IIの2番目以降のバージョンでは電源を入れるとen:Applesoft BASICの画面が立ち上がり「]」プロンプトが表示される。

]_

もし機械語モニタを使いたければ次のように入力する[1]

] CALL -151[1]

そしてエンターキーを押すと機械語モニタが呼び出され、モニタに切り替わったことを示すためプロンプトが「*」に変更された[1]

*_

Apple II機械語モニタでは次のコマンドが用意されていた。

  • XXXX.YYYY - メモリダンプ。XXXX から YYYY までの内容を16進数で表示
  • XXXX:YY - アドレス XXXX に YY を書き込む
  • XXXX<YYYY.ZZZZ - メモリコピー。YYYY〜ZZZZ の内容を XXXX にコピー
  • XXXXG - 実行。アドレス+G 形式で書いたGはGoの略。アドレス XXXX から機械語プログラムを実行
  • RESET - システムをリセット
  • CTRL+C - モニタから抜けて Applesoft BASIC に戻る

たとえばメモリアドレス $0300以降に機械語を書き込むには、次のように入力しエンターキーを押した。

* 300:A9 0F 8D 32 C0 A9 00 8D 32 C0 4C 00 03

[注釈 1][注釈 2] そしてアドレス300($0300)から実行するには次のように入力しエンターキーを押した。

* 300G

上述のプログラムの無限ループのように、実行が終了しない機械語プログラムを強制的に終了させBASICに戻るには、Apple IIでは「Ctrl+C」を押してreturnキーを押した[1]。Apple IIでも機種でキーが異なり、Ctrl+Cのほか、機種によってはCtrl + Resetを押した[注釈 3]

プログラムの実行が終了し制御が機械語モニタに戻っている状態でApplesoft BASICに戻るには、次のように入力しエンターキーを押してもよかった。

*3D0G

[注釈 4]

歴史

編集

1950年代などまでは、コンピュータの状態を確認するにはテレタイプ端末ラインプリンタなどでいちいち紙に印字する方法が使われていて、ディスプレイは使われていなかった。

1960年代からCRTを用いるディスプレイが使われるようになったおかげでソフトウェアを用いて画面上でコンピュータの状態を確認することが可能になり、紙やインクリボンの浪費とコストを気にせずコンピュータの状態を何度でも監視・観察することができるようになった。

1970年代後半に登場したマイクロコンピュータパーソナルコンピュータの初期段階)では、その歴史の最初から機械語モニタが提供されることが一般的となった。マイクロコンピュータでは機械語モニタは、ファームウェアとして提供される場合も、サードパーティのROMの形で提供される場合も、ソフトウェアとして提供される場合もあった。1970年代のコンピュータではROM(Read Only Memory)には機械語モニタしか書かれていないものもあった。

たとえば1977年にリリースされたApple IIのROMには簡素な機械語モニタが書かれていて、最初のバージョンのApple IIでは電源を入れると最初に表示されるのは次のような、機械語モニタを示す「*」(アスタリスク)のプロンプトだった[1]

*

そこから一歩進んだ、BASICを搭載したコンピュータでは、電源を入れると同時にBASICが立ち上がる仕様が一般的となってゆき、ローレベルの処理を行う際にBASIC側から機械語モニタを呼び出すしくみになっていった。たとえば、前述のように、Apple IIの2番目以降のバージョンではそうなった。

その後ROM-BASICDISK-BASICが標準装備されるコンピュータが登場し、電源を入れるといきなりBASICのモードでマシンが起動するようになっても、「MONコマンド」等を入力すれば機械語モニタを使うことができた。

なお、初期の機械語モニタでは16進数で表示する機能しか備えておらず、機械語をアセンブリ言語に変換して表示する機能は備えていないものがあった。

なおシャープのMZ-80のような「クリーン設計」の機種では、システムの自由度を極限まで高めるために、機械語モニタはROMに書き込まれていなかった。本体ROMに書き込まれているものはIPL(イニシャル・プログラム・ローダー Initial Program Loader)だけで、機械語モニタも補助記憶装置(データレコーダなど)からRAMに読み込まれる方式になっていた[2]

高機能な機械語モニタは、簡易デバッガとしても機能し、絶対アドレス指定方式のアセンブラ逆アセンブラの機能も備えていた。例えば、Intel 8086を搭載したPC-9801N88-DISK BASIC(86)(1982年 - )の機械語モニタでは、アセンブラと逆アセンブラを備えていた[3]。この時代、機械語モニタだけでプログラミングを行うこともそう珍しいことではなかった。

以後のパーソナルコンピュータでは、デバッガ・アセンブラ・逆アセンブラはそれぞれの高機能化し便利になり、低機能で作業効率の悪い機械語モニタを使わずに済むようになった。

脚注

編集
注釈
  1. ^ Apple IIでは、メモリアドレス$0300に書き込むには300と書けばよかった。 300($0300)はApple II の RAMの空き領域。機械語プログラムを書くときに、よく使われた安全なアドレスのひとつ。
    Apple IIでは、以下のようなメモリマップがあった。
    • 0000–01FF Zero page, stack
    • 0200–03FF テキスト入出力、キーボードバッファなど(このアドレスの一部が機械語の実験に使える)
    • 0400–07FF テキストスクリーン
    • C000–C0FF I/O(グラフィック、色制御など)
    特に$0300 番地は特に何にも重要なことに使われておらず、小さな実験用の機械語ルーチンを置くのに都合が良い場所として使われた。
  2. ^ この機械語プログラムは下のようなものである。 A9 0F → レジスタAに0Fをロード
    8D 32 C0 → Aの値をC032(テキストスクリーンの色レジスタ)にストア
    A9 00 → Aに00をロード
    8D 32 C0 → AをC032にストア(色を戻す)
    4C 00 03 → JMP $0300。自分自身にジャンプして無限ループ
  3. ^ Apple IIe Ctrl+Reset 一部機種では Reset だけで BASIC に戻る。 Apple IIcでは、Command+Reset または Ctrl+Reset。
  4. ^ 3D0Gは、メモリアドレス $03D0Gから機械語を実行せよ、という命令であり、ROMのアドレス $03D0 以降には Applesoft BASIC に制御を戻すための小さな機械語ルーチンが書かれており、"Applesoft BASIC に戻るための入口" (機械語モニタからの便利な"出口")として頻繁に使われた。
出典
  1. ^ a b c d e Apple II, machine language monitor
  2. ^ [1]
  3. ^ 岡村 秀一郎『PC-9801E/F/M キーボード・CRT/モニタ 解析マニュアル[第2巻]』秀和システムトレーディング株式会社、1984年11月18日、p63-66,p123-135,p153-173頁。 

📚 Artikel Terkait di Wikipedia

Microsoft Azure

Pipelines SDK Visual Studio Visual Studio Code Azure Artifacts Azure Boards Azure DevOps Azure DevTest Labs Azure Monitor Azure Pipelines Azure Repos Azure Test

マイクロソフトのソフトウェア一覧

Desktop Optimization Pack(英語版) Sysinternalsユーティリティ Process Explolrer Process Monitor(英語版) PageDefrag(英語版) SyncToy(英語版) Windows SteadyState(英語版) Windows Live

ノーフォーク (バージニア州)

Nightmare. Courier. 2001年春. Qtd by Norfolk Historical Society. ^ Battle of the Monitor and the Merrimac. AmericanCivilWar.com. ^ Tucker, Chapter 46: Lincoln Plans

Libvirt

Pythonを使っている製品あるいはソフトウェアの一覧 ^ libvirt: Releases ^ Virtual Machine Manager the virtualization API リリース履歴 libvirt Code量の変遷 コンパイル状況確認 ソースコード libvirtドライバ毎機能の一覧表 Perl bindings

バッファオーバーフロー

the user. This can be used to inject code into the monitor that will permit the user to seize control of the machine. この処理を実行するコードは読み込み元と書き込み先のアドレスに対する

リモートデスクトップ

Trojan(英語版) Bifrost(英語版) Blackshades(英語版) DarkComet(英語版) Havex(英語版) Imminent Monitor NjRAT(英語版) PoisonIvy(英語版) Sub Seven(英語版) [脚注の使い方] ^ “Moonlight でリモートデスクトップしてみる”

ノースアダムズ (マサチューセッツ州)

"History of North Adams, Mass. 1749-1885", 1885, p. 12 ^ “North Adams Marking Monitor Anniversary”. iBerkshires.com. オリジナルの2014年7月22日時点におけるアーカイブ。. https://www

CP/M

tem-10を開発に使用したことがあり、そのOSであるTOPS-10の影響を大きく受けていた。 CP/Mは元々Control Program/Monitorの略称で、OSが起動する前の小さな内蔵モニターを意味していた。しかし商品化のため1977年11月に商標登録した際にはControl Program