如何在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
相关产品推荐
相关产品推荐

