我一直在看这段代码,对于rep cmpsb这行有些困惑。
.LOOP:
push cx
mov cx, 0x000B ; eleven character name
mov si, ImageName ; image name to find
push di
rep cmpsb ; test for entry match
pop di
je LOAD_FAT
pop cx
add di, 0x0020 ; queue next directory entry
loop .LOOP
jmp FAILURE
我知道它会重复执行cmpsb指令cx次,但是它是如何比较两个字符串的呢?举个例子,如果比较的是"Hey\0"和"hey\0"这两个4个字符的字符串。第一个字符不同,所以EFlags寄存器会相应地被设置。但是,cmpsb指令会被重复执行,接下来的字符将会是相同的。我可能误解了cmpsb的工作原理,但是看起来这个循环并没有正确比较两个字符串。这个循环是否实际上能够工作呢?