[Back to STRINGS SWAG index] [Back to Main SWAG index] [Original]
{TPAS -> ASMB}
{$A+,B-,D+,E-,F-,G+,I-,L+,N-,O-,P-,Q-,R-,S-,T-,V-,X-}
{$M 8192,0,655360}
PROCEDURE ChangeChars(var S: string; Old, New: char);
begin
while Pos(Old, S) > 0 do
S[Pos(Old, S)] := New;
end;
{-----------------------------------------------------}
procedure ChangeCharsASM( VAR s1: string; Old,New : char);
begin
asm
push es
push di
push ds
push si
mov cx,word ptr S1[2] { ds:si -> S1 } {get}
mov ds,cx
mov si,word ptr S1
LodsB { al := ds:si }
{ inc si }
mov si,di { es:di -> ds:si }
mov es,cx
mov cx,ax { cx := length(s);}
@looper: { for I:=cx down to 1 do }
LodsB { al := ds:si }
{ inc si }
cmp al,old { if al= old then begin }
jne @skip_me { di := si -1 }
mov di,si {}
dec di {}
mov al,new {}
stosb { es:id := new; }
mov al,old
{ end; }
@skip_me:
loop @looper { dec cx; loop if cx <> 0 }
pop si
pop ds
pop di
pop es
end;
end;
var S : string;
begin
S :='Hemmo!';
changeChars(S,'m','l');
writeln(S);
changeCharsASM(S,'l','m');
writeln(s);
end.
[Back to STRINGS SWAG index] [Back to Main SWAG index] [Original]