1

と にそれぞれ 2 つの 32 ビット符号付き整数がEAXありEBXます。私が行った場合:

xor EDX, EDX
idiv EBX

次に、EAX符号なし 32 ビットとして扱われますが、それは誤りです。からにMOVSXシングル ビットを拡張できないようです。と も試してみましたが、解決策を見つけることができませんでした。EAXEDX:EAXCMPSBC

それを行うための最短のコード、または少なくともジャンプを回避するコードを知りたいです。

4

2 に答える 2

5

変換されません。idivは符号付き除算であり、 の 64 ビット値をedx:eaxのオペランドで除算し、剰余をに、商をidivに置きます。これより速い方法は考えられません。どうにかして変換されると本当に思っている場合は、その命令を試してください。次のことを行います。edxeaxCDQ

EAX を EDX に符号拡張し、クワッドワード EDX:EAX を形成します。(I)DIV は入力として EDX:EAX を使用するため、(I)DIV の前に EDX が (64/32 除算のように) 手動で初期化されていない場合は、EAX を設定した後に CDQ を呼び出す必要があります。

于 2013-09-15T10:06:07.890 に答える