gpt4 book ai didi

assembly - 如何在下面的输出中输出数组中的所有元素?

转载 作者:行者123 更新时间:2023-12-03 06:30:04 25 4
gpt4 key购买 nike

每 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

最佳答案

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

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

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

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

关于assembly - 如何在下面的输出中输出数组中的所有元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36898381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com