- 締切済み
MASMの擬似命令「ASSUME」について
こんにちは。 アセンブラのMASM でプログラムを作っているのですが、サンプルプログラムで、 「ASSUME CS:_TEXT」という表現があるのですが、これは一体どういう意味なのでしょうか? よろしくご回答のほどお願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- kaoaru0
- ベストアンサー率0% (0/0)
MASMのバージョンにより内部処理が異なるかもしれませんが、これは「CS(コードセグメント)に_TEXTという名前を使うよ!」と言っているだけで、これだけでは何も起きません。 プログラム中でCS(コードセグメント)を操作するようなことをすると、それを検出してワーニングとして教えてくれます。ただそれだけなんです。 他に何かしてくれるのか?っていったら何もしてくれないのです。今、これを気にしているくらいならそんなに大きいアプリケーションをアセンブラで作成したことがないのだと思うのですが、ソースリスト数 がたくさんあった場合に、アセンブルエラーの追跡に役立つということはあります。 そんなに気にする問題ではありません。それよりもたくさんプログラムを書いてスキルアップに励んでください。
- Takochu
- ベストアンサー率53% (82/154)
こんばんは。 私もちょっと忘れてしまい、参考書を見て復習しました。 セグメントについては、分かっていらっしゃいますよね。 ASSUME 文は、セグメントレジスタとセグメントとの対応を、 MASM に教えることにより、正しくアセンブルするための擬似命令です。 つまり、“ASSUME CS:_TEXT”の場合、 「CSレジスタは、_TEXTセグメントを指していますよ。」 と MASM に宣言しているのです。 (この文で実際に、セグメントレジスタに値が代入されるわけではありません。) この宣言がないと、MASM がアセンブルするとき、データラベル等の アドレスの計算が正しくできなくなります。 だから、実際にセグメントレジスタに値をセットする場合は、 その前に、この文を宣言する必要があります。
- barbieri
- ベストアンサー率24% (19/78)
こんばんは。 すっかり忘れてしまいましたが、こういう意味だったと思います。 コードセグメントは_TEXTですよ。とある種の宣言をします。 ご存じのように8086は8080系の資産を継承できるように64KBのセグメントの概念があります。 勿論、ESを別セグメントにASSUMEすることも可能です。 COMモデルの実行プログラムを作成するために、すべてのセグメントを同一にするのが一般的です。 セグメントの宣言をしておかないと最終的にEXE2BINでEXEモデルからCOMモデルに変換できません。