質問
ax = fffeおよびbx = 1234と仮定します
今、私たちが書くなら cmp ax,bx
(BXはAXから差し引かれ、AppRute Flagesが更新されます)AXおよびBXの数字のバイナリ表現はによって与えられます
AX = 1111 1111 1111 1110
BX= 0001 0010 0011 0100
bxがaxから差し引かれるため、bx(result = ax+( - bx)として否定する必要があるため、否定されたBx(2のBXの補体)が与えられます。
BX= 1110 1101 1100 1100
次に、AXとBXの両方を追加します(減算はコンピューターに追加することで実装されています)
AX= 1111 1111 1111 1110
BX= 1110 1101 1100 1100
------------------------------------
1 1110 1101 1100 1010
結果がわかるように、結果は17ビットです。17ビットはキャリーフレージに入る必要がありますが、キャリーフラグは0です。
解決
ここにリンクを見つけました:http://oopweb.com/assembly/documents/artofassembly/volume/chapter_6/ch06-2.html
予想通りです。キャリーフラグは、「借り」が必要な場合にのみ設定されます。減算を行うときは、「減算」を行う前にキャリーフラグを設定し、新しいキャリーフラグは借りなければならないかどうかを示します。あなたの例は、ビット17のプレセットキャリーフラグに1の追加を省略しました。
他のヒント
キャリーフラグを、減算が実行されたときに、ビットを借りると考えてください。操作は1に初期化されます a−b−C
, 、つまり、 a + not(b) + C
それ以外の a + not(b) + 1
あなたが説明したように。言い換えれば、キャリーは減算のために反転しているため、複数の精度の減算を行うために使用できます。
所属していません StackOverflow