汇编语言的问题(温柔小刀的问题)
实现两个字符串的比较子程序描述:
;子程序STRCMP
;功能:比较两个字符串
;入口参数:DS:SI=字符串1的首地址
ES:DI=字符串2的首地址
;出口参数:AX=0,表示两个字符串相同
;说明:设字符串均以0为结束标志
STRCMP PROC
CLD
PUSH DI
XOR AL,AL
MOV CX,0FFFFH
NEXT:SCASB
JNZ NEXT
NOT CX
POP DI
REPZ CMPSB
MOV AL,[SI-1]
MOV BL,ES:[DI-1]
XOR AH,AH
MOV BH,AH
SUB AX,BX
RET
STRCMP ENDP
我的问题:
XOR AL,AL
MOV CX,0FFFFH
NEXT:SCASB
JNZ NEXT
NOT CX
这几个语句的作用是什么?老师说第一句是先测试一个字符串长度,NOT CX
这句是取得重复的次数,不能理解,这是怎么取得的?SCASB的作用是AL减去DI所指向的内存中存储的字符
的ASCII码,XOR AL,AL后,AL=0,字符串是以0结尾的,这样就能扫描完字符串,这是可以理解的,可是关
于字符串的长度的计数,也就是取得重复次数怎么用NOT CX。现在假设重复了5次,CX<----CX-5,即0FFFFH
减去5,这NOT CX是取得重复次数,真不能理解。