回 帖 发 新 帖 刷新版面

主题:为什么不能正确比较奇数位上的字符

CRLF     MACRO
         MOV      AH,02H
         MOV      DL,0DH
         INT      21H
         MOV      AH,02H
         MOV      DL,0AH
         INT      21H
ENDM
DATA     SEGMENT
MESS1    DB       'MATCH',0DH,0AH,'$'
MESS2    DB       'NO MATCH',0DH,0AH,'$'
MESS3    DB       'INPUT STRING1:',0DH,0AH,'$'
MESS4    DB       'INPUT STRING2:',0DH,0AH,'$'
MAXLEN1  DB       81
ACTLEN1  DB       ?
STRING1  DB       81 DUP(?)
MAXLEN2  DB       81
ACTLEN2  DB       ?
STRING2  DB       81 DUP(?)
DATA     ENDS
STACK    SEGMENT  STACK
STA      DB       50 DUP(?)
TOP      EQU      LENGTH  STA
STACK    ENDS
CODE     SEGMENT
ASSUME   CS:CODE,DS:DATA,ES:DATA;SS:STACK
START:   MOV      AX,DATA
         MOV      DS,AX
         MOV      ES,AX
         MOV      AX,STACK
         MOV      SS,AX
         MOV      SP,TOP
         MOV      AH,09
         MOV      DX,OFFSET  MESS3
         INT      21H
         MOV      AH,0AH
         MOV      DX,OFFSET  MAXLEN1
         INT      21H
         CRLF
         MOV      AH,09H
         MOV      DX,OFFSET  MESS4
         INT      21H
         MOV      AH,0AH
         MOV      DX,OFFSET  MAXLEN2
         INT      21H
         CRLF
         CLD
         MOV      SI,OFFSET   STRING1
         MOV      CL,[SI-1]
               
         MOV      CH,00H
         MOV      SI,OFFSET   STRING2
         MOV      DI,OFFSET   STRING1

KKK:     CMPSB         
         JNZ       GGG
         INC      DI
         INC      SI         
         LOOP     KKK
         MOV      AH,09H
         MOV      DX,OFFSET  MESS1
         INT      21H
         JMP      PPP
GGG:     MOV      AH,09H
         MOV      DX,OFFSET  MESS2
         INT      21H
PPP:     MOV      AX,4C00H
         INT      21H
CODE     ENDS
END      START



以上是字符串比较程序
但是以上程序只能比较奇数位的字符,偶数位上的不能正确解释,请指教

回复列表 (共1个回复)

沙发

因为movsb本身就包含了di和si加一的过程,楼主人为为其二者增一当然只能比较奇位数了。
可改为:
KKK:     CMPSB         
         JNZ       GGG
         LOOP     KKK

我来回复

您尚未登录,请登录后再回复。点此登录或注册