Sur une machine 32 bits, une instruction "ajouter avec porter" utilisée dans le cadre d'une séquence d'addition multi-précision doit accepter une valeur d'opérandes de 65 bits et calculer une somme de 33 bits. Les spécifications du registre source identifieront d'où les 64 bits d'opérande devraient provenir, et la spécification du registre de destination dira où les 32 bits inférieurs du résultat devraient aller, mais que faire de l'opérande "ajouter un supplémentaire" ou du bit supérieur du résultat? Être autorisé à spécifier dans le cadre de l'instruction d'où l'opérande supplémentaire devrait provenir et où le bit de résultat supplémentaire devrait aller serait modérément utile, mais il ne serait généralement pas assez utile pour justifier un champ supplémentaire dans l'opcode. Avoir un «emplacement» fixe pour gérer le drapeau de transport peut être un peu gênant du point de vue de la programmation des instructions, mais c'est
Si l'on essayait de concevoir un jeu d'instructions pour permettre l'arithmétique multi-précision mais que chaque instruction était limitée à deux opérandes 32 bits et un opérande de destination 32 bits, on pourrait implémenter un "add" 64 bits dans quatre instructions: "set r5 à 1 si r0 + r2 porterait ou zéro sinon; calculer r4 = r1 + r3; calculer r5 = r4 + r5; calculer r4 = r0 + r2 ", mais pour aller au-delà, il faudrait trois instructions pour chaque mot supplémentaire. Avoir un indicateur de portage disponible comme source et destination supplémentaire réduit le coût à une instruction par mot.
Notez, btw, que le fait d'avoir un bit d'instruction contrôlant si l'instruction met à jour le registre d'indicateur peut faciliter l'exécution dans le désordre, car les instructions qui utilisent ou modifient les bits d'indicateur doivent conserver leur séquence les unes par rapport aux autres, mais les instructions qui ne le font pas non plus peuvent être réarrangé librement. Étant donné la séquence:
ldr r0,[r1]
add r0,r0,r2
eors r4,r5,r6
une unité d'exécution pourrait assez facilement reconnaître que la troisième instruction pourrait s'exécuter sans avoir à attendre que les données soient lues [r1]
, mais si la deuxième instruction l'avait été, adds r0,r0,r2
cela ne serait possible que si l'unité d'exécution pouvait s'assurer qu'au moment où quelque chose essayait d'utiliser les drapeaux, le drapeau zéro contiendrait la valeur établie dans la troisième instruction mais le drapeau de retenue conserverait la valeur dans la seconde.