2.アセンブラ



MASM
データの型
マクロ命令
アドレッシング
ニモニック
デバッグ
総目次に戻る

MASM



Keywords:MASM,TASM,ソース・プログラム,アセンブリ言語,インクルード・ファイル,オブジェクト,リンク,ライブラリ,拡張子,コーディング,MAPファイル



MASM(Microsoft Macro Assembler.エムアセムと呼ばれることが多い)はマイクロソフト社製の8086系のマイクロプロセッサのための代表的なアセンブラです.現在のマイコン革命のきっかけを作った最初の本格的なマイクロプロセッサ8080AのためのマクロアセンブラMacro80(M80)以来の歴史があります.

もともとはインテル社のASM86というアセンブラを起源としています.パソコンのMS-DOSのもとでプログラムの開発を行うことが一般的になってから,インテル社のASM(アセンブラ)と互換性があるアセンブラとして作られ,ユーティリティとしてMS-DOSと合わせて販売されていました.

その後,8086から80386の命令まで仕様が拡張され,マクロ命令,コーディングを支援するなどの豊富な機能をもつようになり,MS-DOSとは別に販売されています.

現在,パソコン用のアセンブラというとこのMASMを指します.本章での説明は原則としてこのMASMを対象としていますが,ボーランド社の
TASMというアセンブラを利用している人も多いようです.

アセンブラを利用してプログラムを作るためには,アセンブリ言語でコーディングしたソース・プログラムをアセンブルしてオブジェクト・ファイルを作ります.ソース・ファイルはデフォルトで .ASMの拡張子をもっています.

このとき,デバッグなどのためにMAPファイルクロス・リファレンスを得る作業をします.アセンブルして得られたオブジェクトは,次にリンカで実行形式のファイルにしてプログラムの作成を完了します.しかし,普通はこの一度の処理だけでプログラムは完成せず,プログラムのバグをなくすためのデバッグ作業を行って,プログラム実行の状況を検証して終了します.



< copyright 1994 相沢一石 > 

トップに戻る


クロス・リファレンス

プログラム中で利用されている変数名やラベル名,サブルーチン名などの名前の一覧表に,それぞれが定義されている場所のアドレスおよびそれらが参照されている場所を示す表のことです.プログラムのデバッグや修正時に利用されます.

トップに戻るORMASM トップに戻る


拡張子(エクステント)

MS-DOSなどのパソコンのOSでは,ファイル名は最大8バイトのファイル名本体と3バイトの拡張子(またはエクステントと呼ばれる)により構成されています.

この拡張子によって
COMEXEは実行可能なプログラム・ファイルに,またASMはアセンブラのソース・プログラム・ファイルといったようにファイルの種別が区分されます.

トップに戻るORMASM トップに戻る


COM型式

8086CPUにおいて,コード,データ,スタックの各セグメントが同一の物理セグメントに配置されたコンパクトなプログラムをCOM型といいます.プログラムを実行するためメモリにプログラムが展開されるときに,DOSによってリロケータブルな変数にするというアドレス変換の必要がありません.したがって,デバイス・ドライバや高級言語からアセンブラのサブルーチンを記述する型式として利用されています.

トップに戻るORMASM トップに戻る


EXE型式

MS-DOSの一般的な実行型式のプログラム・ファイル型式です.データ,コード,スタックの各セグメントが独立に設定でき,8086系プログラムの本来のプログラム型式です.

トップに戻るORMASM トップに戻る


TASM

ボーランド社の8086系CPUのためのアセンブラをTASMといいます.MASMと違って,各種のメモリ・モデルの設定はTASMが行うコンパイラ感覚で利用することができる独自のモードをもっています.なお,MASMとの互換モードももっています.TASMは,ボーランド社のTurbo Pascal,C++などの製品に付属しています.

トップに戻るORMASM トップに戻る


ソース・プログラム

プログラミング言語の文法に沿って記述されたものをソース・プログラムといいます.アセンブラが処理の対象とするのは
アセンブリ言語で書かれたソース・プログラムです.

一般にソース・プログラムは1本だけでなく,別ファイルとしておくこともあり,それをインクルード・ファイルとして読み込む方法があります.

トップに戻るORMASM トップに戻る


オブジェクト

