Aide sur langage assembleur
spoonatte
Messages postés
85
Statut
Membre
-
spoonatte Messages postés 85 Statut Membre -
spoonatte Messages postés 85 Statut Membre -
Bonjour,
J'ai lu que CF est positionné à 1 si la dernière opération a générée une retenue.
alors, j'ai fait les opération suivantes :
et quand j'ai déboguée le programme CF est positionné à 1, même si le résultat est AL=02H !!
J'ai lu que CF est positionné à 1 si la dernière opération a générée une retenue.
alors, j'ai fait les opération suivantes :
MOV AL,01H MOV BL, 0FFH SUB AL,BL
et quand j'ai déboguée le programme CF est positionné à 1, même si le résultat est AL=02H !!
2 réponses
-
Salut,
Alors de mémoire :)
Tu attribues les valeurs (en décimal) : AL = 1 et BL = 255. Tu soustrais ensuite AL - BL et tu stocks le résultats dans AL (=-254). Vu que le résultat est négatif, OV est incrémenté de 1 (= CF dans ton cas ?). Carry n'est pas incrémenté vu que le résultat ne dépasse pas 8 bit.
Je sais pas si ça peut t'aider, le cas échéant, je ressors mon cours d'assembleur :)
NB : ces référence sont pour le X51... après je sais pas quelle micro-processeur tu utilises... -
Bonjour,
mov al, 01h
mov bl, 0ffh,
sub al, bl
Le micropro va calculer le complément à 2 de bl qui est 01h
Ensuite, le micropro va sommer al et -bl : al = 1 + 1 = 2.
Il n'y a aucune retenue donc cf=1 (c'est inversé par rapport à l'addition).
On a donc bel et bien al = 02h et cf = 1.
Sauf erreur de ma part bien sûr. L'asm remonte ^^.-
Mais pourquoi CF = 1 ?
Selon la doc :
CF (Carry Flag) :
Retenue : cet indicateur et mis à 1 lorsque il y a une retenue du résultat à 8 ou 16 bits. il intervient dans les opérations d'additions (retenue) et de soustractions (borrow) sur des entiers naturels. Il est positionné en particulier par les instructions ADD, SUB et CMP. -
-
-
-
-