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
相关产品推荐
相关产品推荐

