汇编初学者的问题(判断字符串)

来源:百度知道 编辑:UC知道 时间:2024/09/28 09:13:53
DSEGS SEGMENT
STRING1 DB 'FINE',0DH,0AH,'$'
STRING2 DB 'hello'
STRING3 DB 'hello'
DSEGS ENDS
CSEGS SEGMENT
ASSUME CS:CSEGS,DS:DSEGS
START:MOV AX,DSEGS
MOV DS,AX
LEA SI,STRING2
LEA DI,STRING3
MOV CX,5
CLD
REPZ CMPSB
JZ ANS
JNZ NEXT
ANS: LEA DX,STRING1
MOV AH,09H
INT 21H
NEXT: MOV AH,4CH
INT 21H
CSEGS ENDS
END START

如果STRING2和STRING3相等,ZF=1,那么就应该跳到ANS段了,可是为什么就不会执行呢?
谢谢回答。。。上段程序已经编译成功了,但是重新编译了一个带输入判断的字符串,还是有问题
已经提高分数了。。。

问题解决了。。。

1.字符串比较指令将源地址的一个字节(字)与目的地址的一个字节(字)相比较,根据比较的结果置条件码 。
2.当有重复前缀 REP 时,则比较的是一个数据块,这个数据块的字节(字)数放在 CX 中。每比较一个字节(字),CX 内容减1,直到 CX=0 为止。
3.在块操作时,若 DF=0 则每传送一个字节(字)SI、DI 的内容加1(2),反之则减1(2)

楼主没有指明附加段ES,因为di为附加段的偏移地址
cmpsb 是将DS:[si]与ES:[di]进行比较
默认DS和ES不在同段

要将DS和ES指向同段,才能进行字符串的比较

MOV AX,DSEGS
MOV DS,AX
后加一句
MOV ES,AX

就可以咯

串操作指令必须包含6个条件。
DS ES SI DI DF CX;
以上诸条件中ES没有初始化,所以REPZ只执行了一次就结束了。