MASMでいうオブジェクトは,ソース・プログラムをアセンブルして得られるプログラム・ファイルです.デフォルトで .OBJの拡張子をもちます.このオブジェクト・ファイルをリンカのLINKなどでリンクして実行可能なEXEファイルを作成します.

トップに戻るORMASM トップに戻る


デフォルト

プログラムあるいはシステムの処理の条件をオペレータやプログラマなどに要求されている場合,それらの要求に応えない場合に暗黙の処理の条件または選択肢のことをデフォルトといいます.常に,プログラミングの中でデフォルト値がどのようなものか検討しておく必要があります.

微笑んで応えてくれない場合どうなるのでしょうか,ときには思いがけない結果を招くことがあります.

トップに戻るORMASM トップに戻る


MAPファイル

リンカが各モジュールの結合を行って実行ファイルを作成したとき,各変数,ラベルのアドレスが決まります.これらのシンボルの一覧のファイルがMAPファイルで,MAPという拡張子をもちます.

MAPファイルは,リンク時にLINKというコマンドに /Mというオプションを指定することによって作成されます.

トップに戻るORMASM トップに戻る


ライブラリ

ある目的の機能を実現するためのプログラムを集めたファイルをライブラリといいます.コンパイラなどでは,入出力処理,ファイル処理などの通常必要な処理ルーチンは標準ライブラリとしてあらかじめ用意されています.MASMのシステムでプログラミングする場合は,自由に独自のライブラリを作ることができます.このライブラリの管理のためのライブラリ・マネージャLIBが用意されています.

トップに戻るORMASM トップに戻る


コーディング

ソース・プログラムを作成することをコーディングといいます.もとはプログラムを作ることを指していましたが,最近ではプログラム仕様書にしたがって,処理の内容をプログラムの命令に置き換える作業を示すことが多いようです.すなわち,プログラミングより単純な作業を意味します.

トップに戻るORMASM トップに戻る


アセンブリ言語

アセンブラで具体的なプログラムを記述するための言語をアセンブリ言語と呼びます.正確にいうとアセンブラでソース・プログラムを書くのではなく,アセンブリ言語を用いてアセンブラが処理するソース・プログラムを書くということになります.

トップに戻るORMASM トップに戻る


インクルード・ファイル

MASMは,ソース・プログラムの中でほかのソース・プログラムを読み込み,その読み込まれたソース・プログラムも合わせてアセンブルすることができます.このようにほかから読み込まれるソース・プログラムのことをインクルード・ファイルと呼びます.

マクロ命令を定義したソース・プログラムを
ライブラリとしてあらかじめ作成しておき,インクルード・ファイルとして処理するといったようなさまざまな使い方ができます.

トップに戻るORMASM トップに戻る


リンカ

MASMでアセンブルされたオブジェクトを,実行型式のオブジェクトにする処理をリンクまたはリンケージと呼びます.MASMのシステムではLINKというプログラムが使用されます.リンカは複数のオブジェクト・モジュールからなるライブラリから必要なオブジェクトを選択して結合し,実行型式のファイルを作る機能が本来の機能です.

LINKが行うリンク処理はプログラム作成時に行う処理ですが,最近はWindows,OS/2などのように,実行時に必要なオブジェクト・モジュールの結合を行うシステムもあります

トップに戻るORMASM トップに戻る












データの型




Keywords:MASM,整数,実数,配列,文字列,レコード,浮動小数点,2進化10進データ,BYTE,DB,ダブル・ワード・データ,BCD



プログラムはアルゴリズム+データ,そしてそのデータの構造がキーです.MASMで扱えるデータは整数,実数,
BYTE(バイト・データ),WORD(ワード・データ),DOUBLEWORD(ダブル・ワード・データ)などのデータ,配列文字列,レコードなどの複合データ型,浮動小数点データ,2進化10進データなどの数値データと多様なデータが取り扱えます.

これらのデータは通常は変数または定数としてシンボル化して取り扱います.そのためにMASMでは各シンボルの型についてのチェックは厳しく行われます.旧世代のアセンブラでは,型についての管理はプログラマにまかされていました.

ソフトウェア・エンジニアリングの成果として,誤りの少ないプログラムを作るためにはデータの型に関しても明確に区別,管理が必要なことが提唱されました.

したがって,MASMでも型を間違えているとアセンブル時にアセンブラに叱られることが多くなりました.

