procedure MyMove(
  const Source; var Dest; Count : Integer);
asm
  cmp   ECX,0      ;第三个参数Count
  Je    @JustQuit  ;为零则退出
  push  ESI         
  push  EDI
  mov   ESI, EAX
  mov   EDI, EDX
    @Loop:         ;循环开始
  Mov   AL, [ESI]
  Inc   ESI
  mov   [EDI], AL
  Inc   EDI
  Dec   ECX        ;我的疑问在这里,为什么用了dex ecx和jnz,而不用loop代替
  Jnz   @Loop      ;是执行效率的问题吗?还是win32汇编里没有loop了?
  pop   EDI
  pop   ESI
    @JustQuit:
end;

解决方案 »

  1.   

    我把 
    dec ecx 
    Jnz @Loop 
    改成 
    loop @Loop 
    运行结果是一样的。
      

  2.   

    为什么不优化一下:
    procedure MyMove(
    const Source; var Dest; Count : Integer);
    asm
     mov esi,Source
     mov edi,Dest
     mov ecx,Count
     rep movsb
    end;
      

  3.   

    那还不如这样优化。
    asm
      mov esi,EAX
      mov edi,EDX
      rep movsb
    end;
    count是第3个参数,不用mov被ecx的,本身就是ecx传递的。
      

  4.   

    loop肯定是有的,效率是有可能的。