如何将十进制数26加载到CX寄存器?两位十进制数加载问题求助
解决两位十进制数加载与打印的问题
嘿,我懂你现在的困扰——单个数字转ASCII打印很顺手,但碰到两位数字就不知道该怎么拆分解决了对吧?别担心,咱们一步步来搞定它!
核心思路:拆分十位和个位
两位十进制数(比如26)本质是十位数字×10 + 个位数字,所以我们可以用除法把这两个部分分开:
- 十位数字:用原数除以10,得到的商就是十位
- 个位数字:除以10后剩下的余数就是个位
之后再分别给这两个数字加上48('0'的ASCII值)转成字符,最后依次打印就行。
修改后的完整代码示例
.model small .data .code main proc mov ax, 26 ; 把两位十进制数26加载到AX寄存器 mov bl, 10 ; 除数设为10,用于拆分十位和个位 div bl ; AX ÷ BL:商存在AL(十位2),余数存在AH(个位6) ; 先打印十位数字 mov dl, al ; 把十位数字从AL移到DL add dl, 48 ; 转成ASCII字符(2+48='2') mov ah, 2h int 21h ; 打印十位 ; 再打印个位数字 mov dl, ah ; 把个位数字从AH移到DL add dl, 48 ; 转成ASCII字符(6+48='6') mov ah, 2h int 21h ; 打印个位 ; 程序结束退出DOS mov ah, 4ch int 21h main endp end main
关键步骤解释
div bl:当除数是8位寄存器BL时,默认被除数是16位的AX。执行后,商存入AL,余数存入AH,刚好对应十位和个位。- 两次调用
int 21h的2h功能:这个功能负责打印DL寄存器里的ASCII字符,所以我们需要把转好的十位、个位依次放入DL再调用中断。 - 最后加的
mov ah,4ch; int21h是标准的DOS程序退出方式,避免程序执行完后出现异常。
拓展:适配任意0-99的两位数字
只要把mov ax,26里的26换成其他0到99之间的十进制数,这个代码都能正常拆分并打印哦~比如换成58,就会输出'58'。
内容的提问来源于stack exchange,提问作者samolusola
相关产品推荐
相关产品推荐