その分,実行時においてデータの取り扱いの勘違いによるバグに悩まされることが少なくなりました.

また,MASM 6.0からは,符号付きの整数SBYTE,SWORD,SDWORDがサポートされるようになりました.

アセンブラのシステムもバージョンアップを重ねるにつれて機能がアップしています.
< copyright 1994 相沢一石 > 


トップに戻る


ダブル・ワード・データ

二つのワード・データで構成されるデータの型をダブル・ワード・データといいます.これは,連続した4バイトとはなりません.セグメントとオフセットの二つのワード・データを必要とするセグメント間の参照や分岐命令などで利用されます.0から4,294,967,295の整数データとしての取り扱いも行われます.

トップに戻るORデータの型 トップに戻る


文字列

文字列は,バイト・データが一かたまりとなった配列とみなすことができます.パソコンのシステムでは文字列の終端コードを示す方法や文字列の長さを示す方法などを採用することによって,可変長の文字列が利用されます.それに対し,汎用コンピュータの場合,多くは文字列を固定長のデータとして取り扱うため,ダウン・ロード/アップ・ロードのときには注意が必要です.

終端コードとしてはNULLと $ がよく使われます.

トップに戻るORデータの型 トップに戻る


数値データ

パソコンでは数値データとして整数,整数定数,整数変数,符号付き整数,浮動小数点データのほかに2進化10進データなどが処理の対象になります.そのほかに汎用コンピュータで一般的に利用されているパック形式のデータがありますが,データの配置および符号の付け方が異なっていて直接処理できません.そのため,個別に変換の処理プログラムを作る必要があります.ダウン・サイジングの時代になって,汎用システムとの間でのデータ変換が重要な問題となっています.

トップに戻るORデータの型 トップに戻る


バイト・データ,ワード・データ

型の名BYTEで定義される1バイト(8ビット)の大きさをもつものをバイト・データといいます.また,WORDで定義される1ワード(16ビット)の大きさをもつものをワード・データといいます.MASM 6.0以前では,BYTEは型名の指定としてDBのディレクティブでデータの定義を行っており,BYTE,DBは異なったディレクティブとして機能していました.MASMではこの区別がなくなり,DBの代わりにBYTEのディレクティブでバイト・データの定義も行えるようになりました.

トップに戻るORデータの型 トップに戻る


配列

MASMのアセンブリ言語でいう配列とは,固定長の変数が連続して存在するものを指しています.配列の要素はさまざまな整数となり,任意の要素にアクセスすることができます.これらの配列の要素へのアクセスには,間接アドレッシングの各種モードが用意されています.

トップに戻るORデータの型 トップに戻る


2進化10進データ

10進数を2進数で表現するデータ形式で,BCD(Binary Code Decimal)とも呼び,丸めの誤差が生じないで大きな数値の計算が可能な数値データです.8086系の数値演算用のコプロセッサX87シリーズもBCDデータの処理ができます.

BCDデータは,4ビットで0から9までのデータを表します.したがって,9+1で10になるとき,桁の繰り上げの処理が必要になります.そのために,アスキ補正命令と演算後の補正を行う命令が用意されています.BCDにはパックBCD,アンパックBCDがあります.

トップに戻るORデータの型 トップに戻る










マクロ命令




Keywords:マクロ定義,マクロトレーラ,マクロ展開,シンボル



ある目的の機能を実現するために,アセンブラの複数の命令群や文字列の代わりに,ソース・プログラムの中でプログラマによって新たに定義された命令をマクロ命令といいます.

この
マクロ定義をソース・プログラムの中に記述すると,アセンブラは,マクロ命令の定義部で定義された命令群や文字列に置き換えます.これをマクロ展開といいます.

アセンブラはマクロ命令から置き換えられた命令群や文字列をソース・プログラムとしてアセンブルします.

このマクロ命令を使用することにより,

1 新たな機能をもった命令を利用できる
2 コーディング量を削減できる
3 プログラム機能のモジュール化,ライブラリによる汎用化を図ることができる
4 コーディングのミスを減少させることができる

などの効果が期待されます.

このマクロ命令が利用できるアセンブラのことをマクロアセンブラと呼びます.MS-DOSシステムではMASMが代表的なマクロアセンブラです.
< copyright 1994 相沢一石 > 

