Anar al contingut

Bandera de carrege

De L'Enciclopèdia, la wikipedia en valencià

En el processador d'una computadora, una bandera de carrege (també denominada indicador C o carry flag en anglés) és un bit individual en un registre d'estat del sistema de registre d'indicadors, que s'utilisa per a controlar quàn s'ha generat un carrege o préstam aritmètic a partir de la posició del bit més significatiu de l'unitat aritmètica llògica (ALU). L'indicador de carrege permet sumar/restar números majors que l'ample d'una ALU per mig del carrege (sumación) d'un dígit binari d'una suma/resta parcial a la posició del bit menys significatiu d'una paraula més significativa. Açò normalment ho programa l'usuari del processador a nivell d'ensamblador o còdic màquina, pero també pot ocórrer internament en certs processadors, a través de portes llògiques o de microcódigo, a on alguns processadors tenen registres i instruccions aritmètiques més amplis que la ALU (combinatòria o física).[1] També s'utilisa per a estendre desplaçaments i rotacions de manera similar en molts processadors (a voltes per mig d'un indicador dedicat). Per a les operacions sustractivas, s'ampren dos convencions (opostes): la majoria de les màquines activen l'indicador de carrege en prendre prestat, mentres que alguns microprocessadors (com el MOS 6502 i el PIC) ho desactiven en prendre prestat (i viceversa).

Utilisació

[editar | editar còdic]

L'indicador de carrege es veu afectat pel resultat de la majoria de les instruccions aritmètiques (i normalment vàries instruccions bit a bit) i també s'utilisa com a entrada per a moltes d'elles. Vàries d'estes instruccions tenen dos formes que lligen o ignoren el carrege. En llenguage ensamblador, estes instruccions es representen per mig de mnemotècnica, com ADD/SUB, ADC/SBC (ADD/SUB incloent el carrege), SHL/SHR (desplaçament de bits), ROL/ROR (rotació de bits), RCR/RCL (rotació a través del carrege), i aixina successivament.[2] L'us de l'indicador de carrege d'esta manera permet operacions de suma, resta, desplaçament i rotació de vàries paraules.

