首页 > 代码库 > DOS功能调用——单个字符及字符串的输入输出

DOS功能调用——单个字符及字符串的输入输出

DOS系统功能调用步骤:
    1. AH <- 功能号
    2.指定寄存器放入该功能所要求的入口参数
    3.执行int 21H
    4.分析出口参数


单字符输入输出

    01h键盘输入            AL=输入字符
    02h显示器输出            DL=输出字符
    07h直接控制台输入(无回显)    AL=输入字符
    08键盘输入(无回显)        AL=输入字符
======================汇编例子======================
data segment
s db 1
data ends
prog segment
    main proc far
    assume cs:prog, ds:data
start:
    mov ax,data
    mov ds,ax

    mov ah,01h    
    int 21h                   ;获取输入的单个字符

    mov bx,offset s
    mov byte ptr ds:[bx],al    ;必须是bx,寄存器间接寻址,把获取的字符存到s


    mov dl,0ah
    mov ah,02h
    int 21h                    ;输出换行符

    mov dl,s
    mov ah,02h
    int 21h                    ;输出刚才获取到的字符

    mov ax,4c00h
    int 21h
    main endp
prog ends
end start


字符串输入输出
    
    09h显示字符串                    DS:DX=字符缓冲区首地址
    0ah带缓冲的键盘输入(字符串)    DS:DX=键盘缓冲区首地址

    0ah功能要求用户指定一个输入缓冲区来存放字符。缓冲区一般定义在数据段,其定义格式有严格的要求,如下的结构。第一个字节为用户自定义的缓冲区长度,若输入的字符数(包括回车符)大于此值,则喇叭会发出嘟嘟的警告生,并且光标不再右移直到输入回车符为止;第二个字节为实际输入的字符数(不包括回车符),有0ah号功能自动填入;DOS从第三个字节开始存放输入的字符。
        
        |缓冲区长度N|实际读入的字符数|DOS从键盘读入的字符|
        1        2             3             N+2
        |----------------N+2个字节的缓冲区---------------|


    09h显示字符串功能。09h号功能是DOS调用独有的,该功能要求被显示的字符串必须已‘$‘字符作为结束符。调用该功能前若有输入,则应在调用该功能之前输出换行符,否则输出会覆盖输入的一行。如本例若不换行则看不出输出的结果。    

======================汇编例子======================

data segment
buf    db 50
len    db ?
chars    db 50 dup(?)    ;定义52个字节的缓冲区
data ends
prog segment
    main proc far
    assume cs:prog, ds:data
start:
    mov ax,data
    mov ds,ax

    lea dx,buf
    mov ah,0ah
    int 21h        ;字符串输入

    mov dl,0ah    
    mov ah,02h
    int 21h        ;换行,否则显示的行会覆盖输入时的行,看不出输出

    xor ch,ch
    mov cl,len
    mov dx,offset chars
    mov bx,dx
    add bx,cx
    mov byte ptr [bx],‘$‘
    mov ah,09h
    int 21h        ;显示字符串

    mov ax,4c00h
    int 21h
    main endp
prog ends
end start



        

DOS功能调用——单个字符及字符串的输入输出