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 !!
A voir également:
- Aide sur langage assembleur
- Langage ascii - Guide
- Langage binaire - Guide
- Langage visual basic - Télécharger - Langages
- Que veut dire le rectangle en langage sms ✓ - Forum Samsung
- Pascal langage - Télécharger - Édition & Programmation
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...
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 ^^.
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.
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.
j'ai utilisé l'émulateur 8086, et j'ai lancé le programme étape par étape, et l'émulateur me montre que CF=1.
en utilisant complément à 15 : - 0FFh = 00h.
et en utilisant complément à 16 : - 0FFh = 01h.
alors AL = 01h + 01h = 02h
A combien est le SF ?
IF = AF = 1
Pourquoi tu obtiens 2 (décimal) dans AL ? Tu devrais obtenir 254 et avoir une retenue dans IF.
Tu n'est pas d'accord ?
Test avec :
Tu obtiens quoi dans CF et IF ?