dポイントプレゼントキャンペーン実施中!

エディタMASM32を使用しています。
本に特定のメモリを指定して、即値を転送できると書いてありました。
→例 MOV [0200H], BYTE PTR FFH
しかし、この通り記述しても、コンパイルする過程で error A2001: immediate operand not allowed
となってエラーがでます。ちなみに上の[0200H]の部分をラベルに置き換えた場合はエラーは出ませんした。

質問
メモリの番地を直接指定して即値を転送することは不可能なのでしょうか?

A 回答 (4件)

#2です。

DOSアセンブラを引退して9年もたちあまり的確な指摘ができず申し訳ありませんン。

あとはメモリのセグメント指定はうまくいっているのでしょうか?

規則はもはや覚えていないのでが、
mov byte ptr DS:[200H],0ffh

などはどうでしょう。

ラベルだとセグメントが指定されていると思うので。
    • good
    • 0
この回答へのお礼

>>#2です。DOSアセンブラを引退して9年もたちあまり的確な指摘ができず申し訳ありませんン。
とんでもないです。回答にご協力頂いてるだけでも大変嬉しく思います。

DS:をつけることで、コンパイルに成功すると共に、また一つ勉強になりました。有難うございました。

お礼日時:2012/04/04 00:48

たぶんそれで正解です>#3. ラベルを使ったものと (再配置できないことを除いて) 同じコードが出ることを ml で確認しました.

    • good
    • 0
この回答へのお礼

たぶんそれで正解です>#3. ラベルを使ったものと (再配置できないことを除いて) 同じコードが出ることを ml で確認しました
>>わざわざご確認頂いて有難うございました。おかげで僕も、コンパイルに成功しました。有難うございました。

お礼日時:2012/04/04 00:50

#1さんに加えて、「FFH」だとラベルになります。

即値ですと「0FFH」「0ffh」などと書くはずです。

この回答への補足

回答有難うございます。
>>「FFH」だとラベルになります。即値ですと「0FFH」「0ffh」などと書くはずです。

おっしゃる通りでしです。これは、質問の例の書き方のミスです。実際のプログラムは0FFhと記述しています。申し訳ありません。しかしながら。それでも尚且つエラーが出ます。

ちなみにimmediate operand not allowed のエラーとは即値を入れることのできない、ディスティネーションオペラントが設定されたという意味だそうです。
参照URL→ http://msdn.microsoft.com/ja-jp/library/6kzwh998 …

つまり、質問の例をとると「[0200h]番地のメモリーには即値は入れることができないですよ」の意味であると私なりに解釈しています。しかし、この解釈が仮に正しかったとしても実際のメモリー←即値の入れ方は今だ不明です。

補足日時:2012/04/02 18:02
    • good
    • 0

BYTE PTR ってここに書いていいんだっけ?

この回答への補足

回答有難うございます。BYTE PTRの書き方は2種類ありまして、ディスティネーションオペラントの前に書くものとソースオペラントの前に書くものがあります。質問の例をとると、[0200h]の前に書くタイプと0FFhの前に書くタイプです。それぞれの書き方は使用しているコンパイラによって使い分けます。
→参照UPR http://www5c.biglobe.ne.jp/~ecb/assembler/assemb …
私の使用しているコンパイラはソースオペラントの前に、BYTE PTRをつけるタイプのものですですのでMov ラベル,即値の形でコンパイルできます。よって、BYTE PTRの書き方が原因ではないようです。申し訳ありません。

補足日時:2012/04/02 17:42
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!