Asp.net 学习资料

伦惠峰

写一个程序,要求输入两条字符串,判断它们是否相同,不能使

 DATA  SEGMENT
      INPUT1  DB         81 ;定义了第一个要输入语句的要使用的空间
               DB         ?
               DB         81  DUP(0)
      INPUT2  DB         81 ;定义了第二个要输入语句的要使用的空间
               DB         ?
               DB         81   DUP(0)
       MESS1  DB        "THE STRING SAME",13,10,"$"
       MESS2  DB        "THE STRING DON't same",13,10,"$"
       MESS3  DB        "INPUT THE FIRST STRING",13,10,"$"
       MESS4  DB        "INPUT THE SECONDE STRING",13,10,"$"
       MESS5  DB        "YOU HAVE EXIT. ^__^",13,10,"$"
        DATA  ENDS
        CODE  SEGMENT
              ASSUME    CS:CODE,DS:DATA
      START:
              MOV       AX,DATA
              MOV       DS,AX
              LEA       DX,MESS3
              CALL      DISP ;调用DISP函数输出MESS3
              LEA       DX,INPUT1
              MOV       SI,DX
              CALL      INPUT  ;调用INPUT函数输入INPUT1字符串
              LEA       DX,MESS4
              CALL      DISP;调用DISP函数输出MESS4
              LEA       DX,INPUT2
              MOV       DI,DX
              CALL      INPUT ;调用INPUT函数输入INPUT2字符串
              MOV       DH,0 ;DH清零
              MOV       DL,[DI+1] ;把第二条字符串的长度传到DL
              MOV       CH,0 ;CH清零
              MOV       CL,[SI+1] ;把第一条字符串的长度传到CL
              CMP       CL,DL ;比较第一条和第二条字符串的长度是否一样,不一样
              JNZ       P1     ;就转到P1处理
              INC       SI
              INC       SI
              INC       DI
              INC       DI
;SI,DI都自加2,也就是让它们分别指向第一条和第二条字符串实质内容的的首地址。
       NEXT: ;通过循环CX次,一个一个的判断两条字符串是否一致.
              MOV      AL,[SI]
              MOV      BL,[DI]
              CMP      AL,BL
              JNZ       P1 ;如果出现不一样,转到P1处理
              INC       SI
              INC        DI
              LOOP      NEXT ;循环结束,表明一致,进入P2处理

         P2:  LEA       DX,MESS1
              CALL      DISP
              JMP       START


         P1:  LEA       DX,MESS2
              CALL      DISP
              JMP       START

   CHECKEXIT  PROC ;检查是否退出,如果出现单个字符'Q'就表示退出.
              PUSH      AX
              MOV       AL,[SI]
              CMP       AL,'Q'
              JNZ       C1
              LEA       DX,MESS5
              CALL      DISP
              MOV       AH,4CH
              INT       21H
   CHECKEXIT  ENDP

        DISP  PROC ;定义DISP函数,调用09H的DOS指令,输出字符串
              MOV       AH,09H
              INT       21H
              RET
        DISP  ENDP

       INPUT  PROC ;定义INPUT函数,在DX开始的地址,输入字符串
                     ;且同时添加'回车','换行','结束',符号。方便以后使用
                     ;输入完毕后,输出刚才输入的字符串
              PUSH      AX
              PUSH      CX
              PUSH      BX
              PUSH      SI   ;把AX,CX,BX放到栈里面,做好现场保护
              MOV      SI,DX ;把DX里面保存的首地址送到SI里面
              MOV      AH,0AH
              INT       21H
              MOV      CH,0 ;清零
              MOV      BX,0 ;清零
              MOV      CL,[SI+1] ;把字符串的长度送到CL
              INC       SI
              INC       SI ;SI自加2,也就是让它指向字符串实质内容的的首地址。
              CMP       CL,1 ;检查字符串长度是否是1,如果不是,就肯定
                              ;不是'Q'---退出指令,跳过检查,直接转到C1处理
              JNZ        C1 ;字符串等于1,检查是否是退出指令
              CALL      CHECKEXIT;检查是否退出

         C1:  MOV       BX,SI
              ADD       BX,CX ;把SI+CX的位置传到BX,也就是刚输入完的字符串
                                 ;结束的下一个地址
              MOV       [BX],BYTE PTR 0DH ;添加回车符号
              ADD       BX,1
              MOV       [BX],BYTE PTR 0AH ;添加换行符号
              ADD       BX,1
              MOV       [BX],BYTE PTR '$'    ;添加结束符号

              MOV       DX,SI
              CALL      DISP                 ;输出该字符串

              POP       SI
              POP       BX
              POP       CX
              POP       AX             ;现场保护的内容还原
              RET
       INPUT  ENDP
        CODE  ENDS
              END       START

posted on 2007-08-13 21:50  伦惠峰  阅读(594)  评论(0)    收藏  举报

导航