Considere's sumar 255 + 255 (11111111 + 11111111). El resultat deuria ser 510, que és el valor de 9 bits 111111110 en binari. No obstant, si s'utilisa un registre de 8 bits, solament s'almagasenaran els 8 bits menys significatius en el registre, binari 11111110 (decimal 254). Ya que hi ha carrege d'eixida del bit 7 (l'octau bit), el carrege està activat, lo que indica que el resultat necessita 9 bits. El resultat vàlit de 9 bits és la concatenació de l'indicador de carrege en el resultat.

Els atres bits comuns del registre d'estat de la ALU estaran Sign_Flag activat, Zero_flag desactivat i Overflow_Flag desactivat.

Si 11111111 representa el sancer en signe -1 en complement a dos (instrucció x86 ADD al,-1), l'interpretació del resultat és -2 perque Overflow_Flag està desactivat i Carry_Flag s'ignora. El signe del resultat és negatiu perque Sign_Flag està activat. 11111110 és la representació en complement a dos del sancer en signe -2.


Si 11111111 representa el número binari sancer sense signe 255 (instrucció x86 ADD al,255), l'interpretació del resultat seria 254, lo que és incorrecte, ya que el bit més significatiu del resultat es troba en Carry_Flag, que per lo tant no pot ignorar-se. Les instruccions Overflow_Flag i Sign_Flag s'ignoren.

Un atre eixemple podria ser un registre de 8 bits en el patró de bits 01010101 i l'indicador de carrege activat. Si s'eixecuta una instrucció de rotació a l'esquerra a través del carrege, el resultat seria 10101011 en l'indicador de carrege desactivat, ya que el bit més significatiu (bit 7) es rotó cap al carrege, mentres que el carrege es rotó cap al bit menys significatiu (bit 0).

La majoria dels microprocessadors, des del Intel 4004 i l'Intel 8008, tenen instruccions específiques per a activar i desactivar l'indicador de carrege. Una excepció va ser l'Intel 8080 (i el seu derivat Zilog Z80), que no incloïa un còdic d'operació explícit per a desactivar el carrege, ya que l'operació podia realisar-se per mig de qualsevol de les instruccions llògiques bit a bit (AND, OR, XOR), que desactivaven l'indicador de carrege.

L'indicador de carrege també s'usa freqüentment despuix d'instruccions de comparació, que normalment es disponen com a operacions de resta, i permet determinar quin dels dos valors comparats és menor (o major o igual) que l'atre. Les instruccions de bot que examinen l'indicador de carrege solen representar-se per mig de mnemotècnica, com BCC i BCS, per a botar si el carrege està desactivat o activat, respectivament. D'esta forma, l'indicador de carrege proporciona un mecanisme per a comparar els valors com a sancers sense signe. Açò contrasta en la bandera de desbordament, que proporciona un mecanisme per a comparar els valors com a sancers en signe.

Bandera de préstam

[editar | editar còdic]

Per al cas de la resta s'utilisa un bit denominat bandera de préstam (borrow flag en anglés). Si ben l'indicador de carrege està ben definit per a la suma, hi ha dos formes d'us comú d'utilisar l'indicador de carrege per a operacions de resta.

El primer utilisa el bit com a indicador de préstam, establint-ho si a<b en calcular a-b, i es deu realisar un préstam. Si a=b, el bit es borra. Una instrucció resta en préstam (SBB) calcularà a-b-C = a-(b+C), mentres que una resta sense préstam (SUB) actua com si el bit de préstam estiguera net. Les famílies de microprocessadors 6800, 680x0, 8051, intel 8080/Zilog Z80 i x86 (entre atres) utilisen un bit de préstam.


El segon usa l'identitat x = (not x)+1 directament (és dir, sense almagasenar el bit de carrege invertit) i calcula a-b com a+(no b)+1. L'indicador de carrege s'establix d'acort en esta suma, i restar en carrege calcula a+not(b)+C, mentres que la resta sense carrege actua com si el bit de carrege estiguera establit. El resultat és que el bit de carrege s'establix si a=b i es borra si a<b. Els processadors IBM S/360,[3] ARM, POWER/PowerPC, 6502, MSP430, COP8, Am29000, i960 i 88000 utilisen esta convenció. El 6502 és un eixemple particularment conegut perque no té una operació de resta sense carrege, per lo que els programadors deuen assegurar-se de que l'indicador de carrege estiga configurat abans de cada operació de resta a on no es requerix un préstam.

Resum dels diferents usos del bit de carrege en la resta
Bit de carrege o préstam Resta sense carrege/préstam Resta en préstam Resta en carrege
C = 0 ab
= a + not(b) + 1
ab0
= a + not(b) + 1
ab1
= a + not(b) + 0
C = 1 ab1
= a + not(b) + 0
ab0
= a + not(b) + 1

Els processadors enumerats anteriorment, que inclouen els microprocessadors més populars de les últimes décades, criden a estes operacions resta en préstam i resta en carrege, respectivament, pero la nomenclatura està llunt de ser consistent. Les arquitectura VAX, NS320xx, Fairchild Clipper i AVR utilisen la convenció de bits de préstam, pero criden a la seua operació a-b-C resta en carrege (SBWC, SUBC, SUBWC i SBC). Les arquitectura PA-RISC i PIC utilisen la convenció de carrege de bits, pero criden a la seua operació a+not(b)+C resta en préstam (SUBB i SUBWFB). Alguns atres, com l'H8, criden al seu resta estesa (SUBX). El Sun SPARC utilisa la convenció de préstam, el mnemotècnic SUBX i el nom restar en carrege.

El Motorola 6809 utilisa la convenció de bits de préstam i abdós nomenclatures, cridant a l'operació restar en préstam, pero assignant-li l'abreviatura mnemotècnica SBC.

Els microcontroladors de 8 bits ST6 van en abdós sentits d'una manera diferent. Encara que no tenen cap tipo d'instrucció de resta en carrege, sí tenen un bit de carrege que s'establix per mig d'una instrucció de resta, i la convenció depén del model de processador. El processador ST60 utilisa la convenció carry, mentres que els processadors ST62 i ST63 utilisen la convenció borrow.[4]

Vore també

[editar | editar còdic]

Referències

[editar | editar còdic]
  1. Els coneguts Z80 i 68000 són eixemples d'este tipo de CPU, entre molts uns atres.
  2. «Intel Architecture Software Developer's Manual, Volume 2: Instruction Set Reference Manual» (PDF). Consultat el 25 d'octubre de 2007.
  3. IBM System/360 Principles of Operation, p. 28.
  4. «ST6 Family Programming Manual» págs. 21–22,42. STMicroelectronics. Consultat el 28 de febrer de 2017.


Referències

[editar | editar còdic]