鱼C论坛

 找回密码
 立即注册
查看: 2698|回复: 4

各位,帮忙看一下这道题,能给我解释一下吗

[复制链接]
发表于 2011-12-11 19:23:59 | 显示全部楼层 |阅读模式

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

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

x
        DATA  SEGMENT
     BUFFERA  DB        32 DUP(?)
     BUFFERB  DB        32 DUP(?)
     STRINGA  DB        'input string A:',0AH,0DH,'$'
     STRINGB  DB        'input string B:',0AH,0DH,'$'
STRINGENTER  DB        0AH,0DH,'$'
FOUNDSTRING  DB        'FOUND',0AH,0DH,'$'
          NOTFOUNDSTRING  DB        'NOT FOUND',0AH,0DH,'$'
        DATA  ENDS

        CODE  SEGMENT
              ASSUME    CS:CODE,DS:DATA

      START:
              MOV       DX,DATA
              MOV       DS,DX

              ;input string A
              MOV       DX,OFFSET STRINGA
              MOV       AH,09H
              INT       21H
              MOV       DX,SEG BUFFERA
              MOV       DS,DX
              MOV       DX,OFFSET BUFFERA
              MOV       AH,0AH
              INT       21H

              ;change line
              MOV       DX,OFFSET STRINGENTER
              MOV       AH,09H
              INT       21H

              ;input string B
              MOV       DX,OFFSET STRINGB
              MOV       AH,09H
              INT       21H
              MOV       DX,SEG BUFFERB
              MOV       ES,DX
              MOV       DX,OFFSET BUFFERB
              MOV       AH,0AH
              INT       21H

              ;change line
              MOV       DX,OFFSET STRINGENTER
              MOV       AH,09H
              INT       21H

              ;look for A in B
              MOV       SI,OFFSET BUFFERA
              MOV       DI,OFFSET BUFFERB

              ADD       SI,02H
              ADD       DI,01H
              PUSH      SI
              PUSH      DI

              MOV       BX,ES:[DI]
              MOV       BH,00H

              MOV       CX,DS:[SI-01H]
              MOV       CH,00H
              PUSH      CX
      AGAIN:
              POP       CX
              POP       DI
              INC       DI
              POP       SI

              PUSH      SI
              PUSH      DI
              PUSH      CX
        REPZ  CMPSB
              CMP       CX,0
              JZ        FOUND
              SUB       BL,01H
              JZ        NOTFOUND
              JMP       AGAIN
      FOUND:  MOV       DX,OFFSET FOUNDSTRING
              MOV       AH,09H
              INT       21H
              JMP       ENDPRO      ;if find,end the program

   NOTFOUND:  MOV       DX,OFFSET NOTFOUNDSTRING
              MOV       AH,09H
              INT       21H

     ENDPRO:  MOV       AX,4C00H
              INT       21H

        CODE  ENDS
              END       START
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-12-11 20:41:13 | 显示全部楼层
LZ是想问代码里为什么会有个笑脸吧,其实我也不知道,坐等LX解释!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-12-11 21:13:48 | 显示全部楼层
解释什么?直接看注释啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-12-11 22:22:46 | 显示全部楼层
ADD       SI,02H
               ADD       DI,01H
               PUSH      SI
               PUSH      DI

              MOV       BX,ES:[DI]
               MOV       BH,00H

              MOV       CX,DS:[SI-01H]
               MOV       CH,00H
               PUSH      CX
其中的这一段不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-12-12 01:14:08 | 显示全部楼层
因为:
0A号功能的ds:dx,要求第1个字节表示缓冲区长度,第2字节在调用后返回实际输入的字符数,从第3字节开始才是缓冲区。
所以ADD       SI,02H
      ADD       DI,01H

再说:你这样设置缓冲区全部都是0,写不进东西的,建议lz再多看看书
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-10-8 14:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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