欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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