3.现有一组字符串为data,name,time,file,code,path,user,exit,quit,text,请编写程序从键盘输入4个字符的字符串,若存在将其修改为disk, 并将结果在显示器上显示。
重要提示:这道题编写的思路和最早不一致,因为我发现这样做更简单一些
程序的思路是:首先读一个字符串到buf中
然后让SI为buf【2】
DI 为LIB【2】也就是给定字符串的第一个字母
然后让CX等于10,再把CX入栈保护起来
CX=4
执行REPZ CMPSB指令
取出CX,看ZF是不是1,如果是就说明两个字符串相等
如果相等,就进行替换,然后让CX=4,这个时候已经不用执行下一步比较了,进行一个一个替换操作即可。
如果不相等,就把BX+5,然后把BX赋给DI,就是让DI到下一个单词处。
DATAS SEGMENT
BUF DB 05H
DB ?
DB 05H DUP('?')
LIB DB 0DH,0AH,'data'
DB ',name'
DB ',time'
DB ',file'
DB ',code'
DB ',path'
DB ',user'
DB ',exit'
DB ',quit'
DB ',text','$'
REPLACE DB 'disk'
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,ES:DATAS
START:
MOV AX,DATAS
MOV DS,AX
MOV ES,AX
LEA DX,BUF
MOV AH,0AH
INT 21H
LEA SI,BUF[2]
LEA DI,LIB[2]
MOV BX,DI
MOV CX,10
L:
PUSH CX
CLD
MOV CX,4
REPZ CMPSB
POP CX
JNZ N
MOV SI,BX
LEA DI,REPLACE
MOV CX,4
M: MOV AL,[DI]
MOV [SI],AL
INC DI
INC SI
LOOP M
JMP END0
N:
ADD BX,5
MOV DI,BX
LEA SI,BUF[2]
LOOP L
END0:
LEA DX,LIB
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START