#pas
Var Str, S : string;
begin
Str := 'Вася Пупкин'; // здесь Str - это НЕ "Вася Пупкин". Это указатель(адрес) на первую ячейку памяти где хранятся символы "Вася Пупкин"
S := Str; // а здесь в S тоже не "Вася Пупкин", а указатель на указатель Str, который рассказывает S где находятся символы "Вася Пупкин"
// И только, если написать
S := S + Str; // то будет выделен новый участок памяти (с запасом) и туда скопируются символы расположенные по адресу (S(Str) и Str)
// и само S получит новый адрес новой области памяти где будут храниться символы "Вася ПупкинВася Пупкин"
end;
Начинать надо с ассемблера