Assembly 解释在汇编语言中,标志如何在条件跳转中工作
我是汇编语言新手,我正在阅读Ytha Yu,Charles Marut编写的汇编语言编程 无论如何,我在Assembly 解释在汇编语言中,标志如何在条件跳转中工作,assembly,x86,conditional-statements,eflags,Assembly,X86,Conditional Statements,Eflags,我是汇编语言新手,我正在阅读Ytha Yu,Charles Marut编写的汇编语言编程 无论如何,我在第6章中,我不知道处理器用于执行条件跳转的标志的情况。我知道这些标志的基本功能,例如,我知道如果在最后一条指令中发生或没有溢出,溢出标志将设置或重置。但我不知道他们是如何在跳跃的条件下发挥作用的 如果有人能帮助我理解如何使用标志寄存器来实现条件跳转,那将非常有帮助 总体思路是:有一些操作可以设置或清除单个标志——算术、位、比较。然后,您可以根据这些操作的结果自由执行条件跳转 如果一个变量大
第6章中,我不知道处理器用于执行条件跳转的标志的情况。我知道这些标志的基本功能,例如,我知道如果在最后一条指令中发生或没有溢出,溢出标志将设置或重置。但我不知道他们是如何在跳跃的条件下发挥作用的
如果有人能帮助我理解如何使用标志寄存器来实现条件跳转,那将非常有帮助
总体思路是:有一些操作可以设置或清除单个标志——算术、位、比较。然后,您可以根据这些操作的结果自由执行条件跳转
如果一个变量大于另一个变量,让我们考虑最基本的情况跳跃。假设变量位于通用寄存器中,且代码为32位,则如下所示:
cmp eax, ebx
ja AOverB
现在,这有什么用?CMP行计算值EAX-EBX
,不将其存储在任何位置,而是设置标志。具体而言,如果减法结果为零(即EAX-EBX=0
,即EAX=EBX
),则设置零标志,如果不是,则清除零标志。如果eax设置进位标志,如果设置/未设置相应标志,则跳转。否则,请继续。@qwr我想知道这些标志为什么起作用,例如,我知道JNE
需要ZF0
,因为CMP AX,如果AX
和BX
相等,BX
将为零。其他的呢?@klaus对于每个标志,条件都列在右边的列中。如果你想了解为什么旗帜在给定的情况下是这样设置的,我建议你在纸上尝试一些例子。的可能副本也有一个有用的答案,但这个问题是一个令人困惑的误解。