Aide sur langage assembleur
Fermé
spoonatte
Messages postés
66
Date d'inscription
mardi 22 novembre 2011
Statut
Membre
Dernière intervention
31 décembre 2013
-
19 avril 2012 à 21:02
spoonatte Messages postés 66 Date d'inscription mardi 22 novembre 2011 Statut Membre Dernière intervention 31 décembre 2013 - 20 avril 2012 à 17:22
spoonatte Messages postés 66 Date d'inscription mardi 22 novembre 2011 Statut Membre Dernière intervention 31 décembre 2013 - 20 avril 2012 à 17:22
A voir également:
- Aide sur langage assembleur
- Langage ascii - Guide
- Débuter langage batch windows - Guide
- Langage binaire - Guide
- Symboles langage sms ✓ - Forum Mobile
- Puissance en langage c ✓ - Forum C
2 réponses
Panoramix.
Messages postés
2655
Date d'inscription
mardi 13 avril 2010
Statut
Membre
Dernière intervention
28 décembre 2016
1 096
Modifié par Panoramix. le 19/04/2012 à 22:02
Modifié par Panoramix. le 19/04/2012 à 22:02
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...
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 836
20 avril 2012 à 12:08
20 avril 2012 à 12:08
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 ^^.
Panoramix.
Messages postés
2655
Date d'inscription
mardi 13 avril 2010
Statut
Membre
Dernière intervention
28 décembre 2016
1 096
20 avril 2012 à 12:16
20 avril 2012 à 12:16
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.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 836
Modifié par fiddy le 20/04/2012 à 13:09
Modifié par fiddy le 20/04/2012 à 13:09
Le second argument (0ffh) est plus grand que le premier (01h). Donc CF = 1.
Panoramix.
Messages postés
2655
Date d'inscription
mardi 13 avril 2010
Statut
Membre
Dernière intervention
28 décembre 2016
1 096
20 avril 2012 à 13:12
20 avril 2012 à 13:12
Mais il n'y a pas de retenu, non ? C'est ce à quoi sert carry ; utiliser des chiffres qui dépassent 8bits ?
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 836
20 avril 2012 à 14:52
20 avril 2012 à 14:52
Oui, mais la cary sert aussi de borrow flag.
Et donc CF devient à 1 lorsqu'on le micropro calcule a-b avec b>a.
Et donc CF devient à 1 lorsqu'on le micropro calcule a-b avec b>a.
spoonatte
Messages postés
66
Date d'inscription
mardi 22 novembre 2011
Statut
Membre
Dernière intervention
31 décembre 2013
20 avril 2012 à 15:41
20 avril 2012 à 15:41
0ffh = -1d alors b<a, et tu as dit que b>a :-/ je ne peux pas comprendre
Modifié par spoonatte le 19/04/2012 à 22:33
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
19 avril 2012 à 22:33
A combien est le SF ?
19 avril 2012 à 22:35
IF = AF = 1
Modifié par Panoramix. le 19/04/2012 à 22:44
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 ?
19 avril 2012 à 23:02