在以下示例中无法理解 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
回到我们开始的地方。
我正在学习操作系统教程,我遇到了以下块代码,它根据我的变量 "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
回到我们开始的地方。