看流星社区

 找回密码
 注册账号
查看: 2740|回复: 0

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

[复制链接]

该用户从未签到

发表于 2011-4-3 15:15:29 | 显示全部楼层 |阅读模式
刚开始接触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,字符串变量名   就可以正常执行,为什么不能直接修改寄存器值?

该用户从未签到

发表于 2011-4-3 15:15:54 | 显示全部楼层
eax 数据不可写导致的!

eeaword;

mov eea,41h

该用户从未签到

 楼主| 发表于 2011-4-3 15:16:09 | 显示全部楼层
谢谢楼上指点,但后来实验出EAX是可直接修改的,原因是出在string是一个超出32位的变量,所以不能与寄存器直接赋值操作,。把string换成CHAR之类的有长度字符串就可以正常操作。
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-20 11:57

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表