Строка вродь на 0 заканчивается. $20 - пробел.
Модификация для Delphi 2009+, чуть меньше переменных и чуть логичнее:
Код:
program Project7;
{$APPTYPE CONSOLE}
uses
Dialogs;
Function PointerToStr(P: Pointer): String;
Var
B: Char;
begin
B:=#1;
Result:= '';
While B <> #0 Do
begin
Asm
mov eax, [P]
add [P], 2
mov ax, [eax]
mov [b], ax
end;
if B <> #0 Then Result:= Result + B;
end;
end;
var
s: String;
begin
s := 'Hello, world!';
ShowMessage(PointerToStr(Pointer(s)));
end.
Но всё же несколько быстрее (в пару сотен раз) написать
или
Код:
asm
mov eax, [p]
mov [s], eax
end;
З.Ы. не знал, что для делфи [P] и P - синонимы. Приятно удивлён. Прям можно писать в стиле ФАСМа.
