主题:DOS中断中怎么实现字符串输入后显示
anni-sa
[专家分:0] 发布于 2007-05-24 20:22:00
DOS中断中怎么实现字符串输入后显示
回复列表 (共2个回复)
沙发
freeeerf [专家分:5440] 发布于 2007-05-25 22:13:00
用DOS的10号中断读取字符串,再自己往字符串最后加一个'$',这样可以调用09号功能输入字符串了.
具体可查看DOS中断表.
板凳
塞北江南 [专家分:1350] 发布于 2007-05-28 20:55:00
(1)从键盘读入一个字符
功能号:1
入口参数:无
出口参数:AL=输人字符的ASCII码
功能:等待从键盘读入一个字符,将字符的ASCII码送给AL,同时将该字符显示在屏幕上。
调用方法:
MOV AH,l ;AH中存放的是功能号
INT 21H
说明:在输入一个字符后,不需要键入回车。若只键入回车,则出口参数AL得到的是回车符的ASCII码0DH。
(2)显示一个字符
功能号:2
入口参数:DL=要显示字符的ASCII码
出口参数:无
功能:在当前光标位置显示DL中的字符,然后光标右移。
调用方法示例: 下列指令序列用来显示字符’A’
MOV DL,‘A’
MOV AH,2
INT 2lH
(3)显示一个字符串
功能号;9
入口参数;DS:DX=欲显示的字符串在内存的首地址。字符串必须以’$’作为结束标志,’$’不属于被显示的字符串。
出口参数:无
功能:在当前光标位置,显示由DS:DX所指的、以’$’为结束标志的字符串,然后光标右移。
调用方法示例:
…
STRING DB ‘Hello world!’,’$’
…
下列指令序列用来显示String中的字符串‘Hello world!’。
MOV AX,SEG STRING
MOV DS,AX
LEA DX,STRING
MOV AH,9
INT 21H
(4)从键盘读入一个字符串
功能号:0AH
入口参数:DS:DX=输人缓冲区的首地址
输入缓冲区格式:第0个字节给出输入缓冲区最多能容纳的字符个数(1~255,包括回车符),由应用程序设置;第1个字节将存放实际输人的字符个数(不包括回车符),由系统在读入字符串后自动设置;从第2个字节开始存放实际输入的字符串,最后为回车符的ASCII码0DH。
出口参数;无
功能:从键盘读入一个字符串,存入由DS:DX所指的输入缓冲区。
说明:
•在输入字符串后,必须以回车结束。
•当输人的字符数达到了输入缓冲区所能容纳的字符个数减l时,随后的输入将不被系统接收,且响铃警告。
调用方法示例:
……
BUF DB 80 ;定义输入缓冲区,最多容纳79个字符与1个回车符
DB ? ;存放实际输入的字符个数,由系统自动设置
DB 80 DUP (?) ;存放实际输入的字符串
……
下列指令序列将从键盘读人字符串(长度<80,并存入输入缓冲区BUF中
MOV AX,SEG BUF
MOV DS,AX
MOV DX,OFFSET BUF
MOV AH,0AH
INT 21H
假定的字符串为’ABC’,则输入缓冲区BUF的内容如下:
BUF+1: 3 ; 输入字符个数为3
BUF+2: 61H ;’A’的ASCII码
BUF+3: 62H ;’B’的ASCII码
BUF+4: 63H ;’C’的ASCII码
BUF+5: 0DH ;回车符的ASCII码
我来回复