作者在 2010-11-04 16:42:55 发布以下内容
10号dos调用
功能: 从键盘接收字符串送入内存的输入缓冲区,同时送显示器显示。
调用前要求:
先定义一个输入缓冲区
MAXLEN DB 100 ;第1个字节指出缓冲区能容纳的字符个数,即缓冲区长度,不能为0
ACLEN DB ? ;第2个字节保留,以存放实际输入的字符个数
STRING DB 100 DUP(?) ;第3个字节开始存放从键盘输入的字符串。
调用格式: LEA DX,MAXLEN(缓冲区首偏移地址)
MOV AH,10
INT 21H
注意:调用时,要求DS:DX指向输入缓冲区
功能: 从键盘接收字符串送入内存的输入缓冲区,同时送显示器显示。
调用前要求:
先定义一个输入缓冲区
MAXLEN DB 100 ;第1个字节指出缓冲区能容纳的字符个数,即缓冲区长度,不能为0
ACLEN DB ? ;第2个字节保留,以存放实际输入的字符个数
STRING DB 100 DUP(?) ;第3个字节开始存放从键盘输入的字符串。
调用格式: LEA DX,MAXLEN(缓冲区首偏移地址)
MOV AH,10
INT 21H
注意:调用时,要求DS:DX指向输入缓冲区
综合举例:
简单的人机对话的实现
屏幕显示:What’s your name? (使用9号DOS功能调用)
用户输入:LiPing ↙ (使用10号DOS功能调用)
屏幕再显示:Hello, LiPing! (使用9号DOS功能调用)
用户输入:LiPing ↙ (使用10号DOS功能调用)
屏幕再显示:Hello, LiPing! (使用9号DOS功能调用)
程序清单:
DATA SEGMENT
BUF DB 30
ACTL DB ?
STR DB 30 DUP(?)
MESS DB ‘What’s your name?’,0DH,0AH, ‘$’
DMESS DB 0DH,0AH, ‘Hello,$’
BUF DB 30
ACTL DB ?
STR DB 30 DUP(?)
MESS DB ‘What’s your name?’,0DH,0AH, ‘$’
DMESS DB 0DH,0AH, ‘Hello,$’
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MAIN PROC FAR
PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
LEA DX,MESS
MOV AH,9
INT 21H ;显示 ‘What’s your name?’
LEA DX,BUF
MOV AH,10
INT 21H ;从键盘接收用户输入的信息
MOV AL,ACTL ;取得键入字符串的实际长度
CBW
MOV SI,AX
LEA BX,STR
MOV [BX+SI],BYTE PTR ‘!’ ;在键入的字符串后加‘!’
MOV [BX+SI+1],BYTE PTR ‘$’ ;在‘!’后加‘$’,以便显示
LEA DX,DMESS ;显示‘Hello!’
MOV AH,9
INT 21H
LEA DX,STR ;显示键入的字符串
MOV AH,9
INT 21H
RET
MAIN ENDP
ASSUME CS:CODE,DS:DATA
MAIN PROC FAR
PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
LEA DX,MESS
MOV AH,9
INT 21H ;显示 ‘What’s your name?’
LEA DX,BUF
MOV AH,10
INT 21H ;从键盘接收用户输入的信息
MOV AL,ACTL ;取得键入字符串的实际长度
CBW
MOV SI,AX
LEA BX,STR
MOV [BX+SI],BYTE PTR ‘!’ ;在键入的字符串后加‘!’
MOV [BX+SI+1],BYTE PTR ‘$’ ;在‘!’后加‘$’,以便显示
LEA DX,DMESS ;显示‘Hello!’
MOV AH,9
INT 21H
LEA DX,STR ;显示键入的字符串
MOV AH,9
INT 21H
RET
MAIN ENDP
CODE ENDS
END MAIN
END MAIN