2010-05-05 5 views
6

J'étudie l'ASM 8086 théoriquement sur highschool. (Cela signifie que j'étudie l'ASM 8086 sur un ordinateur portable, et je n'ai jamais pu l'exécuter sur un ordinateur).
Question à propos de ADD sur ASM 8086

Et je ne comprends pas - ce qui se passera si je fais ceci:

MOV AL, F2h 
ADD AL, 20h 

Qu'est-ce que l'ordinateur faire? (Ce qui sera la valeur de AL, AX, CF, ZF?)

et ce qui se passera si je fais ceci:

MOV AH,F2h 
ADD AH,20h 

Merci !!

Répondre

5
MOV AL, F2h 

Placez la valeur 0xF2 dans le registre AL (accumulateur).

ADD AL, 20h 

Ajoute la valeur 0x20 à la valeur contenue dans le registre AL.

AL sera 0xF2 + 0x20. Mais AL est un registre de 8 bits, donc la valeur sera 0x12, et non 0x112.

Même chose pour AH, car c'est aussi un registre de 8 bits.
Pour obtenir la valeur complète, vous devez utiliser le registre AX, qui est 16 bits.
AX est composé de AH (haut) et AL (bas), de sorte que vous pouvez accéder aux parties hautes et basses individuellement.

----------------EAX ---------------- 
       ------- AX -------- 
|----------------|--------|--------| 
|    | AH | AL | 
|----------------|--------|--------| 
    16 bits  8 bits 8 bits 
+0

Puisqu'il s'agit d'un registre 8bit, le drapeau de report sera-t-il défini? – xtofl

+1

Oui, il sera défini car il y a un débordement du registre AL. – Macmade

+0

Merci beaucoup Macmade, je comprends maintenant beaucoup mieux les bases de l'ASM. :-) – Tal

0

Lorsque j'étudiais l'ASM à l'école, j'ai utilisé this program. Cela m'a beaucoup aidé à déboguer des programmes ASM simples. Vous venez de mettre votre code source dans l'éditeur, cliquez sur déboguer et regarder ce qui s'est passé avec les registres étape par étape

+0

WOW! Je cherchais quelque chose comme ça depuis des mois! Merci beaucoup !!! – Tal

0

Mon asm est un peu rouillé .. mais je pense que dans votre première instance, AL serait 12h et le carry serait augmenter AH par un.

Télécharger this émulateur, il vous permettra de regarder l'exécution du code étape par étape, d'inspecter les valeurs des registres, etc. Beaucoup plus de plaisir que le crayon et le papier.

1

Je recommande également d'utiliser D86 (which comes with A86) car il vous permet de taper des instructions 8086 de manière interactive afin que vous puissiez voir ce qui se passe à tous les registres et les drapeaux après chaque instruction.

Ce code (comme d'autres l'ont souligné):

MOV AL, F2h 
ADD AL, 20h 

n'affecte que les drapeaux et le registre AL. Aucun autre registre à huit bits ne sera affecté (même AH). AX changera bien car il est composé de AH et AL, donc si AH était 42h:

Code   AL AH  AX 
MOV AL,F2h F2 42 42f2 
ADD AL,20h 12 42 4212 

Le résultat de cette opération particulière établira le drapeau de transport et le drapeau de parité et effacer le trop-plein, zéro, signe et des drapeaux de transport auxiliaires. Vous pouvez penser que l'indicateur de débordement doit être défini, mais l'indicateur de débordement traite les valeurs comme des valeurs signées (dans ce cas -14 et 32) et l'ajout ne dépasse pas la valeur maximale signée (127).L'indicateur de retenue traite les valeurs comme des valeurs non signées (242 et 32) et l'addition dépasse la valeur non signée maximale: 242 + 32 = 274 qui est supérieure à 255, de sorte que la retenue est définie.