home *** CD-ROM | disk | FTP | other *** search
-
- 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;