首页 文章

设置和清除标志

提问于
浏览
2

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

.data
Num1 = 18
Num2 = 18

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

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

2 回答

  • 1

    由于拼写案例检查,此代码不会设置ZERO标志:
    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 .

相关问题