3

原則として、レジスタの値を2乗することは難しくありません。

mov ax, [var]
mov cx, [var]
mul cx         // square of answer is in DX:AX

しかし、私は考え始めました-私が賞の効率のためにアセンブリを非常に高く学んでいるコース。1行少ない差でも最大5ポイントの価値があります。

これはマイクロ最適化だと思いますが、次のコードは同じように実行されますか?:

mov ax, [var]
mul ax          // is answer still in DX:AX ?

私の質問を表現するもっと簡単な方法だと思います:AX(またはAL / AH)は8086アセンブリのmulandコマンドの有効なパラメータですか?imul

4

2 に答える 2

3

はい、にmul ax入れax*axますdx:ax

于 2010-07-18T20:13:01.750 に答える
1

mul ax を使用すると、DX:AX = AX * AX が実行されますが、この場合、AX で持っていた値が失われることに注意してください。この値を再度使用する必要がある場合は、mul bx オプションを使用することをお勧めします。 BXは無傷のままだからです。

また、mul al または (mul ah) を使用する場合、AX=AX AX は実行せず、AX=AL AL (または AX=AL*AH) を実行するため、AX の値が 255 より大きい場合、乗算は実行されません。 AX は、値の上位部分を完全に無視して上書きするためです (AH を無視します)。

于 2010-08-04T11:57:33.777 に答える