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