019-【X86-汇编语言】-标记寄存器-溢出标志位[OV]

OV

ov是溢出标志位,如果将计算结果视为有符号数。那么当结果超出目的操作数的表达范围时,ov=1

比如:BYTE类型能表示的有符号范围是[-128,127].当计算结果小于-128或大于127时,ov=1.

从补码角加法的度考虑,如果两个正整数相加结果为负时,ov=1.两个负整数相加结果为正时,ov=1.符号不同的两个数相加不会溢出

程序演示

.386
.model flat,stdcall
.stack 4096

ExitProcess PROTO,dwExitCode:DWORD

.data

.code
MAIN PROC
MOV EAX,0h
MOV AH,80h			;80h的十进制有符号数是-128
DEC AH				;80h-1=-129,小于-128,ov=1
MOV AH,7Fh			;7Fh的十进制有符号数是127
INC AH				;7F+1=128,大于127,ov=1
MOV AH,81h			;81h的十进制有符号数是-127
SUB AH,2			;81h-2=-129,小于-128,ov=1
MOV AH,7Fh			;7Eh的十进制有符号数是126
ADD AH,2			;7E+1=128,大于127,ov=1
MOV AH,80h
NEG AH				;80h十进制有符号数-128,取反后128大于127 ov=1
MOV AH,7Fh
NEG AH				;7Fh的十进制有符号数是127,取反后-127,大于-128 ov=0
INVOKE ExitProcess,0
MAIN ENDP
END MAIN

由于用补码表示时,可表示的负数的绝对值范围要大于正数,如BYTE表示负数最大的绝对值是128,而正数是127.当对于-128取反时值大于127所以ov=1

你可能感兴趣的:(019-【X86-汇编语言】-标记寄存器-溢出标志位[OV])