📄 rjexp11.asm
字号:
CRLF MACRO
MOV AH,02H
MOV DL,0DH
INT 21H
MOV AH,02H
MOV DL,0AH
INT 21H
ENDM
DATA SEGMENT
MESS DB '请输入字符串,以回车结尾,全部字符串输入结束后,输入#',0DH,0AH,'$'
MESS1 DB '请输入下一个字符串,或者按 # 结束全部输入:',0DH,0AH,'$'
MESS2 DB '最长的一个字符串是:',0DH,0AH,'$'
MESS3 DB 0DH,0AH,'最短的一个字符串是:',0DH,0AH,'$'
BUFF1 DB 256 DUP(?) ;存放当前输入行
BUFF2 DB 256 DUP(?) ;存放最长的输入行
BUFF3 DB 256 DUP(?) ;存放最短的输入行
REGL DW ?
REGS DW ?
DATA ENDS
STACK SEGMENT
STA DB 50 DUP(?)
TOP EQU LENGTH STA
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX ;初始化
MOV ES,AX
MOV AX,STACK
MOV SS,AX
MOV SP,TOP
MOV REGL,0
MOV REGS,00FFH
MOV AH,09H
MOV DX,OFFSET MESS ;显示提示信息
INT 21H
SSS: MOV SI,OFFSET BUFF1 ;当前输入行缓冲区首址
KKK: MOV AH,01H
INT 21H ;读取键入字符
CMP AL,'#'
JZ PPP ;是结束标志字符`#`则转PPP
MOV [SI],AL ;键入字符保存在缓冲区中
INC SI ;指针加1
HHH: CMP AL,0DH ;是回车键则转GGG
JZ GGG
JMP KKK
GGG: CRLF
DEC SI
MOV AL,'$'
MOV [SI],AL
MOV AH,09H
MOV DX,OFFSET MESS1
INT 21H ;提示键入下一字符行
MOV BX,OFFSET BUFF1
SUB SI,BX
INC SI ;计算本次输入行的长度
CMP SI,REGL
JBE BB1 ;不长则转BB1
MOV REGL,SI ;修改长度计数值REGL
MOV CX,SI
MOV DI,OFFSET BUFF2
CCC: MOV AL,[BX]
MOV [DI],AL
INC BX
INC DI
LOOP CCC ;BUFFER1复制到BUFFER2中
BB1: CMP SI,REGS
JNBE BBB
MOV REGS,SI
MOV CX,SI
LEA DI,BUFF3
CC1: MOV AL,[BX]
MOV [DI],AL
INC BX
INC DI
LOOP CC1
BBB: JMP SSS
PPP: CRLF
MOV AH,09H
MOV DX,OFFSET MESS2
INT 21H
MOV AH,09H
MOV DX,OFFSET BUFF2
INT 21H ;显示最长的行
MOV AH,09H
LEA DX,MESS3
INT 21H
MOV AH,09H
LEA DX,BUFF3
INT 21H ;显示最短的行
MOV AX,4C00H
INT 21H ;返回DOS
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -