C和汇编-----for循环
生活随笔
收集整理的這篇文章主要介紹了
C和汇编-----for循环
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
環(huán)境:VC++
for循環(huán)有三個表達式,第一個表達式是初始化,在for循環(huán)之前執(zhí)行一次,后面就不執(zhí)行了,第二個是循環(huán)條件,在執(zhí)行循環(huán)體之前求值,如果為真,執(zhí)行循環(huán)體,如果為假,循環(huán)結(jié)束,第三個是執(zhí)行更新,在每次執(zhí)行完循環(huán)體后執(zhí)行。下面用個簡單的程序來研究for循環(huán)的反匯編
#include "stdio.h"int main() {int sum=0;for(int i=1;i<=100;i++){sum+=i;}printf("sum=%d\n",sum);return 0; }功能是求1到100的和
反匯編:
從上面的程序我們可以看出mov dword ptr [ebp-8],1相當于int i =1;從反匯編的角度看,這個也執(zhí)行了一次,按照for循環(huán)的執(zhí)行過程,接下來應該是i<=100,上面反匯編對應程序:
00401041 83 7D F8 64 cmp dword ptr [ebp-8],64h 00401045 7F 0B jg main+42h (00401052)比較i和100,如果大于,則跳到00401052執(zhí)行,跳出循環(huán),如果為小于等于,則執(zhí)行
00401047 8B 4D FC mov ecx,dword ptr [ebp-4] 0040104A 03 4D F8 add ecx,dword ptr [ebp-8] 0040104D 89 4D FC mov dword ptr [ebp-4],ecx相當于 sum+=i;
循環(huán)體執(zhí)行完就應該執(zhí)行`i++了,jmp調(diào)到00401038執(zhí)行
這個就相當于i++,接著執(zhí)行i<=100,循環(huán)下去。
C和匯編代碼:
總結(jié)
以上是生活随笔為你收集整理的C和汇编-----for循环的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C和汇编---while反汇编
- 下一篇: C和汇编混合编程---do while