2011-04-01 17 views
1

これは初めてのものです。アセンブリーでの算術演算の登録

私はPCアセンブリ言語を読み終えました。私はAssemblyでRC4暗号化の実装に取り​​掛かっていました。

mov eax, [edx+ecx] 

作品が、

mov eax, [edx-ecx] 

がない理由私が理解することができないことです。インラインアセンブラは私に

それは何を意味し、このエラーメッセージ、「第二のオペランド」で

非定数式を与えますか?前もって感謝します。

答えて

3

次に、x86アドレッシングモードの概要を示します。 「レジスタマイナスレジスタ」の形式はありません。Wikipediaです。

回避策として、ecxの内容を無効にしてから、[edx+ecx]を使用してください(後で元の値が必要な場合は、元に戻す必要があります)。

+0

またはmov eax、edx;サブeax、ecx、mov eax、[eax]。これにより余分な否定が省けます –

0

あなたはそのようなオフセットで減算することはできません。その目的は、メモリバッファの底を指すようにしてから、にオフセットをに追加することです。減算のオペコードあり

4

...指定されたメモリ・バッファのあなたを引っ張っにつながる:

mov eax, [edx+ecx] 

をしてから組み立てることができるオペコードがあります:

mov eax, [edx-CONSTANT] 

は、アセンブラは通常のオペコードを使用しますが、アセンブリ時に定数を否定するためです:

mov eax, [edx+(-CONSTANT)] 

しかし、オペコードはありません。

したがって、基本的に存在しない命令を実行しようとしています。