Wenn du deine beiden Ver-/Entschlüsselungscodes in Funktionen verpackst, dann kannst du sie ganz einfach mal nacheinander im Delphi-Debugger über einen Speicherblock jagen und schauen was wann warum schief läuft.
PS:
Delphi-Quellcode:
DEC eax
//Zum Byte davor gehen
MOV ecx, [eax]
//Byte Davor speichern
INC eax
//Wieder zu dem noch verschlüsselten zurück
XOR [eax], ecx
//Mit ECX entschlüsseln
Delphi-Quellcode:
MOV ecx, [eax-1] //Byte Davor speichern
XOR [eax], ecx //Mit ECX entschlüsseln
Wobei du auch von vorne nach hinten gehn kannst.
Delphi-Quellcode:
eax := Startposition
temp := Startwert
loop:
temp2 := [eax]
[eax] := [eax] xor temp
temp := temp2
inc eax
goto loop
PPS: dein Vorgehen ist sogar noch unsicherer
denn alles, bis auf das erste Byte kann ohne Kenntnis des Startwertes (der Verschlüsselung) entschlüsselt werden, da man den Startwert der Entschlüsselung kennt.
OK, bei einer so einfachen Verschlüsselung mit einem 1 Byte-Schlüssel braucht man eh nur durchschnittlich 128 Versuche und man hat es auch so entschlüsselt.