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

汇编语言中如何打印Push/Pop操作后的16位寄存器AX的值?

如何在DOS汇编中打印16位寄存器AX的数值

你目前掌握的INT 21H 02H功能只能输出单个ASCII字符,但AX中的数值是二进制/十进制整数,必须先转换成对应的ASCII字符序列才能打印。以你的例子AX=60为例,需要把60拆成'6'和'0'两个ASCII字符,再分别输出。

方法1:针对AX=60的简易打印(两位数场景)

直接分解十位和个位,转成ASCII后逐个输出:

MOV AX, 60       ; 你的AX当前值为60
MOV BX, AX       ; 保存AX的值,避免后续操作覆盖

; 分解十位:60 ÷ 10 = 6(商),余数0
MOV AX, BX
MOV CX, 10
XOR DX, DX       ; 16位除法需要DX清零,被除数为DX:AX
DIV CX           ; AX=6(十位),DX=0(个位)

; 打印十位数字'6'
MOV DL, AL
ADD DL, '0'      ; 数字0-9转ASCII,等价于ADD DL, 30H
MOV AH, 02H
INT 21H

; 打印个位数字'0'
MOV DL, DL       ; DX中是余数0,直接取DL
ADD DL, '0'
MOV AH, 02H
INT 21H

方法2:通用十进制打印函数(支持1-5位16位数值,最大65535)

如果需要打印任意16位十进制数,可以写一个循环分解每一位,用栈反转数字顺序(除法得到的是低位到高位,栈可实现高位到低位打印):

; 函数:打印AX中的十进制数值,依赖INT 21H 02H功能
PRINT_AX_DEC:
    PUSH AX       ; 保存用到的寄存器
    PUSH BX
    PUSH CX
    PUSH DX

    MOV CX, 0     ; 记录数字位数
    MOV BX, 10    ; 除数为10,用于分解十进制位

PRINT_LOOP:
    XOR DX, DX
    DIV BX        ; AX=商,DX=当前位的数字(余数)
    PUSH DX       ; 余数压栈,后续弹出时顺序反转
    INC CX
    CMP AX, 0     ; 商为0时停止分解
    JNE PRINT_LOOP

PRINT_DIGITS:
    POP DX        ; 从栈中弹出数字(从高位到低位)
    ADD DL, '0'
    MOV AH, 02H
    INT 21H
    LOOP PRINT_DIGITS ; 循环打印所有位

    POP DX        ; 恢复寄存器
    POP CX
    POP BX
    POP AX
    RET

调用示例:

MOV AX, 60
CALL PRINT_AX_DEC ; 输出60

方法3:打印十六进制数值(汇编中常用)

如果需要打印AX的十六进制值(比如60的十六进制是3C),可以用类似思路,除数改为16,同时处理10-15到'A'-'F'的转换:

; 函数:打印AX中的4位十六进制数值
PRINT_AX_HEX:
    PUSH AX
    PUSH CX
    PUSH DX

    MOV CX, 4     ; 16位对应4个十六进制位

PRINT_HEX_LOOP:
    ROL AX, 4     ; 把最高4位移到最低位
    MOV DL, AL
    AND DL, 0FH   ; 提取低4位
    ADD DL, '0'
    CMP DL, '9'
    JBE PRINT_HEX_SKIP
    ADD DL, 7     ; 10-15转成'A'-'F'('A'-'9'的ASCII差值为7)
PRINT_HEX_SKIP:
    MOV AH, 02H
    INT 21H
    LOOP PRINT_HEX_LOOP

    POP DX
    POP CX
    POP AX
    RET

调用示例:

MOV AX, 60
CALL PRINT_AX_HEX ; 输出3C

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 16:36:11