You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MASM程序无法显示负数计数,请求代码错误排查

MASM数组负数计数问题排查

作业要求

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

你的代码存在几个关键错误,导致负数计数功能失效,逐一说明:

  1. 数组类型声明错误
    你用SWORD声明数组,但作业要求是32位整数,应使用DWORD。SWORD是16位有符号整数,而你用Random32生成32位随机数写入数组,会导致内存越界,甚至破坏后续变量(比如count可能被意外覆盖)。

  2. 第二个循环初始化完全错误

  • 你将eax设为数组偏移量,但后续未使用该寄存器;
  • 把esi赋值为lengthof myArray(即50),这不是数组的起始地址,正确做法是让esi指向数组开头,同时将ecx设为数组长度——因为loop指令依赖ecx作为循环计数器。
  1. 计数逻辑语法错误
    当判断元素为负数时,你写了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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 20:45:34