トップに戻る


マクロ定義

マクロ定義とは,マクロ命令をソース・プログラムの中で定義することで,ここで定義されたマクロ命令はソース・プログラムのコーディング時に新たな命令として利用できます.マクロ定義は,次のように「マクロ名 マクロヘッダ 仮引数」で構成される先頭行,次に続くマクロ本体,マクロ定義の終わりを示すマクロトレーラ部(ENDM)よりなります.

仮引数は,マクロ本体の一部を変更するためのパラメータとして利用されます.パラメータは変数,ラベルなどの
シンボルのほかにレジスタ名,命令のニモニックなども利用できます.具体的にはマクロ展開時にマクロ名の後の実引数に仮引数を置き換えて展開されます.

マクロ名はソース・プログラム中で使用される以前に定義されている必要があります.通常は,ソース・プログラムの先頭,またはマクロ定義だけのソース・プログラムをマクロライブラリ・ファイルとして作成し,アセンブルに先立って読み取って利用します.



トップに戻るORマクロ命令 トップに戻る


マクロ展開

ソース・プログラムの中のマクロ名がアセンブル時にアセンブラによって定義された命令群に展開されることをマクロ展開といいます.このとき,パラメータが付加されていると,マクロ命令の定義の中のパラメータに相当する部分の文字列は,具体的にパラメータとして設定された文字列と置き換わります.ローカル・シンボルの設定も行えるので,ラベルの処理でラベル名の付け方に苦労することも少なくなります.

トップに戻るORマクロ命令 トップに戻る


シンボル

アセンブラのソース・プログラムの中でメモリの位置,データの値を示すために利用される名前をシンボルといいます.シンボル定数,変数,ラベルなどがあります.命名法が決められていて,MASMではシンボルに日本語の表記が使えません.


◎シンボル名は,次に示す英字,数字,特殊キャラクタを使用できる.
A〜Z,a〜z,0〜9
? @ _$ : .[ ]( )<>{ }+ − * / & % ! '- | ¥ = # ^ ; , ' "
◎組み合わせるうえでの制約
  • 小文字と大文字は組み合わせて使用できるが,小文字はアセンブラによって大文字に変換される.
  • 数字は先頭キャラクタには使用できない.
  • 長さは自由であるが,認識されるのは先頭の31キャラクタのみ.
  • 次のキャラクタは名前の先頭でも途中でも使用できる.
    _(アンダーバー),?(疑問符),
    $(ドル記号),@(アットマー ク)
  • ピリオド( .)は名前の途中では使用できないが,先頭のキャラクタとし ては使用できる.
  • 命令およびディレクティブのニモニック,レジスタ名,演算子などアセンブ ラに対して特殊な意味をもつ定義済みの名前を予約名をといい,ユーザがシ ンボル名として使用することはできない.

トップに戻るORマクロ命令 トップに戻る










アドレッシング




Keywords:セグメント,コード,スタック,インデックス,ベース,オフセット,ディスプレイスメント,直接アドレッシング,間接アドレッシング



コンピュータはメモリやI/O装置を特定するためにすべてに番号が与えられたアドレスが用意されており,このアドレスによってアドレス空間が構成されます.そして,このアドレスを特定するための技法をアドレッシングと呼び,
直接アドレッシング間接アドレッシング,イミディエイト・アドレッシング,インデックス・アドレッシングなど多くの方法が用意されています.

このアドレッシングの方法は,使用するCPUのアーキテクチャに大きく影響されます.8086系のCPUの場合,20ビットのアドレス空間しかないという制限によりセグメントを利用したアドレッシングになっています.そのため,セグメント・アドレスとオフセットの二つの値によりアドレスの指定を行います.これをセグメント・アドレッシングと呼びます.
< copyright 1994 相沢一石 > 


トップに戻る


直接アドレッシング

対象とするレジスタやメモリのアドレスを直接命令のオペランドで指定するアドレスの指定方法です.オペランドで示されたレジスタやメモリの内容が命令の処理の対象になります.直接アドレッシングの場合,オペランドで示されるメモリまたはレジスタが処理の対象ですので,プログラムが何を対象としているのかがわかりやすいプログラムになります.しかし,処理の対象がコーディング時に決定してしまうため,実行時に状況に応じて処理対象を変えるような処理はできません.

