alu_add8(), difficulté à comprendre la technique utilisée

alu_add8(), difficulté à comprendre la technique utilisée

by Victor Louis Carles -
Number of replies: 1

Bonjour.

Concernant le fichier alu.c de la semaine 2, je ne comprend pas bien la technique d'addition utilisée. Prenons l'un des exemples de test-alu.c :

Soit une chaine de 8 bits 10000000 qu'on souhaite additionner à 011111111, en ajoutant la constante 1 ( je raisonne en binaire car je trouve ça plus compréhensible visuellement ). On devrait obtenir 0. En suivant le raisonnement point par point, j'obtiens :

a. Une variable qui additionne les lsb des deux chaines, on obtient alors : 00001111 + 1 (la constante) = 00010000.

b. Une variable qui additionne les msb des deux chaines et de la variable précédente, soit 00001000 + 00000111 + 00000001 = 00010000. En décalant de 4 vers la gauche pour repositionner les msb en tête de chaine, on a donc une chaine nulle. Mais si on concatène les deux variables avec l'opérateur bitwise OR, on obtient donc 00010000 au lieu de 0. Quelle est l' erreur dans mon raisonnement s'il vous plait ?

In reply to Victor Louis Carles

Re: alu_add8(), difficulté à comprendre la technique utilisée

by Beltan Hacène Philibert Michel -
Il te reste à retourner la concaténation des deux résultats obtenus.
Tu as fait les deux "sous" addition, sur quatre bits, il faut juste regrouper le résultat: concaténer les 4 bits de poids faible de l'addition des MSBs avec les 4 bits de poids faible de l'addition des LSBs. Les deux sont 0000 dans ce cas et la concaténation te donne bien 0b0000_0000 = 0.
En soit ton résultat est juste et il n'y a pas d'erreur, tu t'es simplement arrêté trop tôt :)