DATAS SEGMENT
STRING1 DB 'Move the cursor backward.'
;STRING2 DB 'Move the cursor backward.'
MESS1 DB 'Match.',13,10,'$'
MESS2 DB 'NO Match!',13,10,'$'
DATAS ENDS
EXTRA SEGMENT
STRING2 DB 'Move the cursor backward.'
EXTRA ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,ES:EXTRA
START:
MOV AX,DATAS
MOV DS,AX
MOV AX,EXTRA
MOV ES,AX
MOV CX,25
MOV SI,OFFSET STRING1
MOV DI,OFFSET STRING2
REPE CMPSB
JNZ DIFF
JMP SAME
SAME:
MOV AH,09H
LEA DX,MESS1
INT 21H
JMP TAIL
DIFF:
MOV AH,09H
LEA DX,MESS2
INT 21H
JMP TAIL
TAIL:
MOV AH,4CH
INT 21H
CODES ENDS
END START
以上对两个相同字符串的比较,如果我将两个字符串都放在ds中,那么比较的结果是不匹配。
但是我将string2字符串放在es中,就匹配了。
为什么同段寄存器的比较就会失败呢?
------解决方案--------------------
string2 在 extra 段里,和 string1 的 datas 本就不在同一个段啊,一个 ds 怎么指向两个段呢?串比较指令,是对 ds:si 和 es:di 处进行比较,要想 es 和 ds 一样,就要将它们放在同一段里,如果是分在两个段里,也需要通过 group 语句合并在同一个段里;当然了,还是要对 es 赋值以指向相应段的。