Verwechseln mit CMPSB Anleitung
Schaue ich diesen code, und ich bin verwirrt über die rep cmpsb Linie.
.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
Ich verstehe, dass es wiederholt cmpsb cx mal, aber wie funktioniert das vergleichen von zwei strings? Nehmen wir zum Beispiel den Vergleich wurde "Hey\0" und "hey\0" und diese Schleife war Vergleich 4 Zeichenketten. Die ersten Zeichen sind andere und die EFlags register entsprechend gesetzt werden. Jedoch, die cmpsb Anweisung wird wiederholt, und das nächste Zeichen wäre das gleiche. Ich kann Missverständnisse, wie cmpsb funktioniert, aber es sieht aus wie diese Schleife wird nicht richtig vergleichen Sie zwei strings. Funktioniert diese Schleife ist in der Tat Arbeit?
- Ähm, warum siehst du nicht, wie CMPSB arbeitet in einem CPU-Handbuch?
- Ähm @Alex ich habe. Die Verwirrung war aufgrund der REP instruction.
- REP ist nicht einer eigenen Anleitung. Es ist eine Anweisung prefix, IOW-Anweisung Modifikator. Die Dokumentation erklärt es auch.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Grund REP funktioniert, weil rep hat die gleiche Codierung wie REPE (F3h). Im Prinzip REPE ist das richtige hier zu verwenden, aber je nach assembler könnte es gerade nehmen REP korrigieren.
So, in Wirklichkeit haben Sie eine REPE cmpsb, es ist nur, dass das (dis -) assembler nicht wirklich wissen.
Ich glaube, Sie haben zu verwenden, die REPE oder REPNE Präfix mit cmpsb (Es ist schon eine Weile).
repe
(repeat while equal) oderrepne
(repeat while not equal).Aus meinem Verständnis, denn ich werde durch die gleiche übung auf brokenthorn, vergleicht er das erste byte der
Imagename
mit dem ersten byte der fat-Eintrag, wenn Sie die gleichen.Es weiter bis alle 11 Zeichen (Dateiname und Erweiterung) bei der ersten Unterschied. Es wird die ZF-flag, wenn Sie identisch sind, und die ZF-flag bleiben wird gelöscht.
Also nach einem Vergleich des gesamten mit dem Namen, es wird dann direkt zum laden der fat-Eintrag, wenn Sie die gleichen. Wenn nicht, laden Sie den nächsten Eintrag in der Liste und vergleichen Sie diese mit dem Namen.