我在尝试设置零标志时遇到了麻烦。我在网上做了一些研究,但它让我更加困惑。如果我错了,请纠正我,但我的理解是你可以使用MOV,ADD,SUB,INC和DEC并设置和清除标志?这样的工作会是什么......?
.data
Num1 = 18
Num2 = 18
.code
main PROC
sub num2, num1
main ENDP
END main
那会设置一个ZF吗?如果是这样,那么我该如何清除呢?
答案 0 :(得分:1)
由于拼写案例检查,此代码不会设置ZERO标志:
Num1
!= num1
和Num2
!= num2
。
除此之外,您还没有定义任何.data
值,因为Num1 = 18
和Num2 = 18
分别是常量分配,并且没有定义数据值。
因此,您基本上试图通过OpCode(CMP
)将常量与常量进行比较,这是无效的,并且不会通过任何汇编语法检查。
答案 1 :(得分:1)
如果我错了,请纠正我但是我的理解是你可以使用MOV,ADD,SUB,INC和DEC并设置和清除标志?
add
,sub
,inc
和dec
确实会设置/清除包括ZF在内的多个标志。
另一方面,mov
永远不会改变任何标志!
sub num2, num1
这是一个非常不可能的指令。
sub
指令的强制2个操作数不能同时为(仅数字)或两个变量(存储位置)。
在您的示例中,您可以从以下结果验证标志:
mov ax, Num2
sub ax, Num1
由于两个值都相同,此后将设置ZF。