代码之家  ›  专栏  ›  技术社区  ›  Jishan

如何设置/取消设置MASM标志

  •  0
  • Jishan  · 技术社区  · 7 年前

    设置意味着 flag value = 1 和未结算意味着 flag value = 0

    现在我了解了在masm中设置和取消设置标志的几种方法,如下所示:

    test al,0 ; set Zero flag
    and al,0 ; set Zero flag
    or al,1 ; clear Zero flag
    

    同样的道理 Sign flag :

    or al,80h ; set Sign flag
    and al,7Fh ; clear Sign flag
    

    设置 Carry flag ,我们使用STC指令;要清除进位标志,我们使用CLC:

    stc ; set Carry flag
    clc ; clear Carry flag
    

    设置 Overflow flag ,我们加上两个产生负和的正值。清除 溢出标志 ,We或带0的操作数:

    mov al,7Fh ; AL = +127
    inc al ; AL = 80h (-128), OF=1
    or eax,0 ; clear Overflow flag
    

    这个 Overflow Carry 旗子操作是自我理解和容易掌握的,但我发现很难理解设置旗子的数学原理。 Zero/Sign 旗帜。感谢您的帮助!

    谢谢!

    2 回复  |  直到 7 年前
        1
  •  5
  •   Fifoernik    7 年前

    10 0

           mov cx, 10
    Again:
           ; Do some stuff, not changing cx
           dec cx
           jnz Again ; Go back to Again if not zero
    

    dec Z

    stc clc C

    op1 dd  0x12345678 ; 32-bit value
    op2 dd  0x9abcdef0 ; 32-bit value
    
        mov ax,[op1+0] ; Get low word of op1
        mov dx,[op1+2] ; Get high word of op1
    
        add ax,[op2+0] ; Add in low word of op2
        adc dx,[op2+2] ; Add in high word of op2 - WITH CARRY!
    

    1

    • D STOS MOVS cld std
    • I cli sti
        2
  •  4
  •   Fifoernik    7 年前

    SF = ((signed)result < 0);
    
    ZF = (result == 0);
    

    result neg al


    inc dec famously adc

    Rotates problematic for out-of-order execution shlx shrx rol ror


    BSF / BSR

    lzcnt tzcnt bsf bsr

    推荐文章