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

如何在DOS汇编中打印int 21h ah=0Ah读取的字符数?

打印输入字符数量的汇编代码修改方案

你用int 21h的0Ah功能读取输入时,用户实际输入的字符数会存在charsInput变量里(就是代码里maxkeys后面那个db ?)。要打印这个数字,只要把它转成ASCII码,再调用DOS的输出功能就行。

以下是修改后的完整代码:

.model small
.stack 100h
.data
    message    db "Type a word: ", '$'
    countMsg   db 0Dh, 0Ah, "Number of characters entered: ", '$'

    keyboardArea label byte
    maxkeys    db 5
    charsInput db ?
    buffer     db 32 dup(0)
.code
    main proc
        mov ax, @data
        mov ds, ax

        ; 显示输入提示
        mov dx, offset message
        mov ah, 9h
        int 21h

        ; 读取用户输入
        mov dx, offset keyboardArea
        mov ah, 0Ah
        int 21h

        ; 显示字符数量提示行
        mov dx, offset countMsg
        mov ah, 9h
        int 21h

        ; 把输入字符数转成ASCII并打印
        mov al, charsInput
        add al, 30h  ; 数字0-9的ASCII是48-57,对应十六进制30h-39h,加30h就能转成字符
        mov dl, al
        mov ah, 02h  ; DOS功能02h:输出DL里的字符
        int 21h

        ; 退出程序
        mov ah, 4Ch
        int 21h
    main endp
end

核心修改点:

  • 在数据段新增countMsg字符串,其中0Dh, 0Ah是回车换行符,让输出和输入提示分开,排版更清晰。
  • 读取完输入后,先调用int 21h 9h显示字符数量的提示文本。
  • 取出charsInput中的数值,加上30h转换为对应的ASCII字符(比如输入4个字符,charsInput的值是4,加30h后得到34h,对应ASCII的'4')。
  • 调用int 21h的02h功能,将转换后的字符输出到屏幕。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:39:20