2016-05-23 1 views
3

Je suis nouveau dans l'assemblage, j'utilise EMU8086éléments d'impression de tableau dans l'ensemble

Je tentais d'imprimer deux éléments d'un tableau, mais je ne pouvais pas imprimer le deuxième élément

Voici mon code:

.MODEL SMALL 

.STACK 100H 

.DATA 
MSG DB 'HI','GOOD$' 

.CODE 

MAIN PROC 

MOV AX,@DATA 
MOV DS,AX 

MOV AH,2 
MOV DL,MSG 
INT 21H 

MOV AH,2 
MOV DL,MSG+1 
INT 21H 

MOV AH,4CH 
INT 21H 

MAIN ENDP 

END MAIN 

à la sortie salut est imprimé, bon n'est pas imprimé. s'il vous plaît corrigez-moi comment peut imprimer le deuxième élément.

Merci à l'avance

+1

Vous pouvez faire défiler l'ensemble du tableau et imprimer la valeur du décalage. Vérifiez ce lien: [link] (http://stackoverflow.com/questions/35709437/printing-array-getting-strange-output-emu8086) – Nabid

+6

1) 'int 21h/ah = 02h' imprime des caractères individuels, pour imprimer une chaîne, vous utiliseriez 'int 21h/ah = 09h'. 2) Toutes les chaînes que vous imprimez avec 'int 21h/ah = 09h' doivent être terminées par '' $ ''; actuellement seul '' GOOD'' est '' $ '-terminated. 3) "GOOD" commence à "MSG + 2", pas "MSG + 1" (et si vous ajoutez un "$" '-terminator à" HI "," GOOD "commence à' MSG + 3'). Cela simplifierait les choses si vous créiez un autre tableau contenant l'adresse de chaque chaîne, que vous pourriez ensuite traiter en boucle. – Michael

Répondre

2

Si tout ce que vous voulez faire est d'imprimer « Higood » puis écrire:

MOV AH,2 
MOV DL,MSG 
INT 21H 
MOV DL,MSG+1 
INT 21H 
MOV DL,MSG+2 
INT 21H 
MOV DL,MSG+3 
INT 21H 
MOV DL,MSG+4 
INT 21H 
MOV DL,MSG+5 
INT 21H 

Une bien meilleure approche est de « $ » - mettre fin à la fois des chaînes comme MSG DB 'HI$','GOOD$' puis utilisez la fonction de sortie de chaîne 09h:

MSG DB 'HI$','GOOD$' 
... 
mov ah, 09h 
mov dx, offset MSG 
int 21h 
mov dx, offset MSG+3 
int 21h 

Encore mieux est d'attribuer des étiquettes distinctes à vos chaînes:

MSG1 DB 'HI$' 
MSG2 DB 'GOOD$' 
... 
mov ah, 09h 
mov dx, offset MSG1 
int 21h 
mov dx, offset MSG2 
int 21h