Я следую учебному пособию по операционным системам и наткнулся на следующий блочный код, который проверяет имена файлов на диске по моей переменной «ImageName».
Моя путаница возникает из строки push di
перед rep cmpsb
.
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
состояний "Для устаревшего режима сравните байт по адресу DS: (E) SI с байтом по адресу ES: (E) DI. Флаги состояния установленысоответственно."Разве нажатие di
перед этим вызовом не означает, что я всегда сравниваю пустое значение?Код работает, поэтому я явно что-то неправильно понимаю, но каждый фрагмент документации, который я могу найти, подразумевает, что этот код не должен работать.