Oh warte mal. (Alles wieder löschen...)
Deine MemoryAsString() ist auch fehlerhaft. Per CopyMemory kopierst du nicht einzelne Bits, sondern ganze Bytes. Deshalb ist diese Codesequenz auch falsch:
Delphi-Quellcode:
CopyMemory(@buffer, p, 1);
if buffer then
result := result + '1'
Dh. der Output ist womöglich auch inkorrekt!
Den Assembler Code möchte ich momentan nicht entziffern, aber ich schätze mal, da sind auch welche Fehler. Und warum das Ganze in Assembler? Geht ja auch ganz normal?!
probier
Delphi-Quellcode:
procedure XorMemBlock(Source1, Source2, Destination: PByte; Count: Integer);
begin
while Count > 0 do
begin
Destination^ := Source1^ xor Source2^;
inc(Source1);
inc(Source2);
inc(Destination);
end;
end;