takeiteasy 发表于 2011-4-3 15:15:29

新手求解,关于DELPHI嵌入汇编小疑问。

刚开始接触DELPHI,提出的问题太菜请别见怪。

具体代码如下:
implementation
var
pi:string;
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
pi:='B';
asm
push eax
mov eax,41h
mov pi,eax
pop eax
end
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Button1.Caption:=pi;
end;

end.

当我按下Button1按钮的时候会提示错误,主要错误出在mov eax,41h这里,41H不是A的ASCII码吗?
如果把mov eax,41h改为mov eax,'C' 一样会提示错误,但改为mov eax,字符串变量名   就可以正常执行,为什么不能直接修改寄存器值?

songzihui 发表于 2011-4-3 15:15:54

eax 数据不可写导致的!

eea:Dword;

mov eea,41h

takeiteasy 发表于 2011-4-3 15:16:09

谢谢楼上指点,但后来实验出EAX是可直接修改的,原因是出在string是一个超出32位的变量,所以不能与寄存器直接赋值操作,。把string换成CHAR之类的有长度字符串就可以正常操作。
页: [1]
查看完整版本: 新手求解,关于DELPHI嵌入汇编小疑问。