MOV DL,0AH ;输出回车、换行 MOV AH,02H INT 21H MOV DL,0DH MOV AH,02H INT 21H
LEA DX,BUF2 ;输入字符串BUF2 MOV AH,0AH INT 21H
MOV AX,0 LEA DI,BUF1 LEA SI,BUF2 CLD
MOV CX,COUNT1 REPZ CMPSB
JNZ L1 ;BUF1和BUF2不同,跳转至L1 L2: MOV AL,0H JMP EXID L1: MOV AL,1H
EXID:
MOV BL,AL
MOV DL,0AH ;输出回车、换行 MOV AH,02H INT 21H MOV DL,0DH MOV AH,02H INT 21H
ADD BL,30H ;将AL中的内容输出 MOV DL,BL MOV AH,02H INT 21H MOV AH,4CH INT 21H CODES ENDS END START
程序分析:本程序的难点在于从键盘输入两字符串BUF1、BUF2。为了成功输入,要在两次输入之间加上输出回车、换行。初始化BUF1、BUF2内存区域时,应设置相同的空间大小便于后续比较BUF1、BUF2中的字符。利用0A号功能进行输入字符串时,要注意初始化时的固定格式。输入前应将字符串有效地址放入DX中。利用串操作指令CMPSB逐个比较DS:SI和ES:DI中的字符。利用CLD指令可以方便地使SI、DI在每次串操作指令后递增。输出AL中的内容0、1时应先将其转换成ASCII码30H、31H再输出。 框图:
开始
N 相同且CX不为0? Y SI、DI加一,CX减一 比较DS:SI和ES:DI中字符
循环次数CX设为字符串长度 输入BUF1、BUF2字符串,设置SI、DI 初始化BUF1,BUF2内存单元
Y AL=0 AL=1 ZF=1? N
(2)
DATAS SEGMENT
BUF DB '12345678912345$' BUF2 DB 20 DUP('$') DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,ES:DATAS START:
MOV AX,DATAS MOV DS,AX MOV ES,AX LEA BX,BUF LEA SI,BUF
结束
LEA DI,BUF2 CLD REPNZ CMPSB MOV AX,SI
SUB AX,BX ;计算BUF长度
MOV DX,0 ;将AX中的内容转为10进制输出 MOV BX,10000 DIV BX MOV BX,DX MOV DL,AL ADD DL,30H MOV AH,02H INT 21H
MOV AX,BX MOV BX,1000 MOV DX,0 DIV BX MOV BX,DX MOV DL,AL ADD DL,30H MOV AH,02H INT 21H
相关推荐: