Показать сообщение отдельно
  #12  
Старый 16.04.2012, 20:25
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Строка вродь на 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.
Но всё же несколько быстрее (в пару сотен раз) написать
Код:
s:=string(p);
или
Код:
asm
  mov eax, [p]
  mov [s], eax
end;
З.Ы. не знал, что для делфи [P] и P - синонимы. Приятно удивлён. Прям можно писать в стиле ФАСМа.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием