4.现有一组字符串为data,name,time,file,code,path,user,exit,quit,text,请编写程序从键盘输入4个字符的字符串,若存在将其删除, 并在显示器上显示。
这道题有个小BUG,可能不太好解决
还是在捋一下这道题的思路
首先读一个字符串到BUF2
把SI给BUF1,DI给BUF2
CL=4开始比较,如果不相等,就把SI一直挪到逗号那一位+1,然后开始打印
打印的时候要比较最后是逗号还是美元
最后要把CH-1,把DI重新给BUF2,
如果相等且CL=0,就说明找到了,进入CHANGE
在CHANGE中把SI往后挪,然后重新给DI赋值,返回比较。
DATAS SEGMENT
BUF1 DB 'data,name,time,file,code,path,user,exit,quit,text','$'
BUF2 DB 5
DB ?
DB 5 DUP(?)
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV ES,AX
LEA DX,BUF2
MOV AH,0AH
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,02H
INT 21H
MOV CH,10
MOV CL,4
LEA SI,BUF1
LEA DI,BUF2[2]
L:
CMP CH,0
JZ END0
CLD
NEXT:
CMPSB
JNZ TIAOZHUAN
DEC CL
CMP CL,0
JZ CHANGE
JMP NEXT
TIAOZHUAN:
CMP CL,0
JZ DAYIN
DEC CL
INC SI
JMP TIAOZHUAN
DAYIN:
MOV DL,[SI-5]
MOV AH,02H
INT 21H
MOV DL,[SI-4]
MOV AH,02H
INT 21H
MOV DL,[SI-3]
MOV AH,02H
INT 21H
MOV DL,[SI-2]
MOV AH,02H
INT 21H
;MOV DL,[SI-1]
;MOV AH,02H
;INT 21H
MOV BL,[SI-1]
CMP BL,'$'
JZ END0
MOV DL,[SI-1]
MOV AH,02H
INT 21H
LEA DI,BUF2[2]
MOV CL,4
DEC CH
JMP L
CHANGE:
INC SI
DEC CH
MOV CL,4
LEA DI,BUF2[2]
JMP L
END0:
;此处输入代码段代码
MOV AH,4CH
INT 21H
CODES ENDS
END START
网友评论