今天突然來了興趣,想看看彙編級的迴圈.
#include
using
namespace std;
int main()}
1: #include
2: using
namespace std;
3:4: int main()
5:
00401290 jmp main+28h (00401278)
11:12: }
00401292 pop edi
00401293 pop esi
00401294 pop ebx
00401295 mov esp,ebp
00401297 pop ebp
00401298 ret
6:inta=0;
00401268 mov dword ptr [ebp-4],0//儲存a的值
7:for(inti=0;i<10;i++)
0040126f mov dword ptr [ebp-8],0// 儲存i的值
00401276 jmp main+31h (00401281)//跳轉到比較指令
00401278 mov eax,dword ptr [ebp-8]
0040127b add eax,1//eax 為臨時變數
0040127e mov dword ptr [ebp-8],eax
00401281 cmp dword ptr [ebp-8],0ah
00401285 jge main+42h (00401292)//大於等於10不進入迴圈體
8:
00401290 jmp main+28h (00401278)
看看while迴圈
#include
using
namespace std;
int main()
}
1: #include
2: using
namespace std;
3:4: int main()
5:
0040128e jmp main+26h (00401276)
13:14: }
//下面是此層函式棧銷毀的過程
00401290 pop edi
00401291 pop esi
00401292 pop ebx
00401293 mov esp,ebp
00401295 pop ebp
00401296 ret
//先判斷後跳轉 ,程式比較簡單
#include
using
namespace std;
int main()
while(i<10);
}vc6.0反彙編的**
1: #include
2: using
namespace std;
3:4: int main()
5:
14: while(i<10);
00401288 cmp dword ptr [ebp-8],0ah
0040128c jl main+26h (00401276)
15:16: }
//同上
0040128e pop edi
0040128f pop esi
00401290 pop ebx
00401291 mov esp,ebp
00401293 pop ebp
00401294 ret
總結:看來迴圈語句是通過比較指令和跳轉指令來實現的.
在看乙個小**:
7: int i=0;
00401268 mov dword ptr [ebp-4],0
8: int a=0;
0040126f mov dword ptr [ebp-8],0
9: i=a++;
//通過eax先賦值
00401276 mov eax,dword ptr [ebp-8]
00401279 mov dword ptr [ebp-4],eax
//通過ecx加一
0040127c mov ecx,dword ptr [ebp-8]
0040127f add ecx,1
00401282 mov dword ptr [ebp-8],ecx
10: i=++a;
//通過edx加一
00401285 mov edx,dword ptr [ebp-8]
00401288 add edx,1
0040128b mov dword ptr [ebp-8],edx
//通過eax賦值
0040128e mov eax,dword ptr [ebp-8]
00401291 mov dword ptr [ebp-4],eax
初學者易混淆的地方.
vc6 0 除錯小結
現在都用vs2008了,vc6的速度還是很懷念,來個小結吧。斷點相關快捷鍵 1.f9在當前游標所在的行下斷點,如果當前行已經有斷點,則取消斷點.f5除錯狀態執行程式,程式執行到有斷點的地方會停下來.f10單步執行程式.ctrl f10執行到游標所在行.f11和f10的區別是,如果當前執行語句是函式呼...
VC 6 0遠端除錯
先明確下概念,遠端除錯嘛,自然是兩個機器之間除錯。程式執行在目標機器上,偵錯程式執行在本機。當然,目標機器上還是要有少許輔助程式才能跟本機的偵錯程式connect上,以便通訊。一般來說,只需要copy四個檔案到目標機器上就行了 msvcmon.exe dm.dll tln0t.dll和msdis11...
vc6 0記憶體洩露
新建記憶體洩露定位類cmemleaks,所有的檔案都需要包含memleaks.h檔案,故而將其放置在stdafx.h檔案中。cpp檔案如下 memleaks.cpp implementation of the cmemleaks class.include stdafx.h include meml...