我一直在看这段代码,但对 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 的工作原理,但看起来此循环无法正确比较两个字符串。这个循环实际上有效吗?
最佳答案
REP起作用的原因是因为rep与REPE(F3h)具有相同的编码。原则上,在这里使用REPE是正确的事情,但是根据您的汇编程序的不同,REPE可能正确无误。
因此,实际上您那里有一个REPE cmpsb,只是您的(反汇编程序)汇编器并不真正知道。
关于assembly - 与CMPSB指令混淆,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10552579/