━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ いざというときに役立つMS−DOS 執筆:速星 千里 特別号(2004.03.08) アセンブラへの招待(1) 5881部配信 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ <目次> ■ はじめに ● 3〜4月の発行予定(修正版)(再掲) ● ウイルス「WORM_NETSKY.D」に注意 ■ アセンブラへの招待 ■ DEBUGコマンド ● DEBUGコマンドのコマンド ● 16進表記について ■ 文字列を出力するプログラム(1) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ はじめに ------------------------------------------------------------------------ 皆さん、こんにちは。速星です。 当メルマガでは、創刊1周年を記念し、「アセンブラへの招待」と題した特別号 を、今日と13日の2回に分けてお送りします。 1回目の今日は、DEBUGコマンドを使って簡単なプログラムを作ってみることに します。 ------------------------------------------------------------------------ ● 3〜4月の発行予定(修正版)(再掲) 3〜4月は、都合により休刊、および配信日の一部変更をさせていただきます。 当初予定から、1周年記念特別号を2週に分けて発行するように変更しました。  3月01日:第45号(プロンプト)  3月08日:1周年記念特別号(アセンブラへの招待(1))  3月13日:1周年記念特別号(アセンブラへの招待(2))  3月20日:第46号(リダイレクトとパイプ(3))  3月27日:第47号(バッチファイル開発ツール)  4月 3日:休刊  4月10日:第48号(MS−DOSの実体)  4月17日:休刊(情報処理技術者試験前日) (以降は通常通り発行の予定) 詳細は、当メルマガのホームページでご確認下さい。 http://www.geocities.co.jp/Bookend-Hemingway/4963/column/dos/ ------------------------------------------------------------------------ ● ウイルス「WORM_NETSKY.D」に注意 ウイルス「WORM_NETSKY.D」の感染が拡大しています。 http://www.trendmicro.co.jp/vinfo/virusencyclo/default5.asp?VName=WORM_NETSKY.D このウイルスはメールを経由して増殖するもので、件名は「Re: 」で始まる英文 節、本文は「ファイルを添付した」または「添付ファイルを見ろ」という趣旨の 英文です。拡張子「.PIF」のファイルが添付されており、これを実行するとウイ ルスに感染します。 感染すると、ウイルス添付メールが大量送信されます。その際、メールソフトに は送信記録が残らないため、感染の発見が遅れ、その間に被害が拡大する可能性 があります。 ウイルス対策ソフトウェアの導入などによって予防に努めて下さい。 また、ウイルス「WORM_BAGLE」の亜種も雨後の筍のごとく次々と発生しています。 こちらにも十分ご注意下さい。 ☆ オンラインでのウイルススキャン 「ウイルスバスターオンラインスキャン」(無料、常時接続推奨) http://www.trendmicro.co.jp/hcall/ ☆ お勧めセキュリティソフト 「ウイルスセキュリティ 2004」\1,980 http://www.amazon.co.jp/exec/obidos/ASIN/B0000EM6IB/msdos-22 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ アセンブラへの招待 ------------------------------------------------------------------------ 拡張子「.EXE」「.COM」などの実行ファイルの中身は、マシン語(機械語)です。 しかしマシン語は数字の羅列であるため、人間がプログラムを組んだり既存のプ ログラムを解析したりするのには適していません。 このため、人間がマシン語を操る場合は通常、マシン語の命令と1対1に対応し たプログラム言語が利用されます。 これが、アセンブラ言語(アセンブリ言語)です。 マシン語(IT用語辞典「e-Words」) http://e-words.jp/w/E3839EE382B7E383B3E8AA9E.html さて、ここまでの説明で「難しそう……」と身構えてしまった方、大丈夫です。 この特集では、簡単な内容しか説明しません。 アセンブラ言語について詳細(文法など)は説明しませんし、プログラムも、入 力例に沿って打ち込むだけです。 ややこしい説明は専門の書籍やサイトに任せ、適当に遊んでみることにします。 皆さんも是非、コンピュータに直接命令を出す楽しさを味わってみて下さい。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ DEBUGコマンド ------------------------------------------------------------------------ DOS上でアセンブラ言語を扱うために用いるのが、DEBUGコマンドです。 このコマンドは、Windowsが登場する前から、64キロバイト以下の簡単なプログ ラムの作成や解析、修正に用いられてきました。 古いコマンドであるため16bitのプログラムしか扱えませんが、それでもなぜか、 最新のWindowsにも収録されています。 なお、DEBUGコマンドは、使い方によってはシステムやデータを破壊する危険性 もある強力なコマンドです。 今号の内容を実践する際は、十分に注意して下さい。 ------------------------------------------------------------------------ ● DEBUGコマンドのコマンド DEBUGコマンドを起動すると、プロンプト「-」が表示されます。 この「-」に続けて英字1文字のコマンド(+オプションの数字や文字列)を入 力することで、様々な操作を行います。 英字1文字のコマンドについての詳細はコマンド「?」で確認できます。 ここでは、この特集で利用するコマンドだけ、簡単に羅列しておきます(特に覚 える必要はありません)。 「q」……DEBUGコマンドを終了します。 「a」……アセンブル(プログラムの入力)を開始します。 「e」……文字列や16進数の値などのデータを入力します。 「g」……プログラムの実行を開始します。 「r」……レジスタの値を書き換えます。ファイルサイズの設定にも利用します。 「n」……ファイル名を設定します。 「w」……プログラムをファイルに保存します。 「?」……コマンドの一覧を表示します。 ------------------------------------------------------------------------ ● 16進数表記について DEBUGコマンド中では、数字は全て16進表記のものが使われます。 16進数が何かよく分からないという方は、以下のページをご覧下さい。 16進法(アスキー デジタル用語辞典) http://yougo.ascii24.com/gh/20/002018.html 16進数(IT用語辞典「e-Words」) http://e-words.jp/w/16E980B2E695B0.html 16進数を扱うときは通常、10進数と区別するため、「0x1f」のように数字の 先頭に「0x」を付ける、あるいは「1fh」のように数字の末尾に「h」を付ける、 といったことが行われます。特にアセンブラの世界では、後者「h」が非常に頻 繁に用いられます。 しかしDEBUGコマンド中では、数字といえば全て16進数と決まっているため、 「h」のような識別符号はつきません。特にファイルサイズを扱うときなど、案 外このことを忘れがちですので、気を付けて下さい。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ 文字列を出力するプログラム(1) ------------------------------------------------------------------------ とりあえず、簡単なプログラムを1本作ってみましょう。 お決まりの、「Hello, world!」を表示するプログラムです。 文字列を表示するだけとはいえ、自分で作ったプログラムが意図通りに動作する のは大変うれしいものです。 皆さんも是非、話の流れに沿ってプログラムを作ってみて下さい。 ではまず、DEBUGコマンドを起動して、画面表示が下の通りになるように打ち込 んでいって下さい。失敗したときは、安全のため、一旦「q」でDEBUGコマンドを 終了し、始めから打ち直した方がいいでしょう。 ただし、「29E5:0100」などという部分の前半「29E5」は、そのときによって違 う値が表示されます。この値が異なっていても気にする必要はありません。 -a0100 29E5:0100 mov ah,09 29E5:0102 mov dx,0109 29E5:0105 int 21 29E5:0107 int 20 29E5:0109 -e0109 'Hello, world!$' ここまでで、プログラム本体の入力は完了です。 簡単に動作を説明しておくと、「mov ah,09」から「int 21」までは文字列の表 示を、また「int 20」はプログラムの終了を指示しています。表示する文字列は 「e0109 」以下にシングルクォーテーションで囲って入力した文字列となります。 なお「$」は、アセンブラの世界では、文字列の終了を意味する特殊な文字です。 では、「g=0100」と入力して、実行してみて下さい。「g」の後の「=」を忘れな いように注意しましょう。 -g=0100 Hello, world! プログラムは正常に終了しました. 「Hello, world!」の文字列が表示され、「プログラムは正常に終了しました.」 というメッセージが出たでしょうか。 正常に実行されなかった場合は、どこかでタイプミスをしているものと思われま す。もう一度始めから入力し直して下さい。 正常に実行できたら、拡張子「.COM」の実行ファイルとして保存しましょう。 画面表示が以下と同じになるように入力していって下さい。 -r bx BX 0000 :0000 -r cx CX 0000 :0017 -n hello.com -w 00017 バイト書き込み中 コマンド「r」はファイルサイズを16進数8桁(BXに上4桁、CXに下4桁)で 設定しています。「n」はファイル名の指定、「w」は保存実行の指示です。 これで、打ち込んだプログラムは実行ファイル「hello.com」として保存されま した。 コマンド「q」でDEBUGコマンドを終了し、コマンドプロンプトで「hello」と入 力してみて下さい。「Hello, world!」と表示されるはずです。 D:\>hello Hello, world! ちゃんと表示されましたか? これで、アセンブラ言語で作ったプログラム第1号「hello.com」の完成です! ------------------------------------------------------------------------ 今回はここまでです。 お疲れ様でした! 特別号の後半は、3月13日の発行です。 DEBUGコマンドを用いたゲーム作成を取り上げる予定です。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ コメントをお待ちしています ------------------------------------------------------------------------ 皆さんからの感想・質問・要望をお待ちしています。 「こんなテーマを扱ってほしい」 「こんなことはできるの?」 「このへんが分かりにくかった」 「1回の分量を増やしてほしい/減らしてほしい」 など、掲示板(下記URL)まで気軽にお願いします。 http://bbs9.otd.co.jp/dos/bbs_thread (スレッド表示) http://bbs9.otd.co.jp/dos/bbs_tree (ツリー表示) メールでもコメントを受け付けておりますので、そちらもご利用下さい。 tetrahedrane@yahoo.co.jp なお、いただいたコメントは、本マガジン上で引用する場合があります。 (メールアドレスやお名前は一切公開いたしません) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ● 感想・質問宛先 http://bbs9.otd.co.jp/dos/bbs_tree tetrahedrane@yahoo.co.jp ● 広告募集 当メルマガへの広告掲載をご希望の方は、下記アドレスまでお願いします。 tetrahedrane@yahoo.co.jp ● メルマガ交換広告募集 当メルマガとのメルマガ交換広告をご希望の方は、下記アドレスまでどうぞ。 tetrahedrane@yahoo.co.jp ● 登録・解除・バックナンバー http://www.geocities.co.jp/Bookend-Hemingway/4963/column/dos/ このメールマガジンは、『まぐまぐ』を利用して発行しています。 http://www.mag2.com/m/0000106066.htm (c) 2004 Chisato Hayahoshi