Overflow flag

De la Viquipèdia, l'enciclopèdia lliure
Un exemple bàsic d'un desbordament de memòria intermèdia. En escriure 10 bytes de dades a "A", que només té 8 bytes disponibles, "B" es canvia sense voler.

En els processadors d'ordinadors, la bandera de desbordament (de vegades anomenada bandera V) sol ser un bit únic en un registre d'estat del sistema que s'utilitza per indicar quan s'ha produït un desbordament aritmètic en una operació, indicant que el resultat del complement de dos signat no encaixaria en el nombre de bits utilitzats per al resultat. Algunes arquitectures es poden configurar per generar automàticament una excepció en una operació que produeixi un desbordament.[1]

Un exemple, suposem que afegim 127 i 127 utilitzant registres de 8 bits. 127+127 és 254, però utilitzant l'aritmètica de 8 bits el resultat seria 1111 1110 binari, que és la codificació del complement a dos de -2, un nombre negatiu. Una suma negativa d'operands positius (o viceversa) és un desbordament. Aleshores s'establiria la bandera de desbordament perquè el programa pugui ser conscient del problema i mitigar-ho o senyalar un error. Així, la bandera de desbordament s'estableix quan el bit més significatiu (aquí considerat el bit de signe) es canvia sumant dos nombres amb el mateix signe (o restant dos nombres amb signes oposats). El desbordament no es pot produir quan el signe de dos operands d'addició és diferent (o el signe de dos operands de resta és el mateix).[2]

Quan els valors binaris s'interpreten com a nombres sense signe, la bandera de desbordament no té sentit i normalment s'ignora. Un dels avantatges de l'aritmètica del complement a dos és que les operacions de suma i resta no necessiten distingir entre operands amb signe i sense signe. Per aquesta raó, la majoria de conjunts d'instruccions d'ordinador no distingeixen entre operands signats i sense signe, generant tant (signat) desbordament com (sense signe) senyaladors de transport en cada operació, i deixant que segueixin les instruccions per prestar atenció a qualsevol que sigui d'interès.[3]

Internament, la bandera de desbordament es genera normalment per un bit exclusiu o del transport intern dins i fora del signe.

Les operacions bit a bit (i, o, xor, no, rotar) no tenen una noció de desbordament signat, de manera que el valor definit varia en diferents arquitectures de processador. Alguns processadors esborren el bit de manera incondicional (cosa útil perquè les operacions per bit estableixen el senyalador de signe i el senyalador de desbordament clar indica que el senyalador de signe és vàlid), altres el deixen sense canvis i alguns el configuren en un valor indefinit. Els canvis i multiplicacions permeten un valor ben definit, però no s'implementa de manera coherent. Per exemple, el conjunt d'instruccions x86 només defineix el senyalador de desbordament per a multiplicacions i desplaçaments d'1 bit; els desplaçaments de diversos bits ho deixen sense definir.[4]

Referències[modifica]

  1. «The 6502 overflow flag explained mathematically» (en anglès). [Consulta: 2 desembre 2023].
  2. Kholodov, Igor. «Overflow Detection: Signed Numbers Addition» (en anglès). CIS77 Introduction to Computer Systems. Bristol Community College, 01-11-2008. [Consulta: 30 desembre 2020].
  3. Allen, Ian D. «The CARRY flag and OVERFLOW flag in binary arithmetic» (en anglès). DAT 2343 Computer Systems Architecture. Algonquin College, 25-02-2011.
  4. «Overflow Flag Examples» (en anglès). [Consulta: 2 desembre 2023].