2016-04-27 4 views
3

После каждых 5 элементов следующий элемент должен быть напечатан на следующей строке. Мне не разрешено использовать строку пустых пространств для пространства между элементами. Я пытался использовать GoToXy, но у меня проблемы. Все элементы в первой строке имеют 5 пробелов между ними, начиная со второй строки, все элементы должны быть выровнены с надписью над ней.Как выводить все элементы в массиве в следующем выпуске?

Желаемая Выход:

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

Выход из моего кода: (все печатается на одной линии с 5 промежутками между ними.)

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

Мой код:

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

Какой компилятор вы используете? –

+0

MASM в Visual Studio 2015. –

+1

Вам не разрешено использовать пустую строку? Как насчет вкладок (ascii 9) и новой строки (ascii 13 + ascii 10)? –

ответ

4

Значки табуляции автоматически выровнены на большинстве консолей, поэтому печать символа табуляции (ascii 9) автоматически выровнётся с 8-символьным форматом столбца.

Символ табуляции должен быть напечатан перед печатью следующего десятичного значения из массива, когда dl равно 1, 2 или 3 в вашей петле L1. Не печатая вкладку, когда dl равно 0, первый столбец будет оставаться левым.

dl Когда это 4 в вашем L1 цикле (4 представляет пятое значение для каждой строки), выход новой строки (CRLF) после печати, а затем сбросить dl 0 для следующего 5. Сброс dl позволяет использовать простые сравнения , так как у вас есть только 5 возможных значений.

GoToXy, кажется, вмешивается в ваш CrlF, хотя без кода для любого из них я не могу сказать, каким образом. Используя подход, который я изложил, вам совсем не нужно GoToXy, но вам все равно понадобится CrlF, поэтому я предлагаю вам убедиться, что он действительно работает.