トップに戻るORアドレッシング トップに戻る


間接アドレッシング

間接アドレッシングは,レジスタなどに実際に処理の対象となるメモリのアドレスを設定しておいて,そのレジスタを指示することで間接的に処理の対象を示すアドレッシングの方法です.この方法は,プログラムの実行時に処理の対象を変えることができるので,テーブルの検索,レコードの処理などのデータ処理に必須な機能です.

また,8086系CPUは
ベース・レジスタを使うベース・モード,インデックス・レジスタを使うインデックス・モード,ベース・インデックス・モードなど多様なモードのアドレッシングのモードをもっています.これらは,レジスタで示される値以外にディスプレイスメントによって修飾され多様な広がりをもっています.



アドレッシング方法 表記 操作 デフォルト時
のセグメント
ベース・インデックス
・アドレッシング
[BX][SI]
[BX][DI]
[BX]+[SI]+D8(OR D16)
[BX]+[DI]+D8(OR D16)
DS
[BP][SI] [BP]+[SI]+D8(OR D16) SS
[BP][DI] [BP]+[DI]+D8(OR D16)
インデックス
・アドレッシング
[SI]
[DI]
[SI]+D8(OR D16)
[DI]+D8(OR D16)
DS
ベース・アドレッシング [BX] [BX]+D8(OR D16)
[BP] [BP]+D8(OR D16) SS

トップに戻るORアドレッシング トップに戻る


セグメント

8086系CPUで利用されているメモリを指定する方法の一つにセグメントというものがあります.メモリ空間を,16ビットで64Kバイトの範囲を一つのセグメントとしてデータや命令コードを格納するエリアとして設定します.このセグメントの指定はセグメント・レジスタによって行います.また,セグメント内のアドレスはIP(インストラクション・ポインタ),インデックス,
オフセット・アドレスなどによるアドレス指定により定められます.

トップに戻るORアドレッシング トップに戻る


セグメント・アドレッシング

セグメント・レジスタで示される16ビットのアドレスを4ビット左にシフトして20ビットのセグメント・アドレスを作成し,このセグメントの開始アドレスに16ビットのオフセット・アドレスを加算して20ビットの物理アドレス(実効アドレス)が作られ,このアドレスが物理アドレスとして実際のメモリへのアクセスが行われます.各セグメントに対応した専用のセグメント・レジスタが用意されています.具体的には,
CSレジスタSSレジスタDSレジスタESレジスタです.

トップに戻るORアドレッシング トップに戻る


エクストラ・セグメント・レジスタ(ESレジスタ)

データ・セグメント以外にデータを扱うためにエクストラ・セグメントが用意されています.このエクストラ・セグメントの開始アドレスをセットするセグメント・レジスタのことです.

トップに戻るORアドレッシング トップに戻る


べース・レジスタ

BX,BPのレジスタのことをベース・レジスタといい,ベース・モードの間接アドレッシングでメモリ中のデータ構造の先頭をこのレジスタで示し,ディスプレイスメントでデータ構造中のデータをアクセスするときなどに利用されます.デフォルト時にはBXはデータ・セグメント,BPはスタック・セグメントのデータが対象となります.

トップに戻るORアドレッシング トップに戻る


インデックス・レジスタ

インデックス・レジスタは,文字列処理などで元データのアドレスをSI(ソース・インデックス・レジスタ)で指定し,相手先のデータのアドレスをDI(デスティネーション・インデックス・レジスタ)で示す機能が付加されています.このほかに,16ビット汎用レジスタとして演算,間接アドレッシングなどに利用されます.

トップに戻るORアドレッシング トップに戻る


ディスプレイスメント

実効アドレスに加算される定数値,8ビット,16ビットの値で正負の値をもち,実効アドレスの前後のメモリ・エリアを指定することができます.テーブル,配列,多次元配列の開始アドレスの指定などに利用されます.

トップに戻るORアドレッシング トップに戻る


オフセット

実際のメモリ上のデータは,セグメントの開始アドレスとそのセグメントの先頭からの距離を示すオフセットの値の二つで示されます.そして,このセグメント・アドレスとオフセットを加算して得られた物理アドレスでメモリ上のデータにアクセスします.このオフセットを示す方法として,直接アドレッシング,間接アドレッシングなどの多様なアドレス指定の方法が用意されています.

