对CMPSB指令感到困惑

Hud*_*den 5 assembly nasm 16-bit osdev bootloader

我一直在看这个代码,我对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
Run Code Online (Sandbox Code Playgroud)

我明白它会重复cmpsb cx次,但是如何比较这两个字符串呢?比如说比较"Hey\0"和"hey\0",这个循环比较4个字符串.第一个字符是不同的,因此将设置EFlags寄存器.但是,重复cmpsb指令,下一个字符将是相同的.我可能误解了cmpsb是如何工作的,但看起来这个循环没有正确地比较两个字符串.这个循环实际上有效吗?

小智 13

REP工作的原因是因为rep具有与REPE(F3h)相同的编码.原则上REPE在这里使用是正确的,但是根据你的汇编程序,它可能只是将REP视为正确.

所以实际上你有一个REPE cmpsb,只是你的(dis)汇编程序并不真正知道.