{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.