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

字符串的输入与输出问题,如何改?

pinglideyu 发布于 2007-11-27 12:05, 1778 次点击
我的汇编源程序为:
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 SI,CC
      PUSH SI
      
   MOV AL,[SI+2]
      ADD AL,10H
      MOV [SI+2],AL
      INC SI
      CMP AL,34H
      
      SUB AL,10H
      MOV [SI+2],AL
       POP SI
       ADD SI,2
       MOV DX,SI
      ;lea dx,cc[2]                 ;回显的地址需要传送正确,前两字节并非存储处         
      mov ah,9
      int 21h
      
   
  mov ax,4c00h             ;返回操作系统
      int 21h
CODE ENDS
END BEGIN
这个程序的要求是输入一个字符串,以$结尾。
比如输入字符串:1234$
然后把字符串中的每个字符加上10H
所以输出字符串为:ABCD4
可是呢,我们老师还有一个要求。
就是在输入字符串的时候,要有一个判断,就是如果输入字符q,然后在输入回车时,就退出,返回到DOS。
可是这个操作我没有做出来,哪位大侠能不能给我加一下呀?拜托了呢~~~~~
5 回复
#2
wubizao2007-11-27 12:24
接受一个字符的输入,然后判断退出?
.
.
mov ah,0
int 16h
cmp al,'q'
je ret
.
.
.
ret:   mov ax,4c00h
         int 21h
.
.
.
.
.
#3
永夜的极光2007-11-27 12:24
LEA DX,CC
      MOV AH,10                  ;调用21号中断10号子程序
      INT 21H

上面这段执行完后,判断cc[1]是不是等于1和cc[2]是不是q
#4
pinglideyu2007-11-27 19:08
我给大家用c解释一下吧:
就是有一个字符数组, 然后,我给它里面赋值。假设里面输入的第一字符是q,第二个字符是\n.就退出
如果不是这两个字符,就把里面所有的字符加上一个字符。
应该是这样的~~~不知道大家清楚了没?
#5
永夜的极光2007-11-27 19:25
用我3楼说的办法,就能判断出是不是q和回车

或者判断cc[2]=='q'&&cc[3]==13也行

然后想怎么处理就随便你了
#6
pinglideyu2007-11-28 14:18
恩,我试过了,可以了。
谢了喔~~~
呵呵~~
1