设置和清除标志

时间:2017-02-28 22:44:24

标签: assembly x86

我在尝试设置零标志时遇到了麻烦。我在网上做了一些研究,但它让我更加困惑。如果我错了,请纠正我,但我的理解是你可以使用MOV,ADD,SUB,INC和DEC并设置和清除标志?这样的工作会是什么......?

.data
Num1 = 18
Num2 = 18

.code
main PROC
    sub    num2, num1
main ENDP
END main

那会设置一个ZF吗?如果是这样,那么我该如何清除呢?

2 个答案:

答案 0 :(得分:1)

由于拼写案例检查,此代码不会设置ZERO标志:
Num1!= num1Num2!= num2

除此之外,您还没有定义任何.data值,因为Num1 = 18Num2 = 18分别是常量分配,并且没有定义数据值。

因此,您基本上试图通过OpCode(CMP)将常量与常量进行比较,这是无效的,并且不会通过任何汇编语法检查。

答案 1 :(得分:1)

  

如果我错了,请纠正我但是我的理解是你可以使用MOV,ADD,SUB,INC和DEC并设置和清除标志?

addsubincdec确实会设置/清除包括ZF在内的多个标志。 另一方面,mov永远不会改变任何标志!

sub    num2, num1

这是一个非常不可能的指令。

sub指令的强制2个操作数不能同时为(仅数字)或两个变量(存储位置)。
在您的示例中,您可以从以下结果验证标志:

mov ax, Num2
sub ax, Num1

由于两个值都相同,此后将设置ZF。