汇编题目结果不对,比较两个字符串是否相同,MASM的程序,求解释。总是显示Not Equal。谢谢!
IOMACROX,YLEADX,XMOVAH,YINT21HENDMDATASEGMENTSTRING1DB'ding'STRING2DB'ding'NODB13,10,...
IO MACRO X,Y
LEA DX,X
MOV AH,Y
INT 21H
ENDM
DATA SEGMENT
STRING1 DB 'ding'
STRING2 DB 'ding'
NO DB 13,10,'Not Equal!$'
YES DB 13,10,'Equal!$'
DATA ENDS
ISTACK SEGMENT PARA STACK
DB 20H DUP(0)
ISTACK ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:ISTACK,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AX,ISTACK
MOV SS,AX
LEA SI,STRING1
LEA DI,STRING2
MOV CX,4
CLD
REPZ CMPSW
JNZ NOTE ;不相等
IO YES,9 ;相等
JMP EXIT
NOTE: IO NO,9 ;不相等时的情况
EXIT:
MOV AH,4CH
INT 21H
CODE ENDS
END START 展开
LEA DX,X
MOV AH,Y
INT 21H
ENDM
DATA SEGMENT
STRING1 DB 'ding'
STRING2 DB 'ding'
NO DB 13,10,'Not Equal!$'
YES DB 13,10,'Equal!$'
DATA ENDS
ISTACK SEGMENT PARA STACK
DB 20H DUP(0)
ISTACK ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:ISTACK,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AX,ISTACK
MOV SS,AX
LEA SI,STRING1
LEA DI,STRING2
MOV CX,4
CLD
REPZ CMPSW
JNZ NOTE ;不相等
IO YES,9 ;相等
JMP EXIT
NOTE: IO NO,9 ;不相等时的情况
EXIT:
MOV AH,4CH
INT 21H
CODE ENDS
END START 展开
展开全部
4个“字节”的字符串,你用吵旦4次“字”的比较,越界升兆扰后,当猜前然会不一样啦。
你只需要将 REPZ CMPSW 改成 REPZ CMPSB 就对了。
你只需要将 REPZ CMPSW 改成 REPZ CMPSB 就对了。
追问
谢谢您的回答,我弄错了,的确是CMPSB
我的意思就是在CMPSB的情况下结果不对
您再给看看?
追答
抱歉,我疏忽了。
确实还有一处错误:
你没有将ES设置成跟DS相同。
串比较,比的是数据段和附加段中的两个字串。两个串在同一个段中时,应将ES和DS设为相同值。
在第二条指令 MOV DS, AX 后面再加一行 : MOV ES, AX ,就真的行了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询