下一站 发表于 2011-12-11 19:23:59

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

      DATASEGMENT
   BUFFERADB      32 DUP(?)
   BUFFERBDB      32 DUP(?)
   STRINGADB      'input string A:',0AH,0DH,'$'
   STRINGBDB      'input string B:',0AH,0DH,'$'
STRINGENTERDB      0AH,0DH,'$'
FOUNDSTRINGDB      'FOUND',0AH,0DH,'$'
          NOTFOUNDSTRINGDB      'NOT FOUND',0AH,0DH,'$'
      DATAENDS

      CODESEGMENT
            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:
            MOV       BH,00H

            MOV       CX,DS:
            MOV       CH,00H
            PUSH      CX
      AGAIN:
            POP       CX
            POP       DI
            INC       DI
            POP       SI

            PUSH      SI
            PUSH      DI
            PUSH      CX
      REPZCMPSB
            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

      CODEENDS
            END       START

api 发表于 2011-12-11 20:41:13

LZ是想问代码里为什么会有个笑脸吧,其实我也不知道,坐等LX解释!!!!

ever.g 发表于 2011-12-11 21:13:48

解释什么?直接看注释啊

下一站 发表于 2011-12-11 22:22:46

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

            MOV       BX,ES:
               MOV       BH,00H

            MOV       CX,DS:
               MOV       CH,00H
               PUSH      CX
其中的这一段不懂

zzmatrix 发表于 2011-12-12 01:14:08

因为:
0A号功能的ds:dx,要求第1个字节表示缓冲区长度,第2字节在调用后返回实际输入的字符数,从第3字节开始才是缓冲区。
所以ADD       SI,02H
      ADD       DI,01H

再说:你这样设置缓冲区全部都是0,写不进东西的,建议lz再多看看书
页: [1]
查看完整版本: 各位,帮忙看一下这道题,能给我解释一下吗