当前位置: 代码迷 >> 汇编语言 >> 比较两个字符串务须把两个字符串放在两个段寄存器吗
  详细解决方案

比较两个字符串务须把两个字符串放在两个段寄存器吗

热度:169   发布时间:2016-05-02 04:36:12.0
比较两个字符串必须把两个字符串放在两个段寄存器吗?
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 赋值以指向相应段的。
  相关解决方案