回 帖 发 新 帖 刷新版面

主题:为什么不能接受字符串????

data segment
char db ?
data ends
code segment
assume cs:code,ds:data
main proc near
xor ax,ax
mov ax,data
mov ds,ax
xor ax,ax
mov ah,0ah
lea dx,char
int 21h
mov char,al
mov ah,09h
lea dx,char
int 21h
mov ah,4ch
int 21h
main endp
code ends
end main
为什么不能接受字符串????

回复列表 (共1个回复)

沙发

输入/输出是程序与用户交互的重要手段。例如,从键盘读人数据,显示输出结果等。DOS系统调用INT 2lH提供了字符与字符串的输入助出功能,下面介绍其中一些常用的功能。
1.从键盘读入一个字符 
    功能号:1    
    入口参数:无    i
    出口参数:AL=输人字符的ASCII码
功能:等待从键盘读入一个字符,将字符的ASCII码送给AL,同时将该字符显示在屏幕上。
调用方法:
         MOV  AH,l    ;AH中存放的是功能号
         INT 21H
说明:在输入一个字符后,不需要键入回车。若只键入回车,则出口参数AL得到的是回车符的ASCII码0DH。
2.显示一个字符
   功能号:2    
   入口参数:DL=要显示字符的ASCII码
   出口参数:无    1
   功能:在当前光标位置显示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码  

我来回复

您尚未登录,请登录后再回复。点此登录或注册