我一直在看这段代码,但对 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/

10-11 18:24