2020-10-27

DATAS SEGMENT
    STRING1 DB 10H,?,10 DUP(?)
    ;STRING1 单元中分配了存储单元(DB代表单位是字节)
    ;且第一个单元存放的是10H
    ;然后?代表只是分配了存储单元,但是没有定义初值
    ;10 dup (?)表示分配了连续10个存储单元(字)
    ;也就是都只分配了存储单元,但是没有初值
    ;分配后为:10,?,?????????
    STRING2 DB 10H,?,10 DUP(?)
    D1 DB 'MATCH$'
    D2 DB 'NO MATCH$'
DATAS ENDS

CODES SEGMENT

ASSUME CS:CODES,ES:DATAS,DS:DATAS ;CODES 代表代码段名字,DATAS代表数据段名字

START:
        MOV AX,DATAS    ;把数据传给AX
        MOV DS,AX       ;把AX的数据给DS数据段
        LEA DX,STRING1      ;把STRING1的偏移地址放入DX
        MOV AH,0AH      ;键盘输入至缓冲区,DS:DX=缓冲区首
        INT 21H     ;结束指令执行  
        
        MOV DL,0AH      ;这里的0AH是换行符的ASCII码
        MOV AH,02H      ;把DL的待输出的字符的ASCII码显示出来(一个字符)
        INT 21H     ;结束指令执行
        
        MOV AX,DATAS
        MOV DS,AX
        LEA DX,STRING2
        MOV AH,0AH      ;键盘输入至缓冲区
        INT 21H
        
        MOV DL,0AH
        MOV AH,02H      ;显示一个字符,DL=待输出的字符的ASCII码
        INT 21H     ;结束指令执行
        
        MOV AX,DATAS
        MOV ES,AX
        LEA SI,STRING1
        LEA DI,STRING2
        MOV AL,ES:[SI+1]
        MOV BL,DS:[DI+1]
        CMP AL,BL
        JNZ NO
        MOV CL, [SI+1]
        MOV CH,0        ;
        INC SI
        INC DI
        
        CM:
            INC SI
            INC DI
            MOV AL,ES:[SI]
            MOV BL,DS:[DI]
            CMP AL,BL       ;比较两个字符,相同不跳
            JNZ NO
            LOOP CM
            LEA DX,D1
            MOV AH,09H         ;字符串输出,DS:DX=字符串首
            INT 21H             ;结束指令执行 
            JMP EXIT
        
        NO:
            LEA DX,D2
            MOV AH,09H      ;字符串输出,DS:DX=字符串首
            INT 21H
        
        EXIT:
            MOV AH,4CH      ;带返回码结束,AL=返回码
            INT 21H
        
    CODES ENDS
END START
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。