在以下示例中无法理解 cmpsb

Having trouble understanding cmpsb in the following example

我正在学习操作系统教程,我遇到了以下块代码,它根据我的变量 "ImageName".

检查磁盘上的文件名

我的困惑来自 rep cmpsb 之前的 push di 行。

    mov       cx, WORD [bpbRootEntries]
    mov       di, 0x0200
.LOOP:
    push      cx
    mov       cx, 0x000B
    mov       si, ImageName
    push      di
    rep  cmpsb
    pop       di
    je        LOAD_FAT
    pop       cx
    add       di, 0x0020
    loop      .LOOP
    jmp       FAILURE

我为 cmpsb 找到的文档指出 "For legacy mode, compare byte at address DS:(E)SI with byte at address ES:(E)DI. The status flags are set accordingly." 在此调用之前推送 di 不会意味着我总是与空值进行比较吗?该代码有效,所以我显然误解了一些东西,但我能找到的每一份文档都暗示该代码不应该有效。

rep cmpsb 指令将使 di 指向两个字符串不同的位置之后。由于这段代码不关心那个位置(只要两个字符串匹配),我们抛出不同之处,只检查 Z 标志以查看我们是否匹配。如果我们不匹配,我们前进 di 足以到达下一个文件名,这是一个常数,因为我们重置 di 回到我们开始的地方。