-1

次の 80X86 コード セグメントを考えてみましょう。コードが実行されるとき、ECX が非ゼロであると仮定します。

  L: MOV    AL, [ESI]
 XOR    [EDI], AL
 XOR    AL, [EDI]
 XOR    [EDI], AL
 MOV    [ESI], AL
 INC    ESI
 INC    EDI
 LOOP   L, ECX

ECX が最初は 4 で割り切れると仮定して、実行時の効率を高めるために上記のコード セグメントを書き直す必要があります。

それ、どうやったら出来るの?

4

1 に答える 1

4
L:
MOV    EAX, [ESI]
XOR    [EDI], EAX
XOR    EAX, [EDI]
XOR    [EDI], EAX
MOV    [ESI], EAX
ADD    ESI, 4
ADD    EDI, 4
SUB    ECX, 4
JZ     L

どのアセンブラを使っているか分からないので、一般的な例を書いてみました。

基本的に、上記のアルゴリズムは EAX レジスタ全体を使用して一度に 4 バイトを移動します。

于 2012-06-25T20:03:14.893 に答える