2010-05-24 27 views
1

Suppose AX = 8FFE et BX = 0FFF
Maintenant, si nous écrivonsDrapeau et pavillon de débordement ne fonctionnent pas selon les attentes

Cmp ax,bx 

maintenant à ce point ce qui va se passer est, source (bx) seront soustrait de la destination (ax) et les drapeaux appropriés seront mis à jour. Comme l'ordinateur représente chaque nombre dans la forme de complément de 2, donc 8FFE est un complément de 2 d'un nombre similaire 0FFF est le complément de 2 d'un certain nombre.

Comme dans le complément 2, la soustraction est implémentée par addition donc nous ajoutons ces deux nombres en les convertissant en binaire.

8FFE----------> 1000 1111 1111 1110 
0FFF----------> 0000 1111 1111 1111 
        -------------------------------- 
        1001 1111 1111 1101 

Maintenant c'est le résultat qui est 9FFD en hexadécimal.

Comme vous pouvez le voir, aucun débordement n'est survenu et le bit de signe est 1 du résultat.

Question: Avec cette imagination que le drapeau de signe doit être réglé et le drapeau de trop-plein
doit rester 0, j'ai vérifié ceci dans le débogueur, mais je trouve En face de celui-ci
qui est, signe indicateur reste 0 et le drapeau de débordement est 1. Maintenant s'il vous plaît dites-moi pourquoi
il arrive?

+1

Vous avez oublié de compléter BX. – starblue

+0

merci monsieur, j'ai compris votre point et je n'ai aucune confusion maintenant –

Répondre

2

Je pense que vous avez fait une soustraction incorrecte. Mon résultat est:

8FFE----------> 1000 1111 1111 1110 
0FFF----------> 0000 1111 1111 1111 
        ---------------------------------- 
7FFF----------> 0111 1111 1111 1111  

ce qui s'est passé est que l'opération est empruntée du bit de signe seulement. Cela signifie que l'indicateur OF doit être défini. Lire ici about assembly CF(Carry) and OF(Overflow) flag, http://en.wikipedia.org/wiki/Carry_flag, http://en.wikipedia.org/wiki/Overflow_flag. Cela signifie que c'est l'opération signée qui est incorrecte. si c'était non signé alors bien.

+0

mais l'ordinateur de monsieur représente tous les nombres dans la forme de complément de 2 et la soustraction est mise en application par addition donc pourquoi vous soustrayez au lieu de les ajouter justifiez votre réponse –

+0

@Zia ur Rahman : tu as raison. mais rappelez-vous que 'a - b = a + (-b)' indépendamment du codage. si vous calculez -b comme comp 2: F001 et ajouter, vous obtiendrez le même résultat que moi – Andrey

+0

merci monsieur commentaire très utile que j'ai eu l'idée maintenant. –