DOS系统功能调用步骤:
1. AH <- 功能号 2.指定寄存器放入该功能所要求的入口参数 3.执行int 21H 4.分析出口参数单字符输入输出
01h键盘输入 AL=输入字符 02h显示器输出 DL=输出字符 07h直接控制台输入(无回显) AL=输入字符 08键盘输入(无回显) AL=输入字符======================汇编例子======================data segments db 1data endsprog segment main proc far assume cs:prog, ds:datastart: mov ax,data mov ds,axmov ah,01h
int 21h ;获取输入的单个字符mov bx,offset s
mov byte ptr ds:[bx],al ;必须是bx,寄存器间接寻址,把获取的字符存到smov dl,0ah
mov ah,02h int 21h ;输出换行符mov dl,s
mov ah,02h int 21h ;输出刚才获取到的字符mov ax,4c00h
int 21h main endpprog endsend 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 50len db ?chars db 50 dup(?) ;定义52个字节的缓冲区data endsprog segment main proc far assume cs:prog, ds:datastart: mov ax,data mov ds,axlea 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 endpprog endsend start