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
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 :
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:

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
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...
1
spoonatte Messages postés 66 Date d'inscription mardi 22 novembre 2011 Statut Membre Dernière intervention 31 décembre 2013
Modifié par spoonatte le 19/04/2012 à 22:33
J'utilise le µprocesseur 8086.
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
0
Panoramix. Messages postés 2655 Date d'inscription mardi 13 avril 2010 Statut Membre Dernière intervention 28 décembre 2016 1 096
19 avril 2012 à 22:33
CF = carry, il est incrémenter si le résultat dépasse 255.

A combien est le SF ?
0
spoonatte Messages postés 66 Date d'inscription mardi 22 novembre 2011 Statut Membre Dernière intervention 31 décembre 2013
19 avril 2012 à 22:35
SF = 0
IF = AF = 1
0
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:44
IF = 1 : une erreur ?

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 :

sub 1h,FFh

Tu obtiens quoi dans CF et IF ?
0
spoonatte Messages postés 66 Date d'inscription mardi 22 novembre 2011 Statut Membre Dernière intervention 31 décembre 2013
19 avril 2012 à 23:02
CF=1 , IF = 1
0
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
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 ^^.
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 à 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.
0
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
Le second argument (0ffh) est plus grand que le premier (01h). Donc CF = 1.
0
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
Mais il n'y a pas de retenu, non ? C'est ce à quoi sert carry ; utiliser des chiffres qui dépassent 8bits ?
0
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
Oui, mais la cary sert aussi de borrow flag.
Et donc CF devient à 1 lorsqu'on le micropro calcule a-b avec b>a.
0
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
0ffh = -1d alors b<a, et tu as dit que b>a :-/ je ne peux pas comprendre
0