编写程序:
接收键入的一个句子以及一个关键字;
如果句子中不包含关键字则显示“No match !”;
如果句子包含关键字则显示“Match !”,且把该字在句子中的位置用十六进制数显示出来。
满意回答:
;================================
DATAS SEGMENT
T1 DB 10, 13, 'Input String: $'
T2 DB 10, 13, 'Input a Char: $'
RESULT1 DB 10, 13, 'MATCH !', 13, 10, '$'
RESULT2 DB 10, 13, 'NO MATCH !', 13, 10, '$'
KEY DB 100 DUP(?)
SEN DB ?
DATAS ENDS
;================================
CODES SEGMENT
ASSUME CS:CODES, DS:DATAS
START:
MOV AX, DATAS
MOV DS, AX
;--------------------------------
MOV DX, OFFSET T1 ;Input String:
MOV AH, 09H
INT 21H
XOR BX, BX
L5:
MOV AH, 01H
INT 21H
MOV KEY[BX], AL ;保存输入的字符
INC BX
CMP AL, 13 ;是“回车”?
JNZ L5 ;不是,就继续输入。超过100个就会出错,但愿不会输入这么多吧 !
MOV DX, OFFSET T2 ;Input a Char:
MOV AH, 09H
INT 21H
MOV AH, 01H
INT 21H
MOV SEN, AL ;保存关键字
;-----------------------------
L1:
MOV AL, KEY[BX - 1]
CMP AL, SEN
JZ L3 ;找到了转移.
DEC BX
JNZ L1
;-----------------------------
L2: ;没有找到.
MOV DX, OFFSET RESULT2
MOV AH, 09H
INT 21H
JMP L4
L3:
MOV DX, OFFSET RESULT1 ;MATCH !
MOV AH, 09H
INT 21H
;---------------------下面是显示位置
MOV AL, BL
MOV AH, 0
MOV BL, 16
DIV BL
MOV DX, AX
ADD DL, 30H
CMP DL, 3AH
JB L7
ADD DL, 7
L7:
MOV AH, 2
INT 21H
MOV DL, DH
ADD DL, 30H
CMP DL, 3AH
JB L8
ADD DL, 7
L8:
MOV AH, 2
INT 21H
MOV DL, 'H'
MOV AH, 2
INT 21H
;-----------------------------
L4:
MOV AH, 4CH
INT 21H
CODES ENDS
END START
;================================
如果含有多个关键字,本程序只是显示最后输入的关键字位置。
运行结果如下:
c:\masm510>SEN
Input String: SASFRGERTEGDFBDBD
Input a Char: D
MATCH !
11H
c:\masm510>SEN
Input String: EWEWE
Input a Char: M
NO MATCH !
;================================
回答者: 做而论道 | 2012-4-13 09:55
原题网址:http://zhidao.baidu.com/question/409735230.html
;================================