各位,帮忙看一下这道题,能给我解释一下吗
DATASEGMENTBUFFERADB 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
LZ是想问代码里为什么会有个笑脸吧,其实我也不知道,坐等LX解释!!!! 解释什么?直接看注释啊 ADD SI,02H
ADD DI,01H
PUSH SI
PUSH DI
MOV BX,ES:
MOV BH,00H
MOV CX,DS:
MOV CH,00H
PUSH CX
其中的这一段不懂 因为:
0A号功能的ds:dx,要求第1个字节表示缓冲区长度,第2字节在调用后返回实际输入的字符数,从第3字节开始才是缓冲区。
所以ADD SI,02H
ADD DI,01H
再说:你这样设置缓冲区全部都是0,写不进东西的,建议lz再多看看书
页:
[1]