TASM代码实现同一输入数字增减:递减功能异常求助
TASM数字递减功能修正方案
问题根源
你的代码存在两个核心问题:
- 处理递增时直接修改了存储原数字的
BL寄存器,后续虽尝试用mov bl,al恢复,但递减后未将数字转回ASCII码,导致输出的是不可见控制字符而非数字字符。 - 未保留原输入数字的独立副本,寄存器复用逻辑混乱,看似是对递增后的值做递减,实际操作的是原数字但未转码。
修正后的代码
.model small .stack 200h .data mesaj1 db 13,10, "Introduceti un numar: $" mesaj2 db 13,10, "Numarul incrementat este: $" mesaj3 db 13,10, "Numarul decrementat este: $" .code main proc mov ax, @data mov ds, ax ; 显示输入提示 mov dx, offset mesaj1 mov ah,09h int 21h ; 读取输入的ASCII字符 mov ah,01h int 21h ; 转换为十进制数字(ASCII码减48) sub al,48 mov bl,al ; BL永久保存原输入数字 mov cl,al ; CL用于处理递增操作 ; 处理递增并输出 inc cl ; 原数字+1 add cl,48 ; 转回ASCII码 mov dx, offset mesaj2 mov ah,09h int 21h mov dl,cl mov ah,02h int 21h ; 处理递减并输出(直接使用BL中的原数字) dec bl ; 原数字-1 add bl,48 ; 转回ASCII码 mov dx, offset mesaj3 mov ah,09h int 21h mov dl,bl mov ah,02h int 21h ; 退出程序 mov ah, 4ch int 21h main endp end main
关键调整说明
- 用
BL专门保存原输入的数字,CL单独处理递增操作,彻底避免原数据被覆盖。 - 无论递增还是递减,运算后必须加48将数字转回ASCII码,否则DOS中断
02h会输出ASCII对应的控制字符而非数字。 - 简化寄存器复用逻辑,确保每个步骤的数据源清晰,不会出现混淆。
内容的提问来源于stack exchange,提问作者noirangel110
相关产品推荐
相关产品推荐

