MASM程序无法显示负数计数,请求代码错误排查
MASM数组负数计数问题排查
作业要求
- 声明一个包含50个未初始化元素的32位整数数组
- 用50个随机整数填充该32位数组
- 遍历数组,显示每个值并统计负数的数量
- 最终循环结束后显示统计结果
你的代码存在几个关键错误,导致负数计数功能失效,逐一说明:
数组类型声明错误
你用SWORD声明数组,但作业要求是32位整数,应使用DWORD。SWORD是16位有符号整数,而你用Random32生成32位随机数写入数组,会导致内存越界,甚至破坏后续变量(比如count可能被意外覆盖)。第二个循环初始化完全错误
- 你将
eax设为数组偏移量,但后续未使用该寄存器; - 把
esi赋值为lengthof myArray(即50),这不是数组的起始地址,正确做法是让esi指向数组开头,同时将ecx设为数组长度——因为loop指令依赖ecx作为循环计数器。
- 计数逻辑语法错误
当判断元素为负数时,你写了DWORD count,这是无效汇编指令,根本不会实现计数递增,正确指令应为inc count。
修正后的代码
INCLUDE Irvine32.inc .data ; 修正为32位整数数组 myArray DWORD 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 esi, offset myArray mov ecx, lengthof myArray L2: cmp dword ptr[esi], 0 jge L3 ; 递增负数计数 inc count L3: add esi, 4 loop L2 mov eax, count call WriteDec call Crlf exit main ENDP END main
内容的提问来源于stack exchange,提问作者billyjoe
相关产品推荐
相关产品推荐

