我无法设置零标志。我在网上做了一些研究,但它已经让我更加困惑。纠正我,如果我错了,但我的理解是,您可以使用MOV,ADD,SUB,INC和DEC,并设置和清除标志?所以会这样的工作..?设置和清除标志
.data
Num1 = 18
Num2 = 18
.code
main PROC
sub num2, num1
main ENDP
END main
那样会设置一个ZF例如?如果是这样的话,我该如何清除它?
我无法设置零标志。我在网上做了一些研究,但它已经让我更加困惑。纠正我,如果我错了,但我的理解是,您可以使用MOV,ADD,SUB,INC和DEC,并设置和清除标志?所以会这样的工作..?设置和清除标志
.data
Num1 = 18
Num2 = 18
.code
main PROC
sub num2, num1
main ENDP
END main
那样会设置一个ZF例如?如果是这样的话,我该如何清除它?
此代码将不设置零标志,因为一个拼写检查情况的:!
Num1
= num1
和Num2
= num2
。
除此之外,您没有定义任何.data
值,因为Num1 = 18
和Num2 = 18
分别是常量赋值并且未定义数据值。
所以你基本上试图通过OpCode(CMP
)来比较常量和常量,这是无效的,并且不会通过任何汇编语法检查。
纠正我,如果我错了,但我的理解是,您可以使用MOV,ADD,SUB,INC和DEC并设置和清除标志?
这是真的,add
,sub
,inc
和dec
将设置/清除几个标志包括ZF。
mov
另一方面永远不会改变任何标志!
sub num2, num1
这是非常不可能的指令。
不允许sub
指令的强制性2个操作数既是立即数(只是数字),也是两个变量(存储单元)。
在您的例子,你可以从结果验证标志:
mov ax, Num2
sub ax, Num1
由于两个值是相同的,以下简称ZF将被设置。
做一个结果不为零的数学运算? –