Strings vergleichen mit Nasm
-
Ich bin unter NASM neu, jedoch nicht unter ASM (MASM). Meine Funktion unter masm sieht so aus:
anfang: cmp byte ptr [esi],0 je ende mov al,byte ptr [esi] mov bl,byte ptr [edi] cmp al,bl jne ende inc esi inc edi jmp anfang ende:
Hab die auch ausprobiert, sieht sehr gut aus. Jedoch sieht das ganze unter nasm anders aus:
anfang: cmp byte [esi],0 je ende mov al,byte [esi] mov bl,byte [edi] cmp al,bl jne ende inc esi inc edi jmp anfang ende:
Kann mir einer helfen, denn ich sehe vor lauter Bäumen den Wald nicht mehr
Das Ding will einfach nicht richtig laufen... Hier zur Sicherheit noch das Macro:
%macro CompareText 2 mov esi,%1 mov edi,%2 mov al,0x02 call sowieso ; Halt die Funktion rufen... %endmacro
-
Hi,
ich hab zwr den code bei mir nicht laufen lassen, aber ers cheint mir auf den ersten Blick richtig zu sein. Nur wie überprüfst du nun ob die strings gleich waren? Am carry-flag?
Wenns nicht klappt versuch etwas in dieser art nicht versuchst:; ******************************** ; DS:SI = string1 ES:DI = string2 ; ******************************** xor cx,cx push si lange: cmp [si],0 je vergleich inc si inc cx jmp short laenge vergleich: pop si repe cmpsb
Nun könnte man nach dem carryflag abfragen
gruss
-
hi,
NASM-Beispiel:mov cx, 10 ; << 10 = Stringlänge mov si, String_1 mov di, String_2 cld repe cmpsb je _strings_sind_gleich weitere verarbeitung wenn strings ungleich sing hier strings_sind_gleich: bla bla bla
-
So jetzt müste es gehen:
Funktion: push si laenge: cmp byte [si],0 je vergleich inc cx inc si vergleich: pop si inc cx ; wichtig! repe cmpsb retn
Wenn man das cx nicht um eins erhöht, dann ist das auch gleich:
gut db "Gut",0 guta db "Gut aber...",0 mov si,gut mov di,guta call Funktion