キャリーフラグはどのような値を保持できますか? 0x00 と 0x01 (ブール値) だけですか、それとも残りの CPU レジスタのように 16 (または 32/64) ビットですか?
ステータスを確認するにはどうすればよいですか?
cmp cf, 0x00
当時のように通常のCPUレジスタのように使用するだけjg <jump destination>
ですか?私はミニOSを書いています。私自身の目的のためにそれを使用するのは良い習慣ですか、それともCPUの排他的な書き込み許可のために予約されるべきですか?
19486 次
2 に答える
13
これはフラグであり、true または false のみを保持できます (技術的には 1 または 0 ですが、実際には示されているように真の値です)。
それを使用するという点では、いいえ、それを何かと比較してから使用することはありませんjg
。他のフラグと同じレベルの抽象化であるため、次のものを使用できます。
jc somewhere ; jump if carry flag is set
jnc somewhere_else ; jump if carry flag is not set
特定の命令によって自動的に設定されるため、たとえば、2 つの値を加算してキャリーを検出するには、次のようなものを使用できます。
add ax,bx
jc too_big
また、ほとんどはこれらの指示で設定されますが、stc
(set)、clc
(clear)、cmc
(complement) を使用して手動で設定することもできます。たとえば、値が次の反復に繰り越されるループに入る場合は、事前にクリアしておくと便利なことがよくあります。
于 2013-01-29T02:34:17.367 に答える