2016-04-27 1 views
3

Après tous les 5 éléments, l'élément suivant doit être imprimé sur la ligne suivante. Je ne suis pas autorisé à utiliser une chaîne d'espaces vides pour l'espace entre les éléments. J'ai essayé GoToXy, mais j'ai des problèmes. Tous les éléments de la première rangée ont 5 espaces entre eux, à partir de la deuxième rangée, tous les éléments doivent être alignés sur celui qui se trouve au-dessus.Comment afficher tous les éléments d'un tableau dans la sortie suivante?

sortie souhaitée:

94  2  67  57  7 
40  58 48  73  94 
16  77 88  16 

sortie de mon code: (Tout est imprimé sur la même ligne avec 5 espaces entre eux.)

94  2  67  57  7  40  58 48  73  94  16 77 88  16 

Mon code est le suivant:

INCLUDE Irvine32.inc 

.data 
count = 14 
array WORD count DUP(?) 

.code 
main PROC 

    push OFFSET array 
    push COUNT 
    call ArrayFill 
    call DisplayArray 

    exit 

main ENDP 

;----------------------------------------------------------------------------------------- 
ArrayFill PROC 
    push ebp 
    mov ebp,esp 
    pushad    ; save registers 
    mov esi,[ebp+12] ; offset of array 
    mov ecx,[ebp+8]  ; array size 
    cmp ecx,0   ; ECX == 0? 
    je L2    ; yes: skip over loop 

L1: 
    mov eax, 100    
    call RandomRange ; from the link library 
    mov [esi],ax 
    add esi,TYPE WORD 
    loop L1 

L2: popad    ; restore registers 
    pop ebp 
    ret 8    ; clean up the stack 
ArrayFill ENDP 

;--------------------------------------------------------------------------------------- 
DisplayArray PROC 

mov eax, 0 
mov esi, 0 
mov ecx, COUNT 
mov dh, 0 
call GoToXy 
mov dl, 5 

L1: 
    mov ax, array[esi * TYPE array] 
    call WriteDec 
    call GoToXy 
    add dl, 5 
    inc esi 
    loop L1 
    call CrlF 
ret 
DisplayArray ENDP 
END main 
+0

Quel compilateur utilisez-vous? –

+0

MASM dans Visual Studio 2015. –

+1

Vous n'êtes pas autorisé à utiliser une série d'espaces vides? Qu'en est-il des onglets (ascii 9) et newline (ascii 13 + ascii 10)? –

Répondre

4

Les caractères de tabulation s'alignent automatiquement sur la plupart des consoles. L'impression d'un caractère de tabulation (ascii 9) s'aligne automatiquement sur un format de colonne de 8 caractères.

Un caractère de tabulation doit être imprimé avant d'imprimer la valeur décimale suivante du tableau lorsque dl est égal à 1, 2 ou 3 dans votre boucle L1. En n'imprimant pas un onglet lorsque dl est 0, la première colonne reste à gauche.

Lorsque dl est 4 dans votre boucle L1 (4 représente la cinquième valeur pour chaque ligne), la sortie d'un saut de ligne (CRLF) après l'impression, puis remis à zéro dl-0 pour la prochaine 5. Remise à zéro dl vous permet d'utiliser des comparaisons simples , puisque vous avez seulement 5 valeurs possibles à vérifier.

GoToXy semble interférer avec votre CrlF, bien que sans le code pour l'un de ces deux, je ne sais pas de quelle façon. En utilisant l'approche que j'ai décrite, vous n'aurez pas du tout besoin de GoToXy, mais vous aurez toujours besoin de CrlF, donc je vous suggère de vérifier que cela fonctionne réellement.