【发布时间】:2012-05-20 02:56:01
【问题描述】:
我一直在查看这段代码,我对 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 的工作原理,但看起来这个循环没有正确比较两个字符串。这个循环真的有效吗?
【问题讨论】:
-
嗯,你为什么没有在 CPU 手册中看到 CMPSB 的工作原理?
-
嗯 @Alex 我做到了。混乱是由于 REP 指令造成的。
-
REP 不是它自己的指令。它是一个指令前缀,IOW 指令修饰符。文档也解释了它。
标签: assembly nasm bootloader 16-bit osdev