2010-07-19 5 views
2

Modifier: J'ai répondu à ma propre question. Voir ci-dessous. -_-Variables se comportant bizarrement (Intel 8086)

J'ai une variable définie dans le segment .data comme suit:

retVal DW 0100h ;stores hex fraction of the intermediate value. Starts at 1.00 

Ceci est la valeur que j'ajouter ou soustraire à obtenir ma valeur de retour.

La première fois qu'il apparaît dans le segment de code est au point suivant:

sub [retVal], ax  ; 

J'ai utilisé le débogueur, et peut confirmer que, au moment de cette opération, le registre de la hache est: 0000h .

Pourtant, si j'ajoute immédiatement la ligne de code suivante avant d':

mov dx, 0100h; 
mov [retVal], 0100h; 

je reçois une valeur complètement différente (aussi mal). Je suis assez déconcerté. Suis-je fondamentalement abuser des variables ici? Je ne vois pas pourquoi le fait de charger la même valeur que celle à laquelle la variable a été initialisée (et qui n'a pas encore été modifiée) modifierait les résultats.

Des idées? A défaut, quelqu'un pourrait-il me rappeler comment suivre la valeur d'une variable via CodeView? (Le débogueur DOSBox que j'utilise)

+0

Il nous sera impossible de deviner ce qui ne va pas si vous nous montrez seulement les lignes de code que vous * pensez * sont à l'origine du problème. Veuillez poster un exemple court et complet qui démontre le problème que vous voyez. N'oubliez pas d'indiquer clairement les résultats * attendus * et * réels *. –

Répondre

0

Le programme en question est-il un sous-programme?

Si tel est le cas, et que vous appelez le sous-programme à plusieurs reprises, réinitialisez-vous les variables que vous modifiez? Si vous ne déclarez pas les variables, vous n'utilisez pas les valeurs précédemment déclarées lors de la deuxième ou de la prochaine exécution du sous-programme, mais les valeurs modifiées que vous avez à la fin de votre première exécution.

0

Si cela est réel 8086 (c'est-à-dire, architecture segmentée), quel est le ds défini au point où vous effectuez la soustraction? La première chose qui vient à l'esprit, c'est que vous changez un emplacement mémoire totalement différent.

En plus de cela, vous devez fournir:

  • le plus court programme complet possible qui présente le comportement problématique (et vous pouvez vous trouver résoudre votre problème tout en faisant cela - je fais souvent). Les valeurs incorrectes réelles retVal sont définies dans les deux cas.
Questions connexes