首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

内嵌汇编小疑点

2012-12-29 
内嵌汇编小问题delphi程序代码是这样的vars:stringi,n: integerbeginS: Hello,worldi: addr(S)//

内嵌汇编小问题
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是字符串。

帮下忙。谢谢
[解决办法]
  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;

[解决办法]
addr相当于@是取变量的地址,你要取的是字串的地址,应该用 i:= Integer(S);

热点排行