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

如何将十进制数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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:27:35