VC6 0迴圈的彙編

2021-04-22 12:24:53 字數 3185 閱讀 2113

今天突然來了興趣,想看看彙編級的迴圈.

#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...