如何在以下输出中输出数组中的所有元素?

How to output all the elements in an array in the following output?

在每 5 个元素之后,应该在下一行打印下一个元素。我不允许在元素之间的 space 中使用一串空的 space。我尝试使用 GoToXy,但遇到了问题。第一行中的所有元素之间有 5 spaces,从第二行开始,所有元素都需要与其上方的元素对齐。

期望输出:

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

我的代码输出: (所有内容都打印在同一行上,它们之间有 5 spaces。)

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

制表符在大多数控制台上自动对齐,因此打印制表符 (ascii 9) 将自动对齐到 8 字符列格式。

L1 循环中 dl 等于 1、2 或 3 时,应在打印数组中的下一个十进制值之前打印制表符。当 dl 为 0 时不打印制表符,第一列将保持左对齐。

当你的L1循环中dl为4时(4代表每行的第五个值),打印后输出一个换行符(crlf),然后将dl重置为0对于接下来的 5 个。重置 dl 允许您使用简单的比较,因为您只有 5 个可能的值要检查。

GoToXy 似乎在干扰您的 CrlF,尽管没有其中任何一个的代码我无法判断是什么方式。使用我概述的方法,您根本不需要 GoToXy,但您仍然需要 CrlF,因此我建议您验证它是否确实有效。