📄 string_search.asm
字号:
DATA SEGMENT
K1 DB 13
K2 DB 0
KEYWORD DB 13 DUP(?)
S1 DB 30
S2 DB 0
SENTENCE DB 30 DUP(?)
MESS1 DB 13,10,'ENTER KEYWORD:','$'
MESS2 DB 13,10,'ENTER SENTENCE:$'
MESS3 DB 13,10,'NO MATCH $'
MESS4 DB 13,10,'MATCH AT LOCATION: $'
MESS5 DB 'H OF THE SENTENCE$'
MESS6 DB 'ERROR INPUT,PLEASE TRY AGAIN $'
COUNT DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,DS:DATA
MAIN PROC FAR
MOV AX,DATA
MOV DS,AX
MOV ES,AX
START:MOV DX,OFFSET MESS2
MOV AH,9
INT 21H
MOV DX,OFFSET S1
MOV AH,10
INT 21H
XOR BX,BX
MOV BL,S2
MOV SENTENCE[BX],'$'
ARRAY=SENTENCE
CALL CONVERT
AGAIN:MOV DX,OFFSET MESS1
MOV AH,9
INT 21H
MOV DX,OFFSET K1
MOV AH,10
INT 21H
XOR BX,BX
MOV BL,K2
MOV KEYWORD[BX],'$'
ARRAY=KEYWORD
CALL CONVERT
MOV DI,OFFSET SENTENCE
MOV BX,DI
MOV AL,S2
SUB AL,K2
INC AL
MOV COUNT,AL
NEXT: MOV SI,OFFSET KEYWORD
MOV CL,K2
MOV CH,0
CMP COUNT,0
JL NOMATCH
REP CMPSB
JE MATCH
INC BX
MOV DI,BX
DEC COUNT
JE NOMATCH
JMP NEXT
NOMATCH:MOV DX,OFFSET MESS3
MOV AH,9
INT 21H
JMP AGAIN
MATCH: MOV DX,OFFSET MESS4
MOV AH,9
INT 21H
SUB BX,OFFSET S2
CALL BINIHEX
MOV DX,OFFSET MESS5
MOV AH,9
INT 21H
JMP AGAIN
MAIN ENDP
BINIHEX PROC NEAR
MOV CH,4
ROTATE:MOV CL,4
ROL BX,CL
MOV AL,BL
AND AL,0FH
ADD AL,30H
CMP AL,3AH
JL PRINT
ADD AL,7H
PRINT: MOV DL,AL
MOV AH,2
INT 21H
DEC CH
JNZ ROTATE
RET
BINIHEX ENDP
CONVERT PROC NEAR
NEXT1:INC ARRAY
CMP [ARRAY],'$'
JE EXIT
CMP [ARRAY],41H
JL ERROR_EXIT
CMP [ARRAY],5AH
JG ERROR_EXIT
ADD [ARRAY],20H
JMP NEXT2
NEXT2:CMP [ARRAY],'$'
JE EXIT
CMP [ARRAY],61H
JL ERROR_EXIT
CMP [ARRAY],7AH
JG ERROR_EXIT
JMP NEXT1
ERROR_EXIT:MOV DX,OFFSET MESS6
MOV AH,9
INT 21H
JMP START
EXIT:RET
CONVERT ENDP
CODE ENDS
END MAIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -