오버플로 플래그

Overflow flag

컴퓨터 프로세서에서 오버플로 플래그(V 플래그라고도 함)는 일반적으로 연산 중 산술 오버플로가 발생한 시기를 나타내는 데 사용되는 시스템 상태 레지스터의 단일 비트로서, 서명된 개의 완료 결과가 결과에 사용된 비트 수에 맞지 않음을 나타낸다.일부 아키텍처는 오버플로를 초래하는 운영에서 자동으로 예외를 발생시키도록 구성할 수 있다.

예를 들어, 8비트 레지스터를 사용하여 127과 127을 추가한다고 가정합시다. 127+127은 254이지만, 8비트 산술 결과를 사용하면 1111 1110 이진, 즉 두 개의 보완 인코딩인 -2가 음수인 것이다.양의 피연산자(또는 그 반대)의 음의 합은 오버플로다.그런 다음 오버플로 플래그를 설정하여 프로그램이 문제를 인식하고 이를 완화하거나 오류를 신호할 수 있다.따라서 오버플로 플래그는 부호가 같은 두 개의 숫자(또는 반대 기호가 있는 두 개의 숫자 빼기)를 추가하여 가장 유의한 비트(여기서 부호 비트로 간주)가 변경될 때 설정된다.두 추가 피연산자의 부호가 서로 다르면(또는 두 감산 피연산자의 부호가 동일하면) 오버플로가 발생할 수 없다.[1]

이진수 값이 서명되지 않은 숫자해석되면 오버플로 플래그는 무의미하고 일반적으로 무시된다.두 개의 보완 산술의 장점 중 하나는 추가와 뺄셈 연산이 부호화된 피연산자와 부호 없는 피연산자를 구별할 필요가 없다는 점이다.이러한 이유로 대부분의 컴퓨터 명령 집합은 서명된 피연산자와 서명되지 않은 피연산자를 구분하지 않고, (서명되지 않은) 오버플로와 (서명되지 않은) 모든 작업에 플래그를 발생시키고, 관심 있는 피연산자에 주의를 기울이도록 다음의 지시에 맡긴다.[2]

내부적으로 오버플로 플래그는 일반적으로 간판 비트를 출입하는 독점적 또는 내부 운반에 의해 생성된다.

비트 연산(및, 또는 xor, 회전하지 않음)은 서명 오버플로라는 개념을 가지고 있지 않기 때문에 정의된 값은 프로세서 아키텍처마다 다르다.어떤 이는 무조건적으로 비트를 클리어하고, 어떤 이는 변하지 않은 채 방치하며, 어떤 이는 정의되지 않은 값으로 설정한다.시프트와 승수는 정확하게 정의된 가치를 허용하지만, 일관성 있게 구현되지는 않는다.예를 들어, x86 명령 집합은 곱과 1비트 이동에 대한 오버플로 플래그만 정의하며, 다중 비트 이동은 정의되지 않은 채로 둔다.

참조

  1. ^ Kholodov, Igor (1 November 2008). "Overflow Detection: Signed Numbers Addition". CIS77 Introduction to Computer Systems (course notes). Bristol Community College. Retrieved 2020-12-30.
  2. ^ Allen, Ian D. (25 February 2011). "The CARRY flag and OVERFLOW flag in binary arithmetic". DAT 2343 Computer Systems Architecture (course notes). Algonquin College.