注册 登录
编程论坛 汇编论坛

简单字符串输入输出问题,如何解决?

pinglideyu 发布于 2007-11-26 11:07, 2654 次点击
DATA SEGMENT
AA DB 0DH,'Please input a string:$'
BB DB 0DH,0AH,'Print the string:$'
CC DB ?
   DB ?
   DB 8 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
BEGIN:MOV AX,DATA
      MOV DS,AX
      LEA DX,AA
      MOV AH,9
      INT 21H
      LEA DX,CC
      MOV AH,10
      INT 21H
      LEA DX,BB
      MOV AH,9
      INT 21H
      LEA DX,CC
      MOV AH,10
      INT 21H
CODE ENDS
END BEGIN
程序没错误,就是程序不让我输入字符串。郁闷中~~~~
5 回复
#2
loveajtl2007-11-26 12:06
CC DB ?
   DB ?
   DB 8 DUP(?)
首个数不能为空"?"要是一个数,例如10之类,在最后还要有字符串结束符'$'
#3
永夜的极光2007-11-26 12:45
同楼上,不过是后面的dup前面的数字是多少,那里就填多少,比如你这个程序,就换成
CC DB 8
   DB ?
   DB 8 DUP(?)
#4
pinglideyu2007-11-26 13:01
喔~~~谢过了,我试下。
#5
wubizao2007-11-26 13:12
DATA SEGMENT
AA DB 0DH,'Please input a string:$'
BB DB 0DH,0AH,'Print the string:$'
CC  DB 16                                         ;注意这是自己假设的输入容量
      DB ?                                            ;实际输入的个数
      DB 16 DUP(0)                              ;真实的输入存储处
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
BEGIN:MOV AX,DATA
      MOV DS,AX
      LEA DX,AA
      MOV AH,9
      INT 21H
      
     
      LEA DX,CC
      MOV AH,10                  ;调用21号中断10号子程序
      INT 21H
      
      lea dx,bb                  
      mov ah,9
      int 21h

      lea dx,cc[2]                 ;回显的地址需要传送正确,前两字节并非存储处         
      mov ah,9
      int 21h
   
      mov ax,4c00h             ;返回操作系统
      int 21h
CODE ENDS
END BEGIN
-----------------------------------------------------------------
要注意的是09号显示字符串,需要以$判断显示结束
在程序中定义data段:
CC DB 16
      DB ?
      DB 16DUP(0)
表明你在可接受的容量范围内输入时要加上$,比如输入123$
这样才能正常回显.
--------------------------------
或者修改data段
CC DB 16
      DB ?
      DB 16 DUP('$')
---------------------------------

[[italic] 本帖最后由 wubizao 于 2007-11-26 13:19 编辑 [/italic]]
#6
pinglideyu2007-11-26 13:41
很清晰呢,谢过喔。学习一下。
呵呵~~~~
谢谢各位的回答
1