0

私はアセンブリ言語に慣れていないので、次の質問をしたいと思います。

    mov ax, y
imul z; dx:ax = y*z
mov bx, dx
mov cx, ax ; bx:cx = y*z
mov ax, x
cwd ; dx:ax = x
sub ax, cx
sbb dx, bx ; dx:ax = x-y*z

最後のコード行を使用する必要があるのはなぜですか。私がやろうとしているのは、xy*z を計算することです...

前もって感謝します

4

1 に答える 1

2

私の 80386 アセンブリを思い出すと (そうです、それはとても長いことです)、最後の行は借用による減算です。これは、手で引き算をする場合と同じです。たとえば、24 から 16 を引く場合は、最初に 4 から 6 を引きます。しかし、それを行うには、10 の列から 1 を BORROW し、下位桁の 12-6=6 を取得します。上位の桁を計算するときは、借りたことを覚えて、それを考慮に入れる必要があります: 10-10 = 0 なので、答えは 6 です。

の場合sub ax,cx、借用が必要な場合は借用フラグが設定され、 の場合はsbb dx, bx、前の借用に合わせて調整されます。

于 2013-05-11T10:42:36.130 に答える