1
addInt:
        clc
        mov ax, cx
        add ax, bx
            JNC convert

合計が 16 ビットの範囲内にあるかどうかをテストする方法16 ビット レジスタを使用しているため、オーバーフローすることはありません。このコードを続行して変換ループにジャンプするにはどうすればよいですか。たとえば、私が を持っているFFFF + FFFE場合、合計は になります1FFFDが、eax レジスターは のみを表示FFFDします。

4

1 に答える 1

2

add結果の値が 16 ビットより大きいかどうかは、命令の後でわかるはずです。

ADD 命令は、整数の加算を実行します。符号付き整数オペランドと符号なし整数オペランドの両方の結果を評価し、OF フラグと CF フラグを設定して、それぞれ符号付きまたは符号なしの結果の桁上げ (オーバーフロー) を示します。SF フラグは、署名された結果の符号を示します。

符号なしの 16 ビット値を扱っているように見えるCFため、加算後のキャリー フラグを確認する必要があります。

addInt:
    clc
    mov ax, cx
    add ax, bx                ; Sets CF if result is larger than 16-bits
    jc .larger_than_16_bits
于 2013-05-20T04:56:51.273 に答える