unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; TCsdner = class(TObject)
private
FName: string;
FLevel: string;
FScore: Integer;
public
constructor Create(const AName: string; const ALevel: string = 'low'; const AScore: Integer = 0); virtual;
class function IsPureMan: Boolean;
procedure GiveScore(const AScore: Integer); virtual;
procedure RecvScore(const AScore: Integer); virtual;
published
property Score: Integer read FScore stored False default 0;
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
const
SCORE: Integer = 100;
var
LZ, Me: TCsdner;
begin
if TCsdner.IsPureMan then
ShowMessage('Pure Man!');
LZ := TCsdner.Create('LZ', 'high', 10000);
Me := TCsdner.Create('Me');
try
LZ.GiveScore(SCORE);
Me.RecvScore(SCORE);
ShowMessageFmt('LZ: %d; Me: %d', [LZ.Score, Me.Score]);
finally
Me.Free;
LZ.Free;
end;
ExitThread(0);
end;{ TCsdner }constructor TCsdner.Create(const AName, ALevel: string;
const AScore: Integer);
begin
FName := AName;
FLevel := ALevel;
FScore := AScore;
end;class function TCsdner.IsPureMan: Boolean;
asm
MOV @Result, True
end;procedure TCsdner.GiveScore(const AScore: Integer);
asm
SUB Self.FScore, EDX
end;procedure TCsdner.RecvScore(const AScore: Integer);
asm
ADD Self.FScore, EDX
end;end.
没事写着玩儿的
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; TCsdner = class(TObject)
private
FName: string;
FLevel: string;
FScore: Integer;
public
constructor Create(const AName: string; const ALevel: string = 'low'; const AScore: Integer = 0); virtual;
class function IsPureMan: Boolean;
procedure GiveScore(const AScore: Integer); virtual;
procedure RecvScore(const AScore: Integer); virtual;
published
property Score: Integer read FScore stored False default 0;
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
const
SCORE: Integer = 100;
var
LZ, Me: TCsdner;
begin
if TCsdner.IsPureMan then
ShowMessage('Pure Man!');
LZ := TCsdner.Create('LZ', 'high', 10000);
Me := TCsdner.Create('Me');
try
LZ.GiveScore(SCORE);
Me.RecvScore(SCORE);
ShowMessageFmt('LZ: %d; Me: %d', [LZ.Score, Me.Score]);
finally
Me.Free;
LZ.Free;
end;
ExitThread(0);
end;{ TCsdner }constructor TCsdner.Create(const AName, ALevel: string;
const AScore: Integer);
begin
FName := AName;
FLevel := ALevel;
FScore := AScore;
end;class function TCsdner.IsPureMan: Boolean;
asm
MOV @Result, True
end;procedure TCsdner.GiveScore(const AScore: Integer);
asm
SUB Self.FScore, EDX
end;procedure TCsdner.RecvScore(const AScore: Integer);
asm
ADD Self.FScore, EDX
end;end.
没事写着玩儿的
2、Result 和 @Result 区别我也不太明白,内嵌汇编里就用 @Result ?
3、后面两句汇编中的Self确实可以用[EAX],但不知道原因……原来两句中的Self是我试验出来的,EDX是看CPU窗口才改的,原来我写的类似这样:ADD FScore, EAX。因为当时我想,FScore就是个私有成员,不需要Self来引用;还有函数的第一个参数是EAX吧,EDX不是第二个参数吗?
—
请大虾解惑!