質問

私は指示を読んでいます

imul 0xffffffd4(%ebp, %ebx, 4), %eax

そして、私はそれが正確にしていることに困惑しています。 Imulは増殖することを理解していますが、構文を理解することはできません。

役に立ちましたか?

解決

AT&Tアセンブリベース/インデックス構文のためのHooray!それは3オペランドの増加ではありません。それはあなたが知っている、そして愛するのと同じ2オペランドです、それはまず最初のものが少し複雑であるということです。その意味は:

%ebp + (4 * %ebx) + 0xffffffd4

または:

%ebp + (4 * %ebx) - 44

少し明確にする(およびベース10で)。 AT&Tベース/インデックス構文は次のように分解します。

offset(base, index, multiplier)

他のヒント

(私はIntel/MASMの構文を知っていて好むので、それを使用します。オペランドの順序はAT&Tとは異なることに注意してください。)

あなたの指示は実際には2オペランドです imul, 、Intelの構文では次のとおりです。

imul eax, DWORD PTR [ebp + ebx*4 + 0FFFFFFD4h]

どこ eax 宛先オペランドであり、メモリの位置はソースオペランドです。 2オペランド imul ソースおよび宛先オペランドの署名付き(2つの補完)増殖を実行し、結果を宛先に保存します。

この命令は、レジスタに整数のアレイに掛けられています。ほとんどの場合、これはループに表示され、配列はローカル変数です。


3オペランド imul 指示は次のとおりです。

imul dest, source1, source2

source1 オペランド(メモリの場所またはレジスタ)には、 source2 オペランド(8ビットまたは16/32ビット整数のいずれか)と結果は、 dest オペランド(16、32、または64ビットレジスタ)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top