2017-09-23 7 views
1

Cela fait un moment que j'ai cessé de travailler avec des langages de code et depuis quelques jours à l'école j'ai commencé à assembler, je veux commencer à comprendre une logique derrière le fonctionnement de certaines lignes de code.
En fait, ce que j'ai essayé est une simple opération ADD entre deux variables. J'utilise emu8086 pour émuler mon code et je vais vous montrer maintenant pourquoi je ne peux pas le comprendre.AJOUTER une opération dans l'assemblage

Le code est le suivant:

stack segment 
    dw 128 dup(0) 
ends 

data segment 

    x DB 3 
    y DB 5 
    r DB 0 

ends 

code segment 

    mov ah,x 
    mov al,y 
    add ah,al 
    mov r,ah 

ends 

Maintenant, je viens initialisés trois variables, deux d'entre eux sur 8 bits et je veux ajouter la première à la seconde. Le problème est le suivant: quand je émule le code et je vais voir ce qui se passe étape par étape, la première étape devrait être AH=03, mais il semble sortir CDh (et ce n'est pas mon x var) et je Je n'arrive pas à comprendre pourquoi. Même chose pour AL.

Je veux dire, pourquoi ai-je écrit d'autres choses dans mes registres AH et AL au lieu des variables x et y?

+7

Vous avez probablement oublié de configurer 'DS' pour pointer vers votre segment de données. – Jester

+0

Désolé de demander, mais, comment puis-je faire cela? –

Répondre

4

Toutes vos instructions mov adressent des variables en mémoire référencées par le registre de segment DS. Vous devez le configurer au préalable! Ajoutez simplement ces quelques lignes:

code segment 
    mov ax, @data <- Add this 
    mov ds, ax  <- Add this 
    mov ah, x 
    mov al, y 
    add ah, al 
    mov r, ah 
ends 
+0

Ouais, maintenant ça marche. Merci beaucoup! –