0

私はこのコードを持っています

addInt:
        add cx, bx
        cmp cx, 0FFFFh
        JBE convert

cxおよび bx レジスタを追加しようとしていますが、それぞれが を取得する代わりに の同じ値を持っていFFFFます。、したがって、このコードを修正して 1FFFE を含めるにはどうすればよいでしょうか。また、それがまだ 16 ビットかどうかを比較して確認するにはどうすればよいでしょうか。物事をより複雑にする32ビットレジスタは使用できません1FFFEFFFEJBEecxFFFE1FFFecx

少し早いですがお礼を

4

1 に答える 1

1
addInt:

    clc            ;clear carry flag

    add cx,bx

    jnc convert    ;jump no carry

    cmp cx,FFFEh   ;This now needs to be true, only FFFF+FFFF will succeed

                    because it generates a carry AND matches the cmp

    Jnz convert    ;will let it through

これは機能しますが、非常に限定的で単純化されています

キャリーを「カウント」するには、jnc convert の後に挿入された adc dx,0 を使用します

キャリー フラグは、レジスタがクロックを一周する場合に設定されるため、単一のビットのように機能します。

ADD FFFF+2 はそれをオフに設定し、レジスタに +ve キャリー フラグと 0001 を与えます。

adc [other register],0 を使用して、そのフラグ カウントを別のレジスタに格納できます。

キャリーフラグを使用すると、レジスタを一緒に叩いて、次のようにカウントアップできます

1,208,741,363,432,547,555,475,424 (4x16 ビットレジスタ付き)

これは、65,534 よりもはるかに優れています。

于 2013-05-20T01:56:46.717 に答える