- Код: Выделить всё
function Test2(Value:ShortInt):Integer; register;
begin
{$ASMMODE intel}
asm
cbw //переводим al в ax
cwde //переводим ax в eax
end;
end;
код тестирования :
- Код: Выделить всё
procedure TForm1.Button2Click(Sender: TObject);
VAR I:shortInt;
begin
I:=-10;
Caption:=IntToStr(Test2(I));
end;
видим что все ок
Теперь пишем процедуру как метод класса, в данном случае метод формы:
- Код: Выделить всё
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ private declarations }
public
function Test1(Value:ShortInt):Integer; register;
{ public declarations }
end;
Реализация:
- Код: Выделить всё
function TForm1.Test1(Value: ShortInt): Integer; register;
begin
{$ASMMODE intel}
asm
cbw
cwde
end;
end;
Тест:
- Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
VAR I:shortInt;
begin
I:=-10;
Caption:=IntToStr(Test1(I));
end;
Видим, что в Caption записали мусор, Почему? Ассемблер в методах класса работает по другому? Если да, то в чем отличие..