突然发现Delphi的for循环最后会把i还计算一遍! 本帖最后由 lxz3000 于 2010-01-25 16:09:38 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 赶快回头检查下之前的Code!!!!!! 还好我不会在for do beginend;后面再引用 I 的值。 只有这样才能知道i是否已经超过了最大边界比如 for i := 2 to 5 dobeginend;for这一句在汇编中是这样表示的 cmp ebx,$06,而不是$05 原因LS解释了一般不要循环完了直接引用循环变量,DELPHI编译时已经给过警告了... 要是delphi给你优化成downto的话,还不知道是啥样呢 应该与编译有关00457DA0 686A7E4500 push $00457e6a00457DA5 64FF30 push dword ptr fs:[eax]00457DA8 648920 mov fs:[eax],espUnit1.pas.33: n:=0;00457DAB 33C0 xor eax,eax00457DAD 8945F0 mov [ebp-$10],eaxUnit1.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.GetText00457DC1 8B45E4 mov eax,[ebp-$1c]00457DC4 E87B19FBFF call StrToInt00457DC9 8945F4 mov [ebp-$0c],eaxUnit1.pas.35: for i:=StrToInt(Edit1.Text) to k do00457DCC 8D55E0 lea edx,[ebp-$20]00457DCF 8B45FC mov eax,[ebp-$04]00457DD2 8B80F0020000 mov eax,[eax+$000002f0]00457DD8 E8D7F1FDFF call TControl.GetText00457DDD 8B45E0 mov eax,[ebp-$20]00457DE0 E85F19FBFF call StrToInt00457DE5 8B55F4 mov edx,[ebp-$0c]00457DE8 2BD0 sub edx,eax00457DEA 7C12 jl +$1200457DEC 42 inc edx00457DED 8955EC mov [ebp-$14],edx00457DF0 8945F8 mov [ebp-$08],eaxUnit1.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 do00457DF9 FF4DEC dec dword ptr [ebp-$14]00457DFC 75F5 jnz -$0bUnit1.pas.40: Edit3.Text:='i='+IntToStr(i)+' No: '+IntToStr(n); //这里的i已经是比Edit2中的数字大1了,如果不加Break的话。00457DFE 68807E4500 push $00457e8000457E03 8D55D8 lea edx,[ebp-$28]00457E06 8B45F8 mov eax,[ebp-$08]00457E09 E89618FBFF call IntToStr00457E0E FF75D8 push dword ptr [ebp-$28]00457E11 688C7E4500 push $00457e8c00457E16 8D55D4 lea edx,[ebp-$2c]00457E19 8B45F0 mov eax,[ebp-$10]00457E1C E88318FBFF call IntToStr00457E21 FF75D4 push dword ptr [ebp-$2c]00457E24 8D45DC lea eax,[ebp-$24]00457E27 BA04000000 mov edx,$0000000400457E2C E857CAFAFF call @LStrCatN00457E31 8B55DC mov edx,[ebp-$24]00457E34 8B45FC mov eax,[ebp-$04]00457E37 8B80F8020000 mov eax,[eax+$000002f8]00457E3D E8A2F1FDFF call TControl.SetText00457E42 33C0 xor eax,eax00457E44 5A pop edx00457E45 59 pop ecx00457E46 59 pop ecx00457E47 648910 mov fs:[eax],edx d:for i := 2 to 5 do c:for (i=2; i<5; i++) delphi表格制作——再次请问一下 如何让DBGrid的某一行某一列显示成红色 winsock2 delphi7中如何获得? lan to wan to lan的问题 紧急求助!!关于做扫描仪方面用4个koda控件方面的问题, 如何提取html中的所有超链接,不用ie控件! O0o,MY GOD ,WHO CAN SAVE ME!......进来吧,来吧..... 紧急求助!!!! 哪有NT40的Service pack 6? 我问了问题,有人回答了,我怎么给分呢? Delphi Integer转为byte[] Delphi2010下UTF8编码问题
for do begin
end;
后面再引用 I 的值。
比如
for i := 2 to 5 do
beginend;
for这一句在汇编中是这样表示的 cmp ebx,$06,而不是$05
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
for i := 2 to 5 do c:
for (i=2; i<5; i++)