お薦め ページ


メニュー

ハワイ島 遊覧飛行ツアー

ハワイ島 B&B・ホテル

ハワイ島 不動産情報

ハワイ島 情報・観光ガイド

ブログ(Blog)

その他

関連サイト

: 日付別 アーカイブ :

2007年2月25日

2007年2月25日

8086マシン語、ハンド・アセンブル実験(1)

知り合いの方からマシン語についてのご質問を頂いたので、 一種のデモンストレーションとして 8086のマシン語をハンド・アセンブルしてみることにする。 但し、複雑なプログラムは大変なので、 最低限 マシン語が動作していることがわかるレベル、 ということで事前に指定した一文字を画面に表示させるプログラムを作ってみる。

たった 一文字の表示であっても、 OSやBIOSに頼らず、全てをマシン語で組むのは非常に大変なので、 ここでは、安直にMS-DOSファンクションコールを呼ぶこととしよう。 これであればWindowsのコマンド・プロンプト画面、いわゆる「DOS窓」の中で実行できるハズだし、 もし、暴走してしまっても、その「DOS窓」を強制終了させれば、 Windows自体をリセットする必要もない。

ここでは、 「MS-DOS MASM プログラミング入門」 のページに MS-DOSファンクションコールについての解説があるのでそれを参考にしてみる。 これによると、出力に1文字出力するファンクションコールは、 「AH = 02H : DL = 出力する文字コード」となっている。 この情報をもとに アセンブラで記述してみると以下の4行になる。
mov  dl, 53h   ; 「S」の字の ASCII文字コード を DLレジスタにセット
mov  ah, 02h   ; 出力に1文字出力するファンクションコールを指定
int  21h       ; MS-DOSファンクションコール
int  20h       ; プログラムの終了
これをIntel の 80x86系CPUのオペコード・テーブルを使って 16進数に変換してみる。

まず、1行目の「mov dl, 53h」について。 DL レジスタに1バイトの値をセットするオペコードは「B2」で、 それに引き続き、セットしたい1バイトの値が来る。 この例では、大文字の「S」の字を表示することとして、 そのASCIIコードである 53h が来ることになる。 よって、「mov dl, 53h」の行は16進コードの「B2, 53」となる。

同様に、2行目の「mov ah, 02h」の オペコードは「B4」で、このコードに引き続き、 出力に1文字出力する MS-DOSファンクションコール を表す 「02h」をセットする。 よって、「mov ah, 02h」の行は16進コード「B4, 02」となる。

それからファンクションコールを実行する ソフトウェア割り込みである「int」命令のコードは「CD」であり、 直後に割り込み番号を1バイトで指定する。 MS-DOSファンクションリクエストの割り込み番号は「21」なので 「int 21h」はコード「CD, 21」となり、 その直後の、プログラムの終了を意味する 「int 20h 」がコード「CD, 20」となる。

これらを全てつなげてみると 「B2, 53, B4, 02, CD, 21, CD, 20」 となる。

では、実際の実行方法については次回のブログへの続きとしよう。

【参考リンク】

カテゴリー: プログラミング     22:50 | コメント (0) | トラックバック (0)

 
ハワイ島での遊覧飛行ツアーとB&Bのスペシャリスト、スカイメリカ
Copyright © 2003,2009 Skymerica Corp. All rights reserved.