如何在MASM中显示计数?

问题描述 投票:0回答:1

这是我的 MASM 作业代码。任务是:

编写执行以下操作的应用程序:

  • 声明一个包含 50 个未初始化值元素的 32 位整数数组
  • 用 50 个随机整数填充 32 位数组
  • 遍历数组,并显示每个值,并统计负值的个数
  • 最终循环结束后,显示计数

我让它做所有的事情,除了显示负数的计数。如果有人能告诉我哪里错了,那将非常有帮助。我已经为此工作了一段时间。

INCLUDE Irvine32.inc
.data
myArray SWORD 50 DUP(?)
count DWORD 0
.code
main proc
call randomize
mov esi, offset myArray
mov ecx, lengthof myArray
L1: 
    call Random32
    call WriteInt
    call Crlf
    mov [esi], eax
    add esi, 4
    loop L1

    mov eax, offset myArray
    mov esi, lengthof myArray

L2:
    cmp dword ptr[esi], 0
    jge L3
    DWORD count
L3:
add esi, 4
loop L2

mov eax, count
call WriteDec
call Crlf

    exit
main ENDP
END main
assembly x86 numbers masm irvine32
1个回答
0
投票

我让它做所有的事情,除了显示负数的计数。如果有人能告诉我哪里错了

首先,计算计数的循环以错误的方式设置寄存器。而不是:

mov eax, offset myArray
mov esi, lengthof myArray

你需要:

mov esi, offset myArray
mov ecx, lengthof myArray

其次,

DWORD count
不是将计数加1的正确指令。为此使用
inc count

你根本不需要 2 个循环

您可以而且应该将所有内容组合成一个循环:

  call Randomize

  mov  edi, offset myArray
  mov  esi, lengthof myArray
NextValue:
  call Random32         ; -> EAX
  stosd
  test eax, eax
  jns  IsPositive
  inc  count
IsPositive:
  call WriteInt
  call Crlf
  dec  esi
  jnz  NextValue

  mov  eax, count
  call WriteDec
  call Crlf
© www.soinside.com 2019 - 2024. All rights reserved.