【发布时间】:2020-04-17 04:39:21
【问题描述】:
我的任务是在 Visual Studio 2019 (Windows) 中编写一个 MASM 应用程序,该应用程序执行以下操作:用 50 个随机整数填充一个 32 位数组...循环遍历数组并显示每个值,并计算负值。最终循环结束后,显示计数。
到目前为止,这就是我的代码:
INCLUDE Irvine32.inc
.data
array1 SWORD 50 DUP(0)
count SWORD 0
.code
main PROC
mov ecx,50
mov esi, OFFSET array1
mov esi,eax
mov ebx,0
eloop:
add esi,2
call Random32
call WriteInt
mov esi,eax
loop eloop
exit
main ENDP
END main
到目前为止,它似乎打印了 50 个整数,负数和正数。我仍然遇到的问题是,我不确定如何将每个数字打印在不同的行上,并且我不确定如何在最后显示负数的计数。请协助。谢谢!
【问题讨论】:
-
一开始你设置了两次esi。除了 WriteInt,您还有其他可用的子例程吗?像 WriteLnInt 或 WriteChar 之类的东西?对于计数,您需要条件跳转(跳转到更少/更大/负...)并在跳转的一个分支中增加一个寄存器或内存位置。
-
@Sebastian:是的,Irvine32 有一个名为
Crlf的函数,它可以满足您对名称的期望。 csc.csudh.edu/mmccullough/asm/help/source/irvinelib/crlf.htm 还有math.uaa.alaska.edu/~afkjm/cs221/handouts/procedures.pdf 有一个函数列表。 -
@Sebastian 抱歉 - 我是 Assembly 的新手……我不确定这些代码行会是什么样子?
-
@PeterCordes 如果我要“打电话给 Crlf”.. 我会在哪里打电话?就在我退出之前?该功能是否涉及更多内容?
-
很确定 Irvine32 具有打印带减号的有符号整数的功能。用那个。否则,请打印
'-'字符,然后将绝对值 (neg eax) 打印为无符号。在如何实现它的细节之前考虑需要单独发生的逻辑。任何编程语言都一样。 (虽然公平地说,您必须知道哪些步骤甚至可以作为一个步骤进行;例如,字符串连接是您可以在某些高级语言中使用+而不是 asm 来执行的操作。)