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)汇编程序并不真正知道.