如何在以下输出中输出数组中的所有元素?
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
,因此我建议您验证它是否确实有效。
在每 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
,因此我建议您验证它是否确实有效。