Assembly 比较两个值时的状态标志
谈到状态标志,我感到非常困惑。有人能帮我举个例子,并说明我需要采取哪些步骤来验证标志的行为吗 莫夫啊,21岁 mov al,-21 啊,艾尔 有人能帮我确定CF、ZF、SF和的行为吗 谢谢您可以在gdb之类的调试器中查看eflags寄存器。有大量易于访问的文档,但寄存器中的位基本上是0或1,这取决于是否设置了特定的状态标志 如果仅在调试器中查看值是不够的,并且需要对其进行处理: 您可以将eflags推送到堆栈上pushfl为我工作,然后将堆栈弹出到通用寄存器 如果分别设置了进位、零、溢出或符号标志,则可以使用jc、jz、jo和js指令跳转到指定的标签 例如:Assembly 比较两个值时的状态标志,assembly,Assembly,谈到状态标志,我感到非常困惑。有人能帮我举个例子,并说明我需要采取哪些步骤来验证标志的行为吗 莫夫啊,21岁 mov al,-21 啊,艾尔 有人能帮我确定CF、ZF、SF和的行为吗 谢谢您可以在gdb之类的调试器中查看eflags寄存器。有大量易于访问的文档,但寄存器中的位基本上是0或1,这取决于是否设置了特定的状态标志 如果仅在调试器中查看值是不够的,并且需要对其进行处理: 您可以将eflags推送到堆栈上pushfl为我工作,然后将堆栈弹出到通用寄存器 如果分别设置了进位、零、溢出或符号标
clc # clear carry flag (set CF = 0)
addl eax, 0xffffffff # some operation that might change status flags
jc label1 # if the carry flag is set, jump to label
... # instructions to execute if carry not set (CF = 0)
jmp label2
label1:
... # instructions to execute if carry set (CF = 0)
label2:
... # resume execution which does not depend on CF
有一个app-erm-manual用于此。另请参阅。对于68k,N=SF和V=OF的4个标志的逻辑在x86上也是相同的,除了这里从第一个操作数中减去第二个操作数。除了它的操作数不受影响,只有标志寄存器。