2016-05-04 9 views
2

下記のコードは、私が現在書いてみようとしているプログラムのほんの一部ですが、プログラムの他の部分は関連していないので、必要なものだけを貼り付けました。とにかく、私がやろうとしていることは、ループが何回実行されるべきかを決定するために、inputLoopCounter内に格納された値をecxに移動することです。しかし、私がこのプログラムをアセンブルしようとすると、質問のタイトルに記述されているエラーが出ます。誰でもこの理由を説明できますか?x86アセンブリ極端な初心者質問: "無効な命令オペランド"?

.data 
inputLoopCounter BYTE -1 

.code 
mov ecx,inputLoopCounter 
+0

x86エキスパートではありませんが、32ビット値が必要なレジスタに "BYTE"を配置することが問題なのでしょうか?代わりに、おそらく単に 'cl'をロードしてください。実際には、メモリからロードするときに角カッコ[]を使用する必要があります。まもなくここに来る本当のエキスパートに任せておこう:) –

+1

変数をバイトにしたいが、それでもdwordレジスタにロードしたい場合、 'movsx ecx、byte ptr [inputLoopCounter]'。 – Michael

+0

@Michaelそれがバイトであることが絶対必要でないなら、それを動作させるためにBYTEからDWORDに変更することは可能でしょうか?編集:ありがとう、ホセマヌエルアバカロドリゲス、あなたは私の質問に答えた。それは非常に素人間違いでした。 – Proto

答えて

3

一つの可能​​な解決策は、inputLoopCounter DWORD -1inputLoopCounter BYTE -1を置き換えることであろう。

0

MASMはシンボルについての情報を記憶しています。したがって、foo BYTE -1は、それからロードされる命令のオペランドサイズを意味します。

インテル構文アセンブリー言語(NASM)のもう1つのメリットは、がラベルであるかどうかにかかわらず、[inputLoopCounter]から4Bをロードする命令を楽しくアセンブルします。

NASMでは、いずれのオペランドからも暗黙のオペランドサイズがないため、mov [inputLoopCounter], 0は構文エラーです。 (MASMではmov byte ptr [inputLoopCounter], 0

関連する問題