在线求高手修改汇编程序
题目:编写一个字符串程序,比较2个字符串STRING1和STRING2所含字符是否相同,如果相同,则将result单元清零;否则,将第一个不同字符的地址送往result单元。
以下是我写的程序:
DATA SEGMENT
STRING1 DB 'HUAGE'
STRING2 DB 'HUADI'
result DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV SI,OFFSET STRING1
MOV DI,OFFSET STRING2
MOV CX,5H
CLD
CMPSB
REPZ CMPSB
JZ SINE
MOV AL,[SI-1]
MOV result,AL
JMP DONE
SINE:MOV AL,0
MOV result,AL
JMP DONE
DONE:MOV AH,4CH
INT 21H
CODE ENDS
END START
问题出现了,两字符串不同的时候,能够满足题目要求,不同的时候却不能实现清零,求高手帮忙!!!
追问:我运行了下,你的结果出来的并不是“将第一个不同字符的地址送往result单元”,不符合题目要求,还有,刚忘记说了,题目还要求使用串操作指令CMPSB和重复前缀REPZ来实现,继续求改写,CLD就是清零吧?
答案:DATA SEGMENT
STRING1 DB 'HUAGE'
STRING2 DB 'HUADI'
RESULT DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, ES:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV ES, AX
MOV RESULT, 0 ;先清零.
MOV SI, OFFSET STRING1
MOV DI, OFFSET STRING2
MOV CX, 5H
LLL:
MOV AL, [SI]
CMP AL, [DI]
JZ ZZZ
MOV RESULT, SI ;不同时,保存地址.
JMP DONE
ZZZ:
INC SI
INC DI
LOOP LLL
DONE:
MOV AH, 4CH
INT 21H
CODE ENDS
END START
其他:MOV CX,5H
CLD
CMPSB
REPZ CMPSB
这段程序其实比较了6次,所以就算两字符串相同,你也得不到比较相等的结果。去掉前面的
那个 CMPSB 就可以了。
上一个:汇编语言和高级语言的问题
下一个:在什么操作系统上学习汇编