実際にアセンブラのプログラムを書くときには,
ラベルを使えるので,コーディングするプログラマは先頭からの距離を意識する必要はありません.

トップに戻るORアドレッシング トップに戻る


ラベル

MASMでは,ラベルはプログラムの分岐先や処理の入口などのコード・セグメント内の実行可能な命令の場所を示します.ラベルにはほかの異なったセグメントから参照されるFAR属性と同一のセグメント内から参照されるNEAR属性の二種類あります.FARでセグメントとオフセット,NEARではオフセットの値が参照の対照になります.

そのほかに,コンピュータに関連する用法としては,ディスクやテープのなどの媒体の名前を示すなど,識別するための「表示」または「名札」という意味もあります.

トップに戻るORアドレッシング トップに戻る


コード・セグメント・レジスタ(CSレジスタ)

命令コードを取り扱うコード・セグメントの開始アドレスを設定するレジスタです.このレジスタの取り扱いはジャンプ,コール命令など分岐命令によって変更されます.

トップに戻るORアドレッシング トップに戻る


スタック・セグメント・レジスタ(SSレジスタ)

スタック・セグメントの開始アドレスが設定されるレジスタです.スタックはこのスタック・セグメントでしか機能しません.スタック・セグメントは,コール命令の戻り番地を保存したり,サブルーチン処理時のレジスタの退避などに利用されます.このスタックの指定はSP(スタック・ポインタ)レジスタによって行われます.

トップに戻るORアドレッシング トップに戻る


データ・セグメント・レジスタ(DSレジスタ)

コンピュータで扱うデータというのは,このデータ・セグメント・レジスタによって示されるデータ・セグメント内に保存されており,逐次処理されます.データ・セグメントは最大64Kバイトのエリアなので,64Kバイト以上のデータを取り扱う場合は複数のデータ・セグメントを設定し,対象となるデータ・セグメントの開始アドレスを順次このデータ・セグメント・レジスタに設定して対象となるデータの処理を行います.

トップに戻るORアドレッシング トップに戻る










ニモニック




Keywords:機械語,ストリング命令,リピート・プリフィックス,カウンタ,ディレクティブ,ASSUME,SEGMENT,END,DB



コンピュータの機械語命令と一対一で対応しているアセンブラの命令をニモニックといいます.一般に,英単語の省略形で機能を類推できるか,またはプログラマが覚えやすいコードで表されます.アセンブラの命令表に載っている命令はニモニック・コードで示されています.

アセンブラの命令は命令部と一ないし二つのオペランドで構成されています.これらがまた1から数バイトの
機械語のコードに対応しています.

転送命令,演算命令,分岐命令のほか8086系のCPUではストリング命令という文字列処理専門の命令もあります.ソース・プログラムにはディレクティブも含まれていますが,これはCPUに対する命令ではありません.

初期のマイコンの技術者には,このニモニックと機械語の対応表を頭の中に入れて,アセンブラを使わずに機械語に変換するなどという非能率的なことに生きがいを感じている者もいました.
< copyright 1994 相沢一石 > 

トップに戻るORニモニック トップに戻る


機械語

0と1の2進数で表現されていて,コンピュータが理解できる言語を機械語(マシン語ともいう)といいます.ただし,機械語を表す際は人間にもわかりやすいように16進数で表現します.アセンブリ言語や高級言語を実行形式にした最終結果で,この機械語に変換されて初めてCPUはプログラムを読み取り解釈可能になります.

トップに戻るORニモニック トップに戻る


ストリング命令

リピート・プリフィックスのすぐ後ろに書いてストリングを操作します.ストリングは,一般的な文字列の定義だけでなく,バイト,ワード,386のダブル・ワードなどの単なるバイト列の意味でも使用します.ストリング操作としては転送,比較,検索などがあります.このときカウンタと共に使います.

トップに戻るORニモニック トップに戻る


カウンタ

ストリング命令,所定の回数命令を繰り返すREPプリフィックス命令で,繰り返す回数を指定するのにCXレジスタがカウンタとして利用されます.

トップに戻るORニモニック トップに戻る


リピート・プリフィックス

