本帖最后由 lxz3000 于 2010-01-25 16:09:38 编辑

解决方案 »

  1.   

    赶快回头检查下之前的Code!!!!!!
      

  2.   

    还好我不会在
    for do begin
    end;
    后面再引用 I 的值。
      

  3.   

    只有这样才能知道i是否已经超过了最大边界
    比如 
    for i := 2 to 5 do
    beginend;
    for这一句在汇编中是这样表示的  cmp ebx,$06,而不是$05
      

  4.   

    原因LS解释了一般不要循环完了直接引用循环变量,DELPHI编译时已经给过警告了...
      

  5.   

    要是delphi给你优化成downto的话,还不知道是啥样呢
      

  6.   

    应该与编译有关00457DA0 686A7E4500       push $00457e6a
    00457DA5 64FF30           push dword ptr fs:[eax]
    00457DA8 648920           mov fs:[eax],esp
    Unit1.pas.33: n:=0;
    00457DAB 33C0             xor eax,eax
    00457DAD 8945F0           mov [ebp-$10],eax
    Unit1.pas.34: k:=StrToInt(Edit2.Text);
    00457DB0 8D55E4           lea edx,[ebp-$1c]
    00457DB3 8B45FC           mov eax,[ebp-$04]
    00457DB6 8B80F4020000     mov eax,[eax+$000002f4]
    00457DBC E8F3F1FDFF       call TControl.GetText
    00457DC1 8B45E4           mov eax,[ebp-$1c]
    00457DC4 E87B19FBFF       call StrToInt
    00457DC9 8945F4           mov [ebp-$0c],eax
    Unit1.pas.35: for i:=StrToInt(Edit1.Text) to k do
    00457DCC 8D55E0           lea edx,[ebp-$20]
    00457DCF 8B45FC           mov eax,[ebp-$04]
    00457DD2 8B80F0020000     mov eax,[eax+$000002f0]
    00457DD8 E8D7F1FDFF       call TControl.GetText
    00457DDD 8B45E0           mov eax,[ebp-$20]
    00457DE0 E85F19FBFF       call StrToInt
    00457DE5 8B55F4           mov edx,[ebp-$0c]
    00457DE8 2BD0             sub edx,eax
    00457DEA 7C12             jl +$12
    00457DEC 42               inc edx
    00457DED 8955EC           mov [ebp-$14],edx
    00457DF0 8945F8           mov [ebp-$08],eax
    Unit1.pas.37: n:=n+1;
    00457DF3 FF45F0           inc dword ptr [ebp-$10]
    Unit1.pas.39: end;
    00457DF6 FF45F8           inc dword ptr [ebp-$08]
    Unit1.pas.35: for i:=StrToInt(Edit1.Text) to k do
    00457DF9 FF4DEC           dec dword ptr [ebp-$14]
    00457DFC 75F5             jnz -$0b
    Unit1.pas.40: Edit3.Text:='i='+IntToStr(i)+' No: '+IntToStr(n);  //这里的i已经是比Edit2中的数字大1了,如果不加Break的话。
    00457DFE 68807E4500       push $00457e80
    00457E03 8D55D8           lea edx,[ebp-$28]
    00457E06 8B45F8           mov eax,[ebp-$08]
    00457E09 E89618FBFF       call IntToStr
    00457E0E FF75D8           push dword ptr [ebp-$28]
    00457E11 688C7E4500       push $00457e8c
    00457E16 8D55D4           lea edx,[ebp-$2c]
    00457E19 8B45F0           mov eax,[ebp-$10]
    00457E1C E88318FBFF       call IntToStr
    00457E21 FF75D4           push dword ptr [ebp-$2c]
    00457E24 8D45DC           lea eax,[ebp-$24]
    00457E27 BA04000000       mov edx,$00000004
    00457E2C E857CAFAFF       call @LStrCatN
    00457E31 8B55DC           mov edx,[ebp-$24]
    00457E34 8B45FC           mov eax,[ebp-$04]
    00457E37 8B80F8020000     mov eax,[eax+$000002f8]
    00457E3D E8A2F1FDFF       call TControl.SetText
    00457E42 33C0             xor eax,eax
    00457E44 5A               pop edx
    00457E45 59               pop ecx
    00457E46 59               pop ecx
    00457E47 648910           mov fs:[eax],edx
      

  7.   

    d:
    for i := 2 to 5 do c:
    for (i=2; i<5; i++)