2017-02-28 122 views
2

我无法设置零标志。我在网上做了一些研究,但它已经让我更加困惑。纠正我,如果我错了,但我的理解是,您可以使用MOV,ADD,SUB,INC和DEC,并设置和清除标志?所以会这样的工作..?设置和清除标志

.data 
Num1 = 18 
Num2 = 18 

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

那样会设置一个ZF例如?如果是这样的话,我该如何清除它?

+1

做一个结果不为零的数学运算? –

回答

1

此代码将不设置零标志,因为一个拼写检查情况的:!
Num1 = num1Num2 = num2

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

所以你基本上试图通过OpCode(CMP)来比较常量和常量,这是无效的,并且不会通过任何汇编语法检查。

1

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

这是真的,addsubincdec将设置/清除几个标志包括ZF。
mov另一方面永远不会改变任何标志!

sub num2, num1 

这是非常不可能的指令。

不允许sub指令的强制性2个操作数既是立即数(只是数字),也是两个变量(存储单元)。
在您的例子,你可以从结果验证标志:

mov ax, Num2 
sub ax, Num1 

由于两个值是相同的,以下简称ZF将被设置。