一共两个功能。用现在的代码速度太慢了,请大侠帮忙用汇编实现一下,不甚感激。=======================================================
第一个:
var
  ss : String;
  tLen : integer;
begin
  ss := 'ab123cd';
  tLen := length(ss);
  if (tLen > 1) then begin
    ss := copy(ss,tLen,1) + copy(ss,1,(tLen - 1));
  end;
end;运行结果是: dab123c
=======================================================第二个:
var
  ss : String;
  tLen : integer;
begin
  ss := 'ab123cd';
  tLen := length(ss);
  if (tLen > 1) then begin
    ss := copy(ss,2,tLen) + copy(ss,1,1);
  end;
end;运行结果是: b123cda
========================================================

解决方案 »

  1.   

    哦,移位啊
    可能不必使用汇编,只使用move就可以了
      

  2.   

    恩,是 环移。 ss 字符串可能比较长。
    论坛找到汇编相关的:
    左环移 RL-Rotate left  进位左环移 RLC-Rotate left carry
    右环移 RR-Rotate right  进位右环移RRC-Rotate right carry因为这个操作非常频繁,所以对性能要求比较高。 是不是汇编实现要快一点呢?
      

  3.   

    汇编实现肯定快,不过move内部实现也应该是汇编的了
    试一试,看看速度如何:
    procedure moveleft(var s:string);
    var
      c:char;
      l:integer;
    begin
      l:=length(s);
      c:=s[1];
      move(s[2],s[1],l-1);
      s[l]:=c;
    end;
    procedure moveright(var s:string);
    var
      c:char;
      l:integer;
    begin
      l:=length(s);
      c:=s[l];
      move(s[1],s[2],l-1);
      s[1]:=c;
    end;
      

  4.   

    速度确实提高不少,比用copy 速度提高 3-4倍左右。
      

  5.   

    这贴...............
    我只能说代码速度慢不是因为delphi编译器的问题,也不是字符串的问题,而是错误使用的问题
      

  6.   

    赐教不敢当,不过4L的代码就很说明问题,字符串的时间通常是被浪费在"+",copy,replace等字符串函数的操作上,要知道这些操作都是在不断地生成新的字符串,想节约时间,申请一块内存,然后去操作他,move就是这么简单
      

  7.   

    学习了, 内存 move 比使用字符串函数要快这么多.
      

  8.   

    up,  move确实提高不少速度,期待有大侠提供 汇编代码,看看还能提高速度不