请教:这个程序的有些语句是什么意思啊
请问:这个程序的有些语句是什么意思啊?
;功能; 接收一个字符串,去掉其中的空格后按相反的顺序显示它
;符号常量的定义
MAXLEN = 64
SPACE = ' '
CR = 0DH
LF = 0AH
DSEG SEGMENT
BUFFER DB MAXLEN+1, 0, MAXLEN+1 DUP(0)
STRING DB MAXLEN+3 DUP(0)
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG, DS:DSEG, ES:DSEG
START:
MOV AX, DSEG
MOV DS, AX
MOV ES, AX
MOV DX, OFFSET BUFFER
MOV AH, 10
INT 21H
XOR CH, CH
MOV CL, BUFFER+1
JCXZ OK
CLD
MOV SI, OFFSET BUFFER+2
MOV DI, OFFSET STRING
XOR AL, AL
STOSB
MOV AL, SPACE
PP1: XCHG SI, DI //这里把si,di换了干什么啊
REPZ SCASB //这里比较AL,与DI, di里放的是什么啊
XCHG SI, DI //更晕的是,它又换回来了。
JCXZ PP3 //这里为什么要转.从这开始,下面就完全看
DEC SI //不明白了,它这里的思想到底是怎样的啊?
INC CX
PP2: CMP BYTE PTR[SI], SPACE
JZ PP1
MOVSB
LOOP PP2
PP3: MOV AL, CR
STOSB
MOV AL, LF
MOV [DI], AL
STD
MOV SI, DI
PP4: LODSB
OR AL, AL
JZ OK
MOV DL, AL
MOV AH, 2
INT 21H
JMP PP4
OK: MOV AH, 4CH
INT 21H
CSEG ENDS
END START
------解决方案--------------------
就一次. 这个是为了最后输出时判别字符串结束的个标记字节. 因为输出是反序的, 从最后向前逐个字符输出, 所以这个标记字节就放在了最开始处
;功能; 接收一个字符串,去掉其中的空格后按相反的顺序显示它
;符号常量的定义
MAXLEN = 64
SPACE = ' '
CR = 0DH
LF = 0AH
DSEG SEGMENT
BUFFER DB MAXLEN+1, 0, MAXLEN+1 DUP(0)
STRING DB MAXLEN+3 DUP(0)
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG, DS:DSEG, ES:DSEG
START:
MOV AX, DSEG
MOV DS, AX
MOV ES, AX
MOV DX, OFFSET BUFFER
MOV AH, 10
INT 21H
XOR CH, CH
MOV CL, BUFFER+1
JCXZ OK
CLD
MOV SI, OFFSET BUFFER+2
MOV DI, OFFSET STRING
XOR AL, AL
STOSB
MOV AL, SPACE
PP1: XCHG SI, DI //这里把si,di换了干什么啊
REPZ SCASB //这里比较AL,与DI, di里放的是什么啊
XCHG SI, DI //更晕的是,它又换回来了。
JCXZ PP3 //这里为什么要转.从这开始,下面就完全看
DEC SI //不明白了,它这里的思想到底是怎样的啊?
INC CX
PP2: CMP BYTE PTR[SI], SPACE
JZ PP1
MOVSB
LOOP PP2
PP3: MOV AL, CR
STOSB
MOV AL, LF
MOV [DI], AL
STD
MOV SI, DI
PP4: LODSB
OR AL, AL
JZ OK
MOV DL, AL
MOV AH, 2
INT 21H
JMP PP4
OK: MOV AH, 4CH
INT 21H
CSEG ENDS
END START
------解决方案--------------------
就一次. 这个是为了最后输出时判别字符串结束的个标记字节. 因为输出是反序的, 从最后向前逐个字符输出, 所以这个标记字节就放在了最开始处