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

x86汇编实现冒泡排序程序输入后卡住故障排查求助

代码问题点梳理

  • 核心死循环原因1:INPUT输入循环使用LOOP指令执行完毕后,CX寄存器的值已经被递减为0。输入完成后你直接执行MOV BX,CX,会把BX赋值为0,紧接着执行DEC BX会让BX变为0FFFFH,后续冒泡排序的外层循环NXTPASS会拿到一个超大的循环计数,直接进入死循环,这就是程序卡住的根本原因。你应该从存储元素个数的变量N中取值赋值给BX,而不是用已经清零的CX。
  • 核心死循环原因2:排序完成后输出结果的环节,你再次执行MOV BX,CX,此时排序结束后CX的值已经是0,赋值给BX后执行DEC BX又会变为0FFFFH,输出环节也会进入死循环。这里也应该从变量N中读取数组长度赋值给BX。
  • 冗余逻辑:.STARTUP伪指令已经自动完成了DS段寄存器的初始化,你在输入完成后额外添加的MOV AX,@DATA、MOV DS,AX属于冗余代码,虽然不致命但属于多余操作。
  • 输入输出逻辑不匹配:你在输入元素时添加了大于09H就减07H的逻辑,这是适配十六进制输入的转换逻辑,但你输出时直接给数值加'0'转字符,仅支持0-9的十进制数输出,二者逻辑不匹配。如果你的程序定位为仅输入0-9的十进制数,可以直接删掉这段十六进制转换逻辑,避免输入非数字字符时出现异常输出。

核心修复代码

修改三处赋值逻辑即可解决卡死问题:

  1. 输入完成后给BX赋值的代码替换为:
MOV BL,N
MOV BH,0
DEC BX
  1. 输出前给BX赋值的代码替换为:
MOV BL,N
MOV BH,0
MOV SI,00H
  1. 删除冗余的MOV AX,@DATA、MOV DS,AX两行代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:15:04