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

x86汇编实现数字自增时输出为爱心符号要如何排查?

问题原因

代码核心错误是混淆了内存地址和内存中存储的数值,同时对DOS中断int 21h的ah=02h功能参数理解有误:

  • int 21h的ah=02h为字符输出功能,要求待输出的ASCII码直接存放在DL寄存器中,不会从DX指向的内存地址读取内容
  • 你使用lea dx,reservationID取到的是reservationID变量的内存偏移地址,不是这个变量里存储的数值0
  • 给内存地址加30h后,最终DL寄存器里的低8位恰好对应爱心符号的ASCII码,因此输出爱心而非预期数字。

修复方案

如果仅需要输出0-9范围的单个数字,修改后代码如下:

reservationID dw 0 

.code

main proc
     mov ax,@data
     mov ds,ax

     mov ah,02h
     ; 读取reservationID存储的数值到DX
     mov dx, reservationID
     ; 数值转ASCII码
     add dl, 30h  
     int 21h

     ; 自增逻辑直接操作变量即可
     inc reservationID

如果需要输出大于9的多位数,还需要补充将数值按位拆分的处理逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:48:03