ストリング命令と組み合わせて使用します.CXレジスタを調べて0のときはループから抜け,ストリング命令を1回実行するとCXレジスタの値が−1されます.比較,検索のときは比較,検索結果によってループを抜け出す機能が付加された命令も利用できます.

トップに戻るORニモニック トップに戻る


ディレクティブ(疑似命令)

ソース・プログラムに記述しますがCPUが実行する命令ではなく,アセンブラに対する指令です.例えば,アセンブルの条件などをアセンブラに指示するもので,CPUに対する命令とは異なりオブジェクトには変換されません.セグメントの指定,変数の定義,手続きの定義などを分担します.
ASSUMESEGMENTEND,DBなどのディレクティブがその例です

トップに戻るORニモニック トップに戻る


ASSUME

ASSUMEでセグメント名を各セグメント・レジスタに対応付けます.この対応付けにより,ソース・プログラムの命令やデータはそれぞれ所定のセグメントに割り当てられます.

トップに戻るORニモニック トップに戻る


END

ソース・プログラムの終了を示すディレクティブです.ENDの後にラベル名のオプションを設定してプログラムの実行開始位置を指定することもできます.

トップに戻るORニモニック トップに戻る


SEGMENT

プログラム・リストの中で,SEGMENTからENDSまでの間がセグメントとして定義されます.SEGMENTに続くオプションを指定することで,セグメントの結合のための属性などを知らせる情報がアセンブラやリンカに伝えられます.各セグメントの指定は,このSEGMENT,ASSUMEなどのディレクティブを使用します.その他に,簡略化セグメントを用いてあらかじめ設定されたメモリ・モデルで各セグメントの用法を指定することもできます.

トップに戻るORニモニック トップに戻る










デバッグ




Keywords:デバッガ,トレース,シンボリック・デバッガ,逆アセンブル



プログラムには誤りがつきものです.プログラムの中のこの誤りの部分を虫(bug)と呼びます.この虫を駆逐して誤りのないプログラムにすることを虫取り(debug)と呼び,それに使われるツールが
デバッガです.この誤りの原因は,勘違い,うっかりミス,理解不足など多岐にわたります.そして,このバグ潰しに懸命の努力を行っていますが,皆無への道はまだまだ遠いようです.

ソフトウェア・エンジニアリングでは,この目的のためにいろいろな試みがなされています.
< copyright 1994 相沢一石 > 

トップに戻るORデバッグ トップに戻る


シンボリック・デバッガ

デバッグ時にラベル,変数名が使用できるデバッガをシンボリック・デバッガ(SYMDEB.EXE)といいます.

デバッグ時にソース・プログラム中でグローバル宣言をした変数やラベル名が利用できるため,実行途中の変数の確認,ブレーク・ポイントの設定などが容易に行えるほか,DEBUG.EXE機能が強化されているので,デバッグが効率よく行えます.

シンボルを利用するためにはシンボル・ファイルが必要となります.このシンボル・ファイルは .SYMの拡張子をもち .MAPファイルから作成されます.



トップに戻るORデバッグ トップに戻る


デバッガ

デバッガは,プログラム作成の支援をするためのユーティリティ・プログラムで,プログラムが意図通りの処理となっているかを確認するための機能が用意されています.特にMS-DOSに付属しているデバッガ(DEBUG.EXE)や
シンボリック・デバッガ(SYMDEB.EXE)は,アセンブラのプログラムのデバッグを対象としていますので,具体的な対象のCPUの機械語の命令を1ステップずつ実行し,その結果を確認する機能(トレース)も用意されています.

また,メモリ中のデータの変更,レジスタの内容の確認,変更,逆アセンブルなどが行えます.

トップに戻るORデバッグ トップに戻る


トレース

プログラムのバグのある範囲が絞られてくると,ブレーク・ポイントを設定してそれからあとの命令を1命令ずつ実行して確認します.この命令は,1命令を実行するごとに各レジスタの実行結果の値を表示して停止します.それぞれの実行結果を表示しながら指定した命令の数だけ実行し,一時停止したり
逆アセンブルしたりすることができます.

トップに戻るORデバッグ トップに戻る


逆アセンブル

メモリ中の命令コードをアセンブラのニモニックにもどすことを逆アセンブルするといいます.プログラム・トレース時などにメモリ中のプログラム・コードを命令のニモニックとして確認するために必要です.

トップに戻るORデバッグ トップに戻る