📄 zifu.txt
字号:
DATA SEGMENT
STR0 DB 0AH,0DH,'IF YOU WANT TO SHOW OUT THE STRING INPUT D','$' ;菜单
STR1 DB 0AH,0DH,'IF YOU WANT TO DELET SOME CHARS INPUT E','$'
STR2 DB 0AH,0DH,'IF YOU WANT TO INSERT SOME CHARS INPUT I','$'
STR3 DB 0AH,0DH,'IF YOU WANT TO EXIT MASM INPUT Q','$'
STR4 DB 0AH,0DH,'INPUT FROM WHICH CHAR YOU WANT TO DELET :','$' ;提示信息
STR5 DB 0AH,0DH,'INPUT HOW MANY CHARS YOU WANT TO DELET :','$'
STR6 DB 0AH,0DH,'INPUT FROM WHICH CHAR YOU WANT TO INSERT:','$'
STR7 DB 0AH,0DH,'INPUT HOW MANY CHARS YOU WANT TO INSERT:','$'
STR8 DB 'THERE IS N0 CHAR ','$'
STR9 DB 0AH,0DH,'INPUT WHAT YOU WANT TO DO :','$'
STR10 DB 'THE STRING BERORE DELET IS:',24H
STR11 DB 0AH,0DH,'THE STRING AFTER DELET IS:',24H
STR12 DB 0AH,0DH,'THE STRING BERORE INSERT IS:',24H
STR13 DB 0AH,0DH,'THE STRING AFTER INSERT IS:',24H
STR14 DB 0AH,0DH,'YOUR IMFORMATION IS WRONG RUTIN AGAIN',24H
STRI DB 0AH,0DH,'**************************************************',24H
STR DB 256 DUP(?)
CHARS DB 100 DUP(?)
COUNT DW 0
B DW 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AX,0600H ;清屏
MOV BH,61H
SUB CX,CX
MOV DX,184FH
INT 10H
MOV DX,OFFSET STRI ;显示菜单
MOV AH,09H
INT 21H
MOV DX,OFFSET STR0
MOV AH,09H
INT 21H
MOV DX,OFFSET STR1
MOV AH,09H
INT 21H
MOV DX,OFFSET STR2
MOV AH,09H
INT 21H
MOV DX,OFFSET STR3
MOV AH,09H
INT 21H
MOV DX,OFFSET STRI
MOV AH,09H
INT 21H
INPUT:MOV DX,OFFSET STR9 ;输入字符选择操作
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
CMP AL,'D'
JZ D
CMP AL,'E'
JZ E
CMP AL,'I'
JZ I
CMP AL,'Q'
JZ Q
CALL WRONG ;错误输入
JMP INPUT
D: CALL DISP
JMP INPUT
E: CALL ERASE
JMP INPUT
I: CALL INSERT
JMP INPUT
Q: CALL QUIT
DISP PROC NEAR ;显示子程序DISP
PUSH AX
PUSH DX
PUSH CX
PUSH SI
MOV SI,OFFSET STR ;SI指向STR首地址
MOV AX,COUNT ;字符个数COUNT
CMP AX,0 ;字符个数为0转
JZ SHOW
MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,02H
INT 21H
MOV CX,COUNT ;显示字符串
LOP:MOV DL,[SI]
MOV AH,02H
INT 21H
INC SI
LOOP LOP
JMP EXIT
SHOW: MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,02H
INT 21H
MOV DX,OFFSET STR8 ;显示空串
MOV AH,09H
INT 21H
EXIT:
POP SI
POP CX
POP DX
POP AX
RET
DISP ENDP
ERASE PROC NEAR ;删除子程序
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
LOP0: MOV DX,OFFSET STR4 ;提示信息
MOV AH,09H
INT 21H
CALL NUMBER ;输入从第几个字符开始删除
MOV BX,B ;放入BX
MOV DI,B
CMP BX,COUNT ;和字符总数比较
JB LOP1 ;小于转
CALL WRONG ;错误提示
JMP LOP0
LOP1:
MOV DX,OFFSET STR5 ;提示信息
MOV AH,09H
INT 21H
CALL NUMBER ;输入要删除字符个数
MOV DX,OFFSET STR10 ;显示删除前字符串
MOV AH,09H
INT 21H
CALL DISP
MOV CX,BX ;要删除的第一个字符和字符总数比较
CMP CX,COUNT
JA LOP3 ;大于转
ADD CX,B
SUB CX,1 ;要删除字符个数与从第几个开始删的和
CMP CX,COUNT ;要删除字符多余字符总数转
JAE LOP3
SUB DI,1
MOV SI,DI ;SI指向要删除的第一个字符的存储位置
ADD DI,B ;DI指向要删除的最后一个字符的下一个存储位置
MOV CX,COUNT
SUB CX,BX ;CX放要删除字符串后面的字符个数
SUB CX,B
ADD CX,1
LOP2:MOV DL,STR[DI] ;后边剩下的字符依次移到要删除的字符位置
MOV STR[SI],DL
INC DI
INC SI
LOOP LOP2
MOV DX,COUNT ;删除后字符个数
SUB DX,B
MOV COUNT,DX
JMP LOP4
LOP3:MOV CX,BX ;要删除第一个字符前的字符个数给COUNT
SUB CX,1
MOV COUNT,CX
LOP4:MOV DX,OFFSET STR11 ;提示信息
MOV AH,09H
INT 21H
CALL DISP ;显示删除后的字符串
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
RET
ERASE ENDP
INSERT PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
MOV DX,OFFSET STR6 ;提示信息
MOV AH,09H
INT 21H
CALL NUMBER ;输入从第几个字符开始插入
MOV BX,B
MOV DX,OFFSET STR7 ;提示信息
MOV AH,09H
INT 21H
CALL NUMBER ;输入要插入字符个数
MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,02H
INT 21H
XOR SI,SI
MOV CX,B
PUTIN: MOV AH,01H ;输入要插入字符
INT 21H
MOV CHARS[SI],AL
INC SI
LOOP PUTIN
MOV DX,OFFSET STR12 ;显示插入前字符串
MOV AH,09H
INT 21H
CALL DISP
CMP BX,COUNT ;要插入的第一个位置与字符总数比较大于转
JA LOP6
MOV DI,COUNT ;DI指向原字符串最后一个字符的位置
SUB DI,1
MOV SI,DI ;SI指向原字符串最后一个字符的位置
ADD DI,B ;DI指向插入后字符串最后一个字符的位置
MOV CX,COUNT ;把要向后移动的字符个数放入CX
SUB CX,BX
ADD CX,1
LOP5:MOV DL,STR[SI] ;依次移动字符
MOV STR[DI],DL
DEC SI
DEC DI
LOOP LOP5
MOV DI,BX ;DI指向要插入的第一个字符的位置
SUB DI,1
JMP LOP7
LOP6:MOV DI,COUNT ;DI指向原字符串最后一个字符的下一个位置
LOP7:MOV CX,B ;要插入字符个数放入CX
MOV SI,0
LOP8:MOV BL,CHARS[SI] ;插入字符
MOV STR[DI],BL
INC DI
INC SI
LOOP LOP8
MOV DX,COUNT ;插入后字符串的字符总数给COUNT
ADD DX,B
MOV COUNT,DX
MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,02H
INT 21H
MOV DX,OFFSET STR13 ;显示插入后字符串
MOV AH,09H
INT 21H
CALL DISP
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
RET
INSERT ENDP
QUIT PROC NEAR ;退出子程序
PUSH AX
MOV AH,4CH
INT 21H
POP AX
RET
QUIT ENDP
NUMBER PROC NEAR ;数值转换子程序 完成从键盘输入10进制数
PUSH AX
PUSH BX
PUSH CX
XOR BX,BX
S0:MOV AH,01H
INT 21H
CMP AL,0DH
JZ S1
SUB AL,30H
CBW
PUSH AX
MOV CH,10
MOV AX,BX
MUL CH
MOV BX,AX
POP AX
ADD BX,AX
JMP S0
S1:MOV B,BX
MOV AH,02H
MOV DL,0AH
INT 21H
POP CX
POP BX
POP AX
RET
NUMBER ENDP
WRONG PROC NEAR ;错误提示子程序
PUSH DX
MOV DX,OFFSET STR14
MOV AH,09H
INT 21H
POP DX
RET
WRONG ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -