以下是两个字符串比较程序片段 REPZ CMPSB如果相等就比较 M0V AL [SI-1] MOV BL ES:[DI-1] XOR AH,AHCMPSB执行时SI,DI自动加1,请问下面MOV AL [SI-1]和MOV BL ES:[DI-1]是什么意思
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/25 16:52:34
以下是两个字符串比较程序片段 REPZ CMPSB如果相等就比较 M0V AL [SI-1] MOV BL ES:[DI-1] XOR AH,AHCMPSB执行时SI,DI自动加1,请问下面MOV AL [SI-1]和MOV BL ES:[DI-1]是什么意思
以下是两个字符串比较程序片段 REPZ CMPSB如果相等就比较 M0V AL [SI-1] MOV BL ES:[DI-1] XOR AH,AH
CMPSB执行时SI,DI自动加1,请问下面MOV AL [SI-1]和MOV BL ES:[DI-1]是什么意思
以下是两个字符串比较程序片段 REPZ CMPSB如果相等就比较 M0V AL [SI-1] MOV BL ES:[DI-1] XOR AH,AHCMPSB执行时SI,DI自动加1,请问下面MOV AL [SI-1]和MOV BL ES:[DI-1]是什么意思
repz cmpsb
如果ds:si和es:di所指向的两个字节相等,则继续比较.
所以如果相等的话,就停止循环.但是这时候si和di已经自动加1了,如果要找不相等的那两个数,就要把si和di减1.
所以MOV AL,[SI-1]和MOV BL,ES:[DI-1]所要执行的,就是把那两个不相等的字节放到al和bl中去.
不过这两条指令有错误.
首先最明显的是两个操作数之间,忘记了逗号.
另外,si-1和di-1都是错误的表达式.汇编语言中,表达式是在汇编时就已经处理好了的.所以正确表达式的书写原则就是,在汇编的时候,表达式的值应当能够准确的计算出来.而汇编时si和di的值并不确定,所以这里错了.
应该用dec指令先把si和di减一,再用mov指令取值.
dec si
MOV AL,[SI]
dec di
MOV BL ES:[DI]
XOR AH,AH ;ah清零