[Back to ENCRYPT SWAG index] [Back to Main SWAG index] [Original]
{
 EH> But if it isn't a VAR parameter it IS copied afterwards (out of the
 EH> manual, Inside Turbo Pascal): Value parameters are passed by value or
 EH> by reference depending on the size and type of the parameter. (deleted
 EH> when passed by value). Otherwise a pointer to the value is pushed and
 EH> the procedure or function THEN COPIES the value into a LOCAL storage
 EH> location. (my capitalisation)
Yeah, well that's fine and dandy in theory, but...
 EH> So the startup code of the procedure WILL make local copies of all
 EH> "non-VAR" parameters that are passed "by reference".
get a load of this.
}
program crypt;
procedure cipher2 (s:string; dest:string); assembler;
asm
  push ds;
  lds si, s;
  les di, dest;
  lodsb;
  stosb;
  mov cl, al;
  xor ch, ch;
@@EncryptionLoop:
  lodsb;
  rol al, 2;
  stosb;
  loop @@EncryptionLoop;
  pop ds;
end;
procedure decipher2 (s:string; dest:string); assembler;
asm
  push ds;
  lds si, s;
  les di, dest;
  lodsb;
  stosb;
  mov cl, al;
  xor ch, ch;
@@EncryptionLoop:
  lodsb;
  ror al, 2;
  stosb;
  loop @@EncryptionLoop;
  pop ds;
end;
var notsecret, notsecret2, secret:string;
begin
  notsecret:='This is the secret stuff.';
  writeln;
  writeln('This should NOT be encrypted: "'+notsecret+'"');
  cipher2 (notsecret, secret);
  writeln('This SHOULD be encrypted....: "'+secret+'"');
  decipher2 (secret, notsecret2);
  writeln('This SHOULD NOT be encrypted....: "'+notsecret2+'"');
end.
[Back to ENCRYPT SWAG index] [Back to Main SWAG index] [Original]