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

汇编程序循环提前退出,D数组未按要求填充问题排查

汇编代码修复:D数组未正确填充奇数索引元素

问题分析

你的代码执行完偶数索引元素(1、3、5)的拷贝后,执行mov si, 1就直接触发退出指令了,完全没处理奇数索引的元素(2、4)。原代码的循环逻辑混乱,用cx控制循环次数的方式和si的步长逻辑冲突,而且没有为奇数索引的拷贝设置循环流程。

修复后的代码

assume ds:data,cs:code

data segment
  S db 1,2,3,4,5
  len equ $-S 
  D db len dup(0) 
data ends

code segment
start:
  mov ax, data
  mov ds, ax
  mov si, 0 
  mov di, 0 

; 处理偶数索引元素(si从0开始,步长2)
copy_even:
  cmp si, len
  jge copy_odd       ; si超过数组长度,跳转到处理奇数索引的循环
  mov al, S[si]
  mov D[di], al
  inc di
  add si, 2
  jmp copy_even

; 处理奇数索引元素(si从1开始,步长2)
copy_odd:
  mov si, 1
copy_odd_loop:
  cmp si, len
  jge exit_program   ; si超过数组长度,跳转到退出
  mov al, S[si]
  mov D[di], al
  inc di
  add si, 2
  jmp copy_odd_loop

exit_program:
  mov ax, 4C00h
  int 21h
code ends
end start

关键修改说明

  • 拆分出两个独立循环:copy_even专门处理偶数索引,copy_odd_loop处理奇数索引,逻辑更清晰
  • 用si和len的比较直接控制循环终止条件,去掉冗余的cx判断,避免逻辑冲突
  • 处理完偶数索引后,自动进入奇数索引的循环,执行完所有元素拷贝后才触发程序退出

这样运行后,D数组就能得到预期的1,3,5,2,4。

内容的提问来源于stack exchange,提问作者luisa2002

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 06:05:10