进位标志可以包含哪些值,以及如何在x86汇编中检查其状态?

cod*_*ith 11 x86 assembly nasm

  1. 进位标志可以包含哪些值?它只是0x00和0x01(布尔值)还是像其他CPU寄存器一样是16(或32/64)位?

  2. 我如何检查其状态?难道我只是用它喜欢像一个正常的CPU寄存器cmp cf, 0x00然后jg <jump destination>

  3. 我正在写一个迷你操作系统.将它用于我自己的目的是好的做法,还是应该为CPU的独占写权限保留,我所做的一切都是从它读取的?

pax*_*blo 10

它是一个标志,它只能保持真或假(技术上是1或0,但实际上是真值如图所示).

在使用它方面,不,你不要将它与某些东西进行比较然后再使用jg.它与其他标志处于相同的抽象级别,因此您可以使用:

jc somewhere         ; jump if carry flag is set
jnc somewhere_else   ; jump if carry flag is not set
Run Code Online (Sandbox Code Playgroud)

它由某些指令自动设置,例如,要添加两个值并检测进位,您可以使用以下内容:

add ax,bx
jc  too_big
Run Code Online (Sandbox Code Playgroud)

而且,虽然它主要由这些指令设置,但您也可以使用stc(set),clc(clear)和cmc(补码)手动完成.例如,如果您正在进入一个将值转移到下一次迭代的循环,那么事先清除它通常很有用.