Ich versuche grad eine Funktion zu schreiben die überprüft ob das passwort richtig ist.. naja in der praxis wohl eher unnützlich so wies gemacht wird aber ist ja nur zum üben
mit cmp geht das ja nicht.. Dann hab ich mich im Inet umgeguckt (bzw Links von Balus
asm tut^^) und bin darauf gestoßen:
Zitat:
CMPS (Vergleich zweier Stringelemente)
Syntax: CMPSB, CMPSW
Beschreibung: CMPS vergleicht ein Stringelement (Byte oder Wort) aus dem, durch das Registerpaar DS:SI adressierten, Quellstring mit dem, durch das Registerpaar ES
I adressierten, Zielstring. In Abhängigkeit vom Zustand des Richtungsflags werden das SI- und das DI-Register um 1 (Byte) oder 2 (Wort) erhöht (
DF=0) oder verringert (
DF=1).
Operanden: Keine
Beispiel:
CLD
LEA SI,quellstring
LEA DI,zielstring
CMPSB
Bemerkung: CMPS vergleicht die beiden Operanden, indem er wie CMP den Quelloperanden vom Zieloperanden abzieht. Auch hier wird das Ergebnis durch Setzen der Statusflags angezeigt.
Um mehr als ein Element zu vergleichen, muß dem CMPS-Befehl ein REPE bzw. ein REPNE vorangestellt und die Anzahl der maximal durchzuführenden Vergleiche im CX-Register übergeben werden. Im ersten Fall wird der Vergleich solange wiederholt, bis CX gleich null oder die beiden Elemente nicht mehr übereinstimmen. Im zweiten Fall werden die beiden Strings solange verglichen, bis CX gleich null ist oder zwei Elemente übereinstimmen.
Delphi-Quellcode:
function PW(A: PChar): Pchar;
asm
jmp @go
@pw:
DB '
geheim',0
// Das Passwort
@sne:
DB '
ne ungleich!',0
// Result wenn falsch
@sja:
DB '
jo is richtig :)',0
// Result wenn richtig
@go: CLD
// ab hier wirds komisch^^
mov ESI,A
// lea si,a geht nicht weil lea nicht geht und weil si zu klein ist
lea EDI,@pw
// di zu klein
cmpsb
// vergleichen
jne @ne
// kann man das mit jne machen?
LEA EAX,@sja
// Result := @sja
RET
@ne: LEA EAX,@sne
// Result := @sne
end;
Die Fragen/Probleme stehn schon alle im Quelltext eigentlich
Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."