Bandiera a metà trasporto – Wikipedia

[ad_1]

Bit di flag di regolazione binaria/decimale in alcuni processori di computer

UN bandiera a metà portata (noto anche come an bandiera ausiliaria) è un bit di flag di condizione nel file registro di stato di molti processore famiglie, come la Intel8080, Zilog Z80IL x86,(1) e il Atmel AVR serie, tra gli altri. Indica quando a trasportare o il prestito è stato generato dai quattro bit meno significativi di accumulatore registrarsi a seguito dell’esecuzione di un aritmetica istruzioni. Viene utilizzato principalmente in formato decimale (GAV) istruzioni aritmetiche.

Normalmente, un processore che utilizza aritmetica binaria (che include quasi tutte le CPU moderne) aggiungerà due valori byte da 8 bit secondo le regole della semplice addizione binaria. Ad esempio, aggiungendo 2516 e 4816 produce 6D16. Tuttavia, per decimale in codice binario (BCD), dove ogni nibble a 4 bit rappresenta una cifra decimale, l’addizione è più complicata. Ad esempio, aggiungendo i valori decimali 25 e 48, che sono codificati come valori BCD 2516 e 4816la somma binaria dei due valori produce 6D16. Poiché la parte inferiore di questo valore è una cifra non decimale (D), deve essere modificata aggiungendo 0616 per produrre il risultato BCD corretto di 7316che rappresenta il valore decimale 73.

  0010 0101   25
+ 0100 1000   48
-----------
  0110 1101   6D, intermediate result
+      0110   06, adjustment
-----------
  0111 0011   73, adjusted result

Allo stesso modo, aggiungendo i valori BCD 3916 e 4816 produce 8116. Questo risultato non ha un nibble basso non decimale, ma provoca un trasferimento della cifra meno significativa (quattro bit inferiori) nella cifra più significativa (quattro bit superiori). Ciò è indicato dalla CPU che imposta il flag di metà riporto. Anche questo valore deve essere corretto aggiungendo 0616 a 8116 per produrre un risultato BCD corretto di 8716.

  0011 1001   39
+ 0100 1000   48
-----------
  1000 0001   81, intermediate result
+      0110   06, adjustment
-----------
  1000 0111   87, adjusted result

Infine, se un’addizione dà come risultato una cifra alta non decimale, allora 6016 deve essere aggiunto al valore per produrre il risultato BCD corretto. Ad esempio, aggiungendo 7216 e 7316 produce E516. Poiché la cifra più significativa di questa somma non è decimale (E), aggiungere 6016 a produce un risultato BCD corretto di 14516. (Nota che la cifra iniziale è in realtà a portare un po’.)

  0111 0010   72
+ 0111 0011   73
-----------
  1110 0101   E5, intermediate result
+ 0110        60, adjustment
-----------
1 0100 0101  145, adjusted result

Riassumendo, se il risultato di un’addizione binaria contiene una cifra bassa non decimale o provoca l’impostazione del flag di metà riporto, il risultato deve essere corretto aggiungendo 0616 ad esso; se il risultato contiene una cifra alta non decimale, il risultato deve essere ulteriormente corretto aggiungendo 6016 per produrre il valore BCD finale corretto.

La bandiera di trasporto ausiliaria in x86

(modificare)

Registro di stato della CPU Intel
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 (posizione del bit)
O D IO T S Z UN P C Bandiere

IL Bandiera di trasporto ausiliario (AF) è un Bandiera della CPU nel Registro delle BANDIERE di tutti x86-compatibile CPU,(2) e il precedente Famiglia 8080. Occasionalmente è stato chiamato Adjustment Flag da Intel.(3) Il bit flag si trova in posizione 4 nel registro dei flag della CPU. Indica quando un aritmetica trasportare o il prestito è stato generato dai quattro bit meno significativi, o bocconcino inferiore. Viene utilizzato principalmente per supportare decimale in codice binario (BCD) aritmetica.

Il flag di trasporto ausiliario viene impostato (a 1) se durante un “aggiungere” operazione c’è un riporto dal nibble basso (quattro bit più bassi) al nibble alto (quattro bit superiori), o un prestito dal nibble alto al nibble basso, nella porzione di 8 bit di ordine basso, durante una sottrazione Altrimenti, se non si verifica alcun riporto o prestito, il flag viene cancellato o “reimpostato” (impostato su 0).
(4)


[ad_2]

Source link

Rispondi

Torna in alto