mov ah, 10
LEA DX,BUF ;dx字符串位置
int 21h
dos 10号中断调用
要求:
BUF1 DB 20 ,?, 20 DUP (?)
1)缓冲区第一个字节为缓冲区大小20,
2)第二个字节存放实际上放入缓冲区中字符个数,初始为? 表示未知
3)后面20 DUP(?)为实际数据存放区域,大小20
BUF2类似
dos 9号中断显示字符串
DATAS SEGMENT
STRING1 DB 'please input a string1:$'
STRING2 DB 'please input a string2:$'
STRING3 DB 'MATCH!$'
STRING4 DB 'NO MATCH!$'
BUF1 DB 20 ,?, 20 DUP (?)
BUF2 DB 20 ,?, 20 DUP (?)
CRLF DB 0AH,0DH,"$"
DATAS ENDS
STACKS SEGMENT STACK
DB 200 DUP(?)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START: MOV AX,DATAS
MOV DS,AX
LEA DX,STRING1
MOV AH,9
INT 21H ;;;;;;;;;;;;;;显示STRING1
MOV AH,10
LEA DX,BUF1
INT 21H ;;;;;;;;;;;;;;输入字符串,存入BUF1
LEA DX,CRLF
MOV AH,9
INT 21H;;;;;;;;;;;;;;光标移到下一行开始,即回车
LEA DX,STRING2
MOV AH,9
INT 21H ;;;;;;显示STRING2
MOV AH,0AH
LEA DX,BUF2
INT 21H;;;;;;;在输入一个字符串,存入BUF2
LEA DX,CRLF
MOV AH,09H
INT 21H;;;;;;;;;回车
MOV CL,BUF1+1 ;CL 存放BUF1长度
MOV DL,BUF2+1 ;DL 存放BUF2长度
LEA SI,BUF1+2
LEA DI,BUF2+2
SUB DL,CL ;相减为不为0的话,....
JNZ NOMATCH
NEXT: MOV AL,[SI] ;若相减为0,则你一个,我一个的比较
MOV BL,[DI]
CMP AL,BL
JNE NOMATCH ;有不相同的字符,跳走
INC DI
INC SI
LOOP NEXT
MATCH: LEA DX,STRING3 ;成功循环完,没有不相同字符, 显示成功字符串STRING3
MOV AH,09H
INT 21H
JMP EXIT ;注意此处,这是必须的
NOMATCH:LEA DX,STRING4 ;跳到这里的就是不成功了,显示STRING4
MOV AH,09H
INT 21H
JMP EXIT
EXIT: MOV AH,4CH
INT 21H
CODES ENDS
END START
PS:
希望你能看懂。
关于dos中断,一般汇编书后面都有表。
遇到INT 21H dos中断,就可以查表,看看啥用,以及有关参数设置。没必要记,死知识!