内嵌汇编小问题

wozhaozhe2008 2012-08-25 11:55:00
delphi程序代码是这样的

var
s: string;
i,n: integer;

begin
S:= 'Hello,world';
i:= addr(S);//取字符串地址
asm
mov eax,i //我不知道这句哪错了。我要的是把字符串的地址放到eax里
mov edx,[eax-4] //前一个地址读取字符串长度
mov n,edx //把长度保存到n中。执行这行会出错。应该是edx里的值是错误的。也就是说i保存的值也是不对的
end;
end;


还有就是我想 mov eax,S 这样取地址。不知道有什么好办法没。难道每次只能中转一次吗?S是字符串。

帮下忙。谢谢
...全文
129 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sololie 2012-08-26
  • 打赏
  • 举报
回复
取地址用lea不就得了
str:pchar;
str:='啊啊啊';
asm
lea ebx,str
end;
Jekhn 2012-08-25
  • 打赏
  • 举报
回复
addr相当于@是取变量的地址,你要取的是字串的地址,应该用 i:= Integer(S);
lxdddxl 2012-08-25
  • 打赏
  • 举报
回复
asm
mov eax,s
mov edx,[eax-4]
mov n,edx
end;
或者
i:=integer(@s);
asm
mov eax,i
mov eax,[eax]
mov edx,[eax-4]
mov n,edx
end;

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