Su una macchina a 32 bit, un'istruzione "add-with-carry" utilizzata come parte di una sequenza di addizione multi-precisione deve accettare operandi per un valore di 65 bit e calcolare una somma di 33 bit. Le specifiche del registro di origine identificheranno la provenienza di 64 bit dell'operando e la specifica del registro di destinazione indicherà dove dovrebbero andare i 32 bit inferiori del risultato, ma cosa fare con l'operando "aggiungi un extra" o il bit superiore del risultato? Avere il permesso di specificare come parte dell'istruzione da dove dovrebbe provenire l'operando extra e dove dovrebbe andare il bit di risultato extra sarebbe moderatamente utile, ma in genere non sarebbe così utile da giustificare un campo extra nel codice operativo. Avere una "posizione" fissa per gestire il flag carry può essere un po 'imbarazzante dal punto di vista della pianificazione delle istruzioni, ma
Se si cercasse di progettare un set di istruzioni per consentire l'aritmetica multi-precisione ma ogni istruzione fosse limitata a due operandi a 32 bit e un operando di destinazione a 32 bit, si potrebbe implementare un "add" a 64 bit in quattro istruzioni: "set da r5 a 1 se r0 + r2 porterebbe o zero altrimenti; calcolare r4 = r1 + r3; calcolare r5 = r4 + r5; calcolare r4 = r0 + r2 ", ma andare oltre richiederebbe tre istruzioni per ogni parola aggiuntiva. La disponibilità di una bandiera carry come fonte e destinazione supplementare riduce il costo di un'istruzione per parola.
Si noti, tra l'altro, che avere un bit di istruzione controlla se l'istruzione aggiorna il registro flag può facilitare l'esecuzione fuori servizio, poiché le istruzioni che usano o modificano i bit di bandiera devono mantenere la loro sequenza l'una rispetto all'altra, ma istruzioni che non possono essere riorganizzato liberamente. Data la sequenza:
ldr r0,[r1]
add r0,r0,r2
eors r4,r5,r6
un'unità di esecuzione potrebbe riconoscere abbastanza facilmente che la terza istruzione potrebbe essere eseguita senza dover attendere la lettura dei dati [r1]
, ma se la seconda istruzione fosse stata adds r0,r0,r2
possibile sarebbe possibile solo se l'unità di esecuzione fosse in grado di garantire che al momento in cui qualcosa avesse tentato di utilizzare i flag, il flag zero manterrà il valore stabilito nella terza istruzione ma il flag carry manterrà il valore nella seconda.