回 帖 发 新 帖 刷新版面

主题:最简单的问题"数据显示"

如果我已将16H送入AX
       MOV AX,16H
       如何能把AX中的数据在屏幕上显示出来?

回复列表 (共2个回复)

沙发

print    proc ;提供多种进制的输出
        ;ax 存放要输出的数
        ;cx 存放进制形式 (2 <= 进制 <= 35)
    cmp    cx, 2    
    jl    _error_
    cmp    cx, 35
    ja    _error_
    push    bx    ;保存 bx
    push    dx    ;...
    sub    sp, 16    ;16 (2 * 8)个字节的临时变量
    mov    bx, sp  ;bx 指向变量地址
    xor    dx, dx
_loop:
    cmp    ax, 0
    jne    _next
    cmp    dx, 0
    je    _print
_next:
    div    cx
    cmp    dx, 9        ;比较余数是否大于 9
    ja    _than_nine
    add    dl, '0'
    jmp    _save_dl
_than_nine:
    add    dl, 'A' - 0AH    ;大于 9 的数转换处理
_save_dl:
    mov    ss:[bx], dl
    inc    bx
    cwd
    jmp    _loop
_print:
    dec    bx
_print_next:
    cmp    bx, sp
    jl    _end
    mov    dl, ss:[bx]
    mov    ah, 2
    int    21H
    dec    bx
    jmp    _print_next
_error_:
    xor    ax, ax    ;return false
    ret
_end:
    add    sp, 16    ;恢复堆栈
    pop    dx
    pop    bx
    
    mov    ax, 1    ;return true
    ret
print    endp        

板凳

多谢高人指点,但我更想了解的是:INT 21H调用AH 2的时候,只能显示的是DL中的字符,这时候有没有办法将AX中的数据直接转换成字符输出.比如说:
MOV AX 31H
这时候有没有办法直接将31H显示出来

我来回复

您尚未登录,请登录后再回复。点此登录或注册