一.for回圈
<1>.格式:
for( ; ;)
{}
括號里的運算式
第1個.賦初值
第2個.判斷條件
第3個.跳出回圈的條件(一般自增自減)
for回圈可以是1個運算式 可以是2個運算式 可以是3個運算式.
<2>.for回圈只有中間的條件運算式時反匯編跟while是一模一樣的
int fun1() { int a; int b; a=1; b=0; for(;a<=100;) { b=b+a; a++; } printf("%d",b); return 0; }
上面for回圈代碼的反匯編如下圖所示

int fun2() { int a; int b; a=1; b=0; while(a<=100) { b=b+a; a++; } printf("%d",b); return 0; }
這是while回圈代碼

這是while回圈反匯編,對比兩個回圈的反匯編,注意觀察 ,for回圈只有中間的條件運算式時反匯編跟while回圈不能說毫無關系,只能說一模一樣
<3>.for回圈反匯編中間插了個jmp 一眼就可看出是for回圈

二.for回圈九九乘法表
int fun() { int a; int b; for(a=1;a<=9;a++) { for (b=1;b<=a;b++) { printf("%d*%d=%d\t",b,a,b*a); } printf("\n"); } return 0; }
代碼如上所示,列印出來如下圖所示

三.for回圈九九乘法表裸匯編
char*p="%d*%d=%d\t"; char*p1="\n"; char*p2="這是for回圈裸匯編運行出來的\n"; _declspec(naked) int fund() { _asm { push ebp mov ebp,esp sub esp,0x48 push ebx push esi push edi lea edi,dword ptr ds:[ebp-0x48] mov ecx,0x12 mov eax,0xcccccccc stosd //a=1 mov dword ptr ds:[ebp-0x4],0x1 jmp lab1 lab4: //a++ mov eax,dword ptr ds:[ebp-0x4] add eax,0x1 mov dword ptr ds:[ebp-0x4],eax lab1: //a<=9 cmp dword ptr ds:[ebp-0x4],0x9 jg lab7 //b=1 mov dword ptr ds:[ebp-0x8],0x1 jmp lab2 lab6: //b++ mov ecx,dword ptr ds:[ebp-0x8] add ecx,0x1 mov dword ptr ds:[ebp-0x8],ecx lab2: //b<=a mov edx,dword ptr ds:[ebp-0x4] cmp DWORD ptr ds:[ebp-0x8],edx jg lab3 mov eax,dword ptr ds:[ebp-0x8] imul eax,dword ptr ds:[ebp-0x4] push eax push DWORD ptr ds:[ebp-0x4] push DWORD ptr ds:[ebp-0x8] mov ecx,p push ecx call printf add esp,0x10 jmp lab6 lab3: mov edx,p1 push edx call printf add esp,0x4 jmp lab4 lab7: mov edx,p2 push edx call printf add esp,0x4 xor eax,eax pop edi pop esi pop ebx mov esp,ebp pop ebp ret } }
for回圈九九乘法表裸匯編如上,列印出來如下圖片所示

今天的文章就到這里了,如果有任何不明白的地方歡迎與我交流,我必定知無不言,這篇文章也花了一定的心血,喜歡的小伙伴可以點贊關注哦,感激不盡!
搜索
復制
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/498527.html
標籤:C
下一篇:IOS OpenGL ES GPUImage 影像彩色調模糊/暗色提亮 GPUImageRGBClosingFilter
