嵌入汇编高手 现在要移植和改写 IntToStr 和 FloatToStr的汇编代码为 为新的嵌入代码,以便提高效率就是把结果直接写到已经有的给定缓冲区,注:程序版本d7 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 改变Delphi自带pas文件当中的定义? ? delphi原生代码不就是汇编么,何必重复劳动 你看懂SysUtils单元里,IntToStr,FloatToStr的实现再说吧 就是把写到单元里缓冲区,变成写到 现在成的缓冲区首地址的位置,并记录写入的长度,避免数据的复制提高效率原asm代码看不懂 哦,我告诉你了,避免字符串的再复制,直接写到目的区域中!而且,asm中已经有了字符串的长度,如果我再取字符串的长度,这些不影响效率吗当我不知道delphi的代码能编译为程序的时候,没有人告诉我:既然你不会,你怎么知道代码能有用呢?这个问题你问得好,因为我现在确实回答不了接近一点平民好不好?不要告诉我提高不了效率!!! 大家都菜过;关键是提出问题就是进步的第一步;如果只是要STRING 长度避免复写的话可以使用下面的代码直接取长度,估计没有什么比读下内存有效了;procedure TForm1.Button1Click(Sender: TObject);var k:Integer; Str:string;begin K:=333456; STR:=IntToStr(K); Edit1.Text:=IntToStr(Pinteger(Integer(Str)-4)^);end; 补课:STRING 的结构 4字节(引用计数)4字节(串长度)。N字节。#0 这个,,,有点麻烦了吧?搞清楚数据类型在内存中的存储方式,使用API函数:CopyMemory就可以实现,不过最好的还是使用系统提供的函数,稳定,好用,为什么不用?? 给点范围吧:var str:string;pb:pbyte;Pos:integer;setlength(str,256);pb:=@str[0];//字符串长度for i:=0 to 1000000 dobeginpos:=1; inttostr(x);///这句要求写到 str[pos]这个缓冲区中 换成 asminc(pox,?);//这句要求在汇编中直接写好,应当是上面asm中现成的吧?str[pos]:='c';inc(pos);floattostr(x);///这句要求写到 str[pos]这个缓冲区中inc(pox,?);//这句要求在汇编中直接写好,应当是现成的吧?inc(pos);str[pos]:='d';pb^:=pos;///到此字符串str已经完成Write(str);//自定义函数end; 注册热键问题 如果一个程序过大,每次编译都要很久,想把新开发的功能模块 独立出来开发有什么办法? 禁止鼠标沿窗体边沿拖动进而对窗体进行缩小放大怎么弄呀~ 请高手帮忙:( 求一控件! 如何遍历DBGrid的值? 什么地方有delphi6.0下载啊?? 各位:在运行时如何禁止用鼠标拖放form的大小 有没有控件支持Matrox Meteor-II采集卡?磕头了! 如何閱讀以.rar為擴展名的文件? paradox数据库如何动态增加字段,并设为主键 冬至节 散分 20091222
原asm代码看不懂
我告诉你了,避免字符串的再复制,直接写到目的区域中!
而且,asm中已经有了字符串的长度,如果我再取字符串的长度,这些不影响效率吗当我不知道delphi的代码能编译为程序的时候,没有人告诉我:既然你不会,你怎么知道代码能有用呢?
这个问题你问得好,因为我现在确实回答不了
接近一点平民好不好?不要告诉我提高不了效率!!!
大家都菜过;关键是提出问题就是进步的第一步;如果只是要STRING 长度避免复写的话可以使用下面的代码直接取长度,估计没有什么比读下内存有效了;procedure TForm1.Button1Click(Sender: TObject);
var
k:Integer;
Str:string;
begin
K:=333456;
STR:=IntToStr(K);
Edit1.Text:=IntToStr(Pinteger(Integer(Str)-4)^);
end;
str:string;
pb:pbyte;
Pos:integer;setlength(str,256);
pb:=@str[0];//字符串长度for i:=0 to 1000000 do
begin
pos:=1;
inttostr(x);///这句要求写到 str[pos]这个缓冲区中 换成 asm
inc(pox,?);//这句要求在汇编中直接写好,应当是上面asm中现成的吧?
str[pos]:='c';
inc(pos);
floattostr(x);///这句要求写到 str[pos]这个缓冲区中
inc(pox,?);//这句要求在汇编中直接写好,应当是现成的吧?
inc(pos);
str[pos]:='d';
pb^:=pos;///到此字符串str已经完成
Write(str);//自定义函数
end;