汇编,字符串顺序输入逆序输出
发布网友
发布时间:2022-04-26 03:26
我来回答
共1个回答
热心网友
时间:2022-06-20 12:01
这里有两个方法,运行无误,你参考一下。
;************************************
;输入任意个字符(回车表示结束输入),倒序输出
;使用栈
;************************************
DATAS SEGMENT
COUNT DW 0 ;输入字符数
DATAS ENDS
STACK SEGMENT
DW 100 DUP (0) ;申请空间应大于300字节
TOP LABEL WORD
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATAS,SS:STACK
START:
MOV AX,DATAS
MOV DS,AX
MOV AX,STACK
MOV SS,AX
LEA SP,TOP ;以栈的形式保存字符
;输入字符,回车结束
MOV AH,1
L1: INT 21H ;AL中为输入字符ASCII码
CMP AL,0DH
JE L2
INC COUNT ;记录字符数
PUSH AX ;保存字符
LOOP L1
L2:
;输出回车换行
MOV AH,2
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
;输出字符
MOV CX,COUNT
CMP CX,0
JE L4
L3:
POP DX ;取出字符
INT 21H
LOOP L3
L4:
MOV AX,4C00H
INT 21H
CODE ENDS
END START
;************************************
;输入任意个字符(回车表示结束输入),倒序输出
;使用数组和串操作
;************************************
DATAS SEGMENT
CHARS DB 100 DUP (?)
COUNT DW 0 ;输入字符数
DATAS ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
MOV ES,AX
LEA DI,CHARS
;输入字符,回车结束
CLD
MOV AH,1
L1: INT 21H ;AL中为输入字符ASCII码
CMP AL,0DH
JE L2
INC COUNT ;记录字符数
STOSB ;保存字符
LOOP L1
L2:
;输出回车换行
MOV AH,2
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
;输出字符
MOV CX,COUNT
CMP CX,0
JE L4
MOV SI,DI
DEC SI
STD
L3:
LODSB ;取出字符
MOV DL,AL
INT 21H
LOOP L3
L4:
MOV AX,4C00H
INT 21H
CODE ENDS
END START