2011-11-01 16 views
1

Je suis en train de résoudre certains problèmes d'adressage indirect et je ne suis pas sûr de savoir comment compter correctement les octets. On nous donne ce code:Adressage indirect du langage d'assemblage

.data 
v1 db 9,7,5,3,1 
v2 dw 0 
v3 dw -1 
v4 db '$' 

mov dx,offset v2 
mov ah,9 
int 21h 

La question demande combien d'octets auront été écrites sur le périphérique de sortie standard après ces instructions ont été exécutées et la réponse est 4.

Pour ce problème, je mets vers le haut comme ceci:

offset 0 1 2 3 4 5 6 7 8 9 
data 09 07 05 03 01 00 00 FF FF 24 

Nous allons 5 en dx, écrit deux octets 00 05. Nous avons ensuite le code dos pour l'écrire, de sorte que notre sortie écrit les deux octets faisant quatre? Corrigez-moi si ma logique est fausse.

Répondre

6

La fonction DOS 9 écrit à partir du décalage dans DX jusqu'à atteindre $. Vous avez chargé le décalage de V2 dans DX. Vous avez défini V2 et V3 comme deux octets chacun (dont aucun ne contiendra un "$"), et ceux-ci sont suivis de V4 (contenant le $). Par conséquent, il écrit les quatre octets de V2 et V3, puis s'arrête.

Edit: Je dois ajouter que, contrairement à la question du titre, aucun du code que vous avez montré ne fait aucune indirecte d'adressage (si la fonction DOS 9 sans aucun doute ne utilisation indirecte d'adressage, la lecture de l'adresse chargée dans dx) .

+0

Merci encore pour votre aide. – raphnguyen