汇编:从键盘输入以字符串(字符数〉1)然后在下一行以相反次序显示出来

来源:百度知道 编辑:UC知道 时间:2024/05/17 10:41:57
从键盘输入以字符串(字符数〉1),然后在下一行以相反次序显示出来(采用9号和10号系统功能调用)。
这是我写的,可是不对,请各位帮忙看看哪错了
STACK SEGMENT STACK 'STACK'
DW 32 DUP(0)
STACK ENDS
DATA SEGMENT
INPUT DB 'INPUT(>1):$'
STRING1 DB 32,0,32 DUP(?)
STRING2 DB 32 DUP(?)
DATA ENDS
CODE SEGMENT
START PROC FAR
ASSUME SS:STACK,CS:CODE,DS:DATA,ES:DATA
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV DX,OFFSET INPUT
MOV AH,9
INT 21H
MOV DX,OFFSET STRING1
MOV AH,10
INT 21H
MOV CL,STRING1
MOV CH,0
MOV SI,OFFSET STRING1
ADD SI,CX
INC SI
MOV DI,OFFSET STRING2
AGAIN: MOV AH,0
MOV AL,[SI]
MOV [DI],AL
DEC CX
DEC SI
INC DI
LOOP AGAIN
MOV BYTE PTR [DI],'$'
MOV DX,OFFSET STRING2
MOV AH,9
INT 21H
RET
START ENDP
CODE ENDS
END START

DATA SEGMENT
INPUT DB 'INPUT(>1):$'
STRING1 DB 32,0,32 DUP(?)
STRING2 DB 0dh,0ah,32 DUP(?);要在下一行显示逆序,所以加个回车换行符
DATA ENDS
CODE SEGMENT
START PROC FAR
ASSUME CS:CODE,DS:DATA
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET INPUT
MOV AH,9
INT 21H
MOV DX,OFFSET STRING1
MOV AH,10
INT 21H
MOV CL,STRING1
MOV CH,0
MOV SI,OFFSET STRING1
ADD SI,CX
INC SI
MOV DI,OFFSET STRING2
add di,2;跳过回车换行符
AGAIN:
MOV AL,[SI]
MOV [DI],AL
DEC SI
INC DI
LOOP AGAIN ;LOOP指令就含有使CX减1的操作
MOV BYTE PTR [DI],'$'
MOV DX,OFFSET STRING2
MOV AH,9
INT 21H
mov ah,1
int 21h
RET
START ENDP
CODE ENDS
END START

反序输出,还是下面代码算法简便一些,推荐一下。
;不受10号系统功能调用串长不能多于255的限制
;STACK SEGMENT STACK 'STACK'
;DW 32 DUP(0)
;STACK ENDS

从键盘输入一组字符串,以相反的顺序输出显示 求助,由键盘输入一个字符串和一个字符,要求从该字符串中删除所指定的字符 汇编 从键盘上输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计数结果 建立一棵二叉树,数据以字符串形式从键盘输入。 用C语言编写程序:从键盘输入一串字符,按回车键后结束,最后将字符串在屏幕上输出。 从键盘输入一系列字符,以回车为结束符,编程统计其中非数字字符的个数 编程,从键盘输入一串字符,将其中的大写字母转换成小写字母,其它字符不变,将转换后的字符串输出。 汇编设计 从键盘输入数据并显示的程序 pascal编程:请问:从键盘输入2000个字符,以回车结束,但我在编写程序时,每一次都只能接受127个字符? 如何从键盘输入字符串到链表(用C++实现)