今日、MASM の SEG 演算子はデフォルトで問題の式の SEGMENT のアドレスではなく GROUP のアドレスを返し、それをオーバーライドするオプションとメソッドがあることを知りました。
私は現在、Open Watcom 1.9 / 16 ビット DOS で C とアセンブリ (インラインおよびスタンドアロン) が混在する複雑なプロジェクトを行っているため (実際には、DOS は起動時にのみ必要であり、その後は自分の MINI-OS が制御します)。 WASM はある程度 MASM と互換性があることを知っていますが、次の質問があります。
インライン アセンブリを実行して変数のセグメントを取得する場合、SEG 演算子は変数が含まれる GROUP または SEGMENT を返しますか?
MY_GROUP という名前の GROUP、MY_GROUP に属する MY_SEG という名前の SEGMENT、および MY_SEG に配置される MY_VAR という名前の変数/ラベルがあるとします。
その後、私が行う場合
_asm {
MOV AX, SEG MY_VAR
}
どの値が AX にロードされますか? MY_GROUP のアドレスですか、それとも MY_SEG のアドレスですか (それらが異なる場合)。
インラインアセンブリの問題に関連するコマンド ライン スイッチは見つかりませんでした。次に、MASM 構文を試しました。
_asm {
MOV AX, SEG MY_GROUP:MY_VAR
MOV AX, SEG MY_SEG:MY_VAR
}
上記の両方の行により、「セグメントまたはグループ ラベルのみが許可されています」というエラーが発生します。
私の問題はインライン アセンブリにのみ関連することに注意してください。実際、私はスタンドアロン アセンブリ モジュールに JWASM を使用しています。上記の構文はうまく機能し、期待どおりの結果が得られます。
この状況でインラインアセンブラが何をするのか、また、それぞれの動作を制御する方法があれば誰か教えてもらえますか?
どうもありがとうございました!