[Back to DELPHI SWAG index] [Back to Main SWAG index] [Original]

    {
    In answer to a fellow subscriber's request, I recently posted to this list a
    Delphi Assembler procedure to reverse ShortStrings. After someone pointed out
    to me in a private message that my routine was slower than his all-Pascal
    alternative, I tried again, and managed to come up with an asm procedure that
    actually has a (modest) speed advantage. It is presented below, in case
    anyone else can use it.

    --Paul Sobolik
    }
    procedure RevString3(var s: ShortString); assembler;
    asm
      push esi
      push edi

      mov esi,eax
      mov edi,eax
      xor eax,eax
      lodsb
      add edi,eax
      dec edi
      add eax,2
      shr eax,2
      mov ecx,eax
      jecxz @@done
    @@loop:
      mov ax,[esi]
      mov dx,[edi]
      xchg al,ah
      mov [edi],ax
      sub edi,2
      xchg dl,dh
      mov [esi],dx
      add esi,2
      dec ecx
      jnz @@loop
    @@done:
      pop edi
      pop esi
    end;

[Back to DELPHI SWAG index] [Back to Main SWAG index] [Original]