【问题标题】:How to print outputs on different lines and display a count in MASM如何在不同的行上打印输出并在 MASM 中显示计数
【发布时间】: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 来执行的操作。)

标签: assembly masm irvine32


【解决方案1】:
INCLUDE Irvine32.inc
.data
myArray DWORD ?
.code
main PROC
    call Randomize
    mov myArray,EAX
    mov ECX, 50
    jmp L1
L1: 
    call Random32
    
    call WriteInt
    loop L1
    
    
    exit
main ENDP
END main

【讨论】:

  • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助,质量更高,更有可能吸引投票。
猜你喜欢
  • 1970-01-01
  • 2011-05-22
  • 1970-01-01
  • 2021-07-10
  • 1970-01-01
  • 2020-05-16
  • 1970-01-01
  • 2014-06-09
  • 2013-05-31
相关资源
最近更新 更多