la question du drapeau de transport!
-
04-10-2019 - |
Question
AX = Supposons FFFE et BX = 1234
maintenant, si nous écrivons cmp ax,bx
(bx sera soustrait de hache et les flages approprite sera mis à jour)
maintenant la représentation binaire des nombres dans la hache et bx est donnée par
AX = 1111 1111 1111 1110
BX= 0001 0010 0011 0100
Comme bx sera soustrait de hache donc nous devons negate bx (comme résultat = ax + (- bx))
de sorte que le bx niée (2 du complément à Bx) est donnée par.
BX= 1110 1101 1100 1100
Maintenant, nous ajoutons à la fois hache et bx (comme la soustraction est mis en œuvre par l'addition dans l'ordinateur)
AX= 1111 1111 1111 1110
BX= 1110 1101 1100 1100
------------------------------------
1 1110 1101 1100 1010
Maintenant que vous pouvez voir le résultat est de 17 bits maintenant le 17 bits devrait aller en porter flage, mais quand je l'ai vérifié le drapeau de transport est à 0. CF = 0 pourquoi?
La solution
trouvé un lien ici: http://oopweb.com/Assembly/Documents/ArtOfAssembly/ Volume / Chapter_6 / CH06-2.html
Il est comme je m'y attendais. Le drapeau de transport est défini que si « emprunter » était nécessaire. Quand vous faites la soustraction, vous définissez l'indicateur de transport avant de faire le « Soustraction » et le nouveau drapeau de transport indique si vous deviez emprunter. Votre exemple omis l'addition de 1 pour le report prédéfini drapeau dans 17 bits qui provoquera pas de report dans le résultat.
Autres conseils
Considérez l'indicateur de report en tant que bit de retenue lorsque la soustraction est exécutée. Il est initialisé à 1 si l'opération est a−b−C
, à savoir, a + not(b) + C
au lieu de a + not(b) + 1
que vous avez décrit. En d'autres termes, le report est inversé pour Soustraire de sorte qu'il peut être utilisé pour faire Soustraire multiples précision.