Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 比较两个值时的状态标志_Assembly - Fatal编程技术网

Assembly 比较两个值时的状态标志

Assembly 比较两个值时的状态标志,assembly,Assembly,谈到状态标志,我感到非常困惑。有人能帮我举个例子,并说明我需要采取哪些步骤来验证标志的行为吗 莫夫啊,21岁 mov al,-21 啊,艾尔 有人能帮我确定CF、ZF、SF和的行为吗 谢谢您可以在gdb之类的调试器中查看eflags寄存器。有大量易于访问的文档,但寄存器中的位基本上是0或1,这取决于是否设置了特定的状态标志 如果仅在调试器中查看值是不够的,并且需要对其进行处理: 您可以将eflags推送到堆栈上pushfl为我工作,然后将堆栈弹出到通用寄存器 如果分别设置了进位、零、溢出或符号标

谈到状态标志,我感到非常困惑。有人能帮我举个例子,并说明我需要采取哪些步骤来验证标志的行为吗

莫夫啊,21岁 mov al,-21 啊,艾尔

有人能帮我确定CF、ZF、SF和的行为吗

谢谢

您可以在gdb之类的调试器中查看eflags寄存器。有大量易于访问的文档,但寄存器中的位基本上是0或1,这取决于是否设置了特定的状态标志

如果仅在调试器中查看值是不够的,并且需要对其进行处理:

您可以将eflags推送到堆栈上pushfl为我工作,然后将堆栈弹出到通用寄存器

如果分别设置了进位、零、溢出或符号标志,则可以使用jc、jz、jo和js指令跳转到指定的标签

例如:

    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上也是相同的,除了这里从第一个操作数中减去第二个操作数。除了它的操作数不受影响,只有标志寄存器。