[Back to STRINGS SWAG index] [Back to Main SWAG index] [Original]
Procedure ReverseString(var s:string);
var i,j:byte; c:char;
begin
j:=Length(s);
for i:=1 to j div 2 do
begin
c:=s[i];
s[i]:=s[j];
s[j]:=c;
dec(j);
end;
end;
{ ---- BASM 'pointer oriented' version ------------------------------ }
Procedure ReverseAString(var s:string); assembler;
asm
lds SI,s
mov AL,[SI]
xor AH,AH
mov DI,SI
inc SI { SI points to start of s }
add DI,AX { DI points to end of s }
@@0: cmp SI,DI { while SI=DI do ... }
jae @@1
mov AL,[SI]
mov AH,[DI]
mov [SI],AH
mov [DI],AL
inc SI
dec DI
jmp @@0
@@1:
end;
{ Version #2 }
Procedure ReverseAString(var s:string); assembler;
asm
push DS
cld
lds SI,s
mov DI,SI
lodsb
xor AH,AH
add DI,AX { DI points to end of s }
@ReverseLoop: cmp SI,DI { while SI=DI do ... }
jae @ReverseExit
mov AL,[SI]
mov AH,[DI]
mov [SI],AH
mov [DI],AL
inc SI
dec DI
jmp @ReverseLoop
@ReverseExit: pop DS
end;
Function FlipStr(s:string):string; assembler;
asm
push DS
cld
les DI,@Result
lds SI,s
lodsb
stosb
mov CL,AL
xor CH,CH
add DI,CX
@FlipLoop: and CL,CL
jz @FlipExit
lodsb
dec DI
mov ES:[DI],AL
dec CL
jmp @FlipLoop
@FlipExit: pop DS
end;
[Back to STRINGS SWAG index] [Back to Main SWAG index] [Original]