这是我的 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
我让它做所有的事情,除了显示负数的计数。如果有人能告诉我哪里错了
首先,计算计数的循环以错误的方式设置寄存器。而不是:
mov eax, offset myArray mov esi, lengthof myArray
你需要:
mov esi, offset myArray
mov ecx, lengthof myArray
其次,
DWORD count
不是将计数加1的正确指令。为此使用inc count
。
您可以而且应该将所有内容组合成一个循环:
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