014-【X86-汇编语言】-标记寄存器-零标志位[ZR]

有的时候我们需要得知计算结果的状态来判断计算结果是否正确,或是根据计算结果的状态执行不同的程序分支.这些状态都保存在标记寄存器中,接下来介绍一些与加减运算有关的标志位.

关于如何查看标志寄存器,请参见009-【X86-汇编语言】-寄存器(Register)

ZR

ZR为零标志位,当计算结果为0时,ZR的值为1

程序演示

.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO, dwExitCode:DWORD

.data

.code
MAIN PROC
mov eax,0h	;MOV 不影响标记寄存器,清空eax寄存器
inc al		;al=1h,ZR=0
dec al		;al=0h,ZR=1
add al,0FFh	;al=ffh,ZR=0
add al,1h	;al=0h,ZR=1
add al,0FFh	;al=ffh,ZR=0
sub al,0FFh	;al=0h,ZR=1
add al,0FFh	;al=ffh,ZR=0
inc	al		;al=0h,ZR=1
mov al,1h	;MOV 不影响标记寄存器 al=1h,ZR=1
neg al		;al=ffh,ZR=0
mov al,0h	;MOV 不影响标记寄存器 al=0,ZR=0;MOV不影响ZR
neg al		;al=0h,ZR=1
add al,80h	;al=80h,ZR=0
dec al		;al=0h,ZR=1
INVOKE ExitProcess,0
MAIN ENDP
END MAIN

总结

DEC、SUB、INC、ADD的计算结果等于0时,ZR=0.

NEG的目的操作数是0时,ZR=0

思考

当al=0ffh时,再加1(inc,add),为什么结果是0

猜你喜欢

转载自blog.csdn.net/patronwa/article/details/88565913