鱼C论坛

 找回密码
 立即注册
查看: 1704|回复: 0

代码题~

[复制链接]
发表于 2012-12-4 20:52:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
有点长要求1、        从键盘输入两个字符串:A串,例如’software’;B串,例如’school of software engineering’;
2、        判断A在B中是否存在,如果存在,输出“FOUND”,反之,输出“NOT FOUND”;
3、        (确定一个B串中多处存在A串的例子),用一个C串去替换A串(A与C长度不一样,取代所有相同的串),替换后的结果在显示器上显示。

实现了前两个功能,差第三个。我想问缓冲区最多可以定义几个?只有di和si可以指向缓冲区吗??
第三个给个思路
        DATA  SEGMENT

     BUFFERA  DB        32          ;两段缓冲区,为什么是32???
              DB        0
              DB        32 DUP(0)
     BUFFERB  DB        32
              DB        0
              DB        32 DUP(0)
     BUFFERC  DB        32
              DB        0
              DB        32 DUP(0)
     BUFFERD  DB        32
              DB        0
              DB        32 DUP(0)
           PROMPTSTRINGA  DB        'input A string:',0AH,0DH,'$'       ;输出语句
           PROMPTSTRINGB  DB        'input B string:',0AH,0DH,'$'
           PROMPTSTRINGC  DB        'input C string TO replace A :',0AH,0DH,'$'
       PROMPTSTRINGENTER  DB        0AH,0DH,'$' ;回车换行结束?




FOUNDSTRING  DB        'FOUND IT',0AH,0DH,'$'

          NOTFOUNDSTRING  DB        'NOT FOUND IT',0AH,0DH,'$'

        DATA  ENDS

        CODE  SEGMENT
              ASSUME    CS:CODE,DS:DATA

      START:
;input A B string
              MOV       DX,DATA
              MOV       DS,DX

              MOV       DX,OFFSET PROMPTSTRINGA ;
              MOV       AH,09H      ;功能号代表字符串输出
              INT       21H         ;dos功能调用in 21h
              MOV       DX,SEG BUFFERA          ;字符串输入,获得段地址
              MOV       DS,DX
              MOV       DX,OFFSET BUFFERA
              MOV       AH,0AH
              INT       21H

              MOV       DX,OFFSET PROMPTSTRINGENTER
              MOV       AH,09H
              INT       21H



              MOV       DX,OFFSET PROMPTSTRINGB
              MOV       AH,09H
              INT       21H
              MOV       DX,SEG BUFFERB
              MOV       ES,DX
              MOV       DX,OFFSET BUFFERB
              MOV       AH,0AH
              INT       21H

              MOV       DX,OFFSET PROMPTSTRINGENTER
              MOV       AH,09H
              INT       21H



              MOV       DX,OFFSET PROMPTSTRINGENTER
              MOV       AH,09H
              INT       21H
              MOV       DX,OFFSET PROMPTSTRINGC
              MOV       AH,09H
              INT       21H
              MOV       DX,SEG BUFFERC
              MOV       ES,DX
              MOV       DX,OFFSET BUFFERC
              MOV       AH,0AH
              INT       21H

              MOV       DX,OFFSET PROMPTSTRINGENTER
              MOV       AH,09H
              INT       21H

              MOV       DX,SEG BUFFERD


;look for if A in B
              MOV       SI,OFFSET BUFFERA       ;获得字符串A的偏移地址
              MOV       DI,OFFSET BUFFERB
              ADD       SI,02H      ;指向
              ADD       DI,01H      ;the same
              PUSH      SI          ;干嘛push啊??
              PUSH      DI

              MOV       BX,ES:[DI]  ;  字符串B长度
              MOV       BH,00H      ;干嘛的?因为是输的是字节?

              MOV       CX,DS:[SI-01H]          ;为什么-1? 第2字节将存放实际输入抵符个数
              MOV       CH,00H
              PUSH      CX          ;A的长度?   第二层循环次数
      AGAIN:
              POP       CX          ;   循环开始了????
              POP       DI
              INC       DI          ;
              POP       SI

              PUSH      SI          ;
              PUSH      DI
              PUSH      CX
        REPZ  CMPSB                 ;字符串比较
              JZ        FOUND       ;判断是否结束
              SUB       BL,01H      ;B-1后的长度
              JZ        NOTFOUND    ;         
    JMP       AGAIN
      FOUND:  MOV       DX,OFFSET FOUNDSTRING
              MOV       AH,09H
              INT       21H

              JMP       ENDPRO

   NOTFOUND:  MOV       DX,OFFSET NOTFOUNDSTRING
              MOV       AH,09H
              INT       21H
;USE C TO REPLACE A






     ENDPRO:  MOV       AX,4C00H
              INT       21H

        CODE  ENDS
              END       START
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 08:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表