12
  1. キャリーフラグはどのような値を保持できますか? 0x00 と 0x01 (ブール値) だけですか、それとも残りの CPU レジスタのように 16 (または 32/64) ビットですか?

  2. ステータスを確認するにはどうすればよいですか?cmp cf, 0x00当時のように通常のCPUレジスタのように使用するだけjg <jump destination>ですか?

  3. 私はミニOSを書いています。私自身の目的のためにそれを使用するのは良い習慣ですか、それともCPUの排他的な書き込み許可のために予約されるべきですか?

4

2 に答える 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 に答える