019-【X86-汇编语言】-标记寄存器-溢出标志位[OV]
程序员文章站
2024-02-01 18:44:28
...
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