do - while 循環(後面 cmp + J指令)
int v1 = 0;
0033172E C7 45 F8 00 00 00 00 mov dword ptr [v1],0
do
{
v1++;
00331735 8B 45 F8 mov eax,dword ptr [v1]
00331738 83 C0 01 add eax,1
do
{
v1++;
0033173B 89 45 F8 mov dword ptr [v1],eax
printf("%d\r\n", v1);
0033173E 8B 45 F8 mov eax,dword ptr [v1]
00331741 50 push eax
00331742 68 30 6B 33 00 push 336B30h
00331747 E8 E8 FB FF FF call _printf (0331334h)
0033174C 83 C4 08 add esp,8
} while (!(v1==3));
0033174F 83 7D F8 03 cmp dword ptr [v1],3
00331753 75 E0 jne Sub_1+25h (0331735h)
while 循環(最開始cmp + J指令 + 代碼塊 + jmp)
int v1 = 0;
0033179E C7 45 F8 00 00 00 00 mov dword ptr [v1],0
while (v1 != 3)
003317A5 83 7D F8 03 cmp dword ptr [v1],3
003317A9 74 1C je Sub_2+47h (03317C7h) //和if語句一樣,J指令也是跳轉至不滿足的地方,所以J後面的條件也是和C語言white中的相反
{
v1++;
003317AB 8B 45 F8 mov eax,dword ptr [v1]
003317AE 83 C0 01 add eax,1
003317B1 89 45 F8 mov dword ptr [v1],eax
printf("%d\r\n", v1);
003317B4 8B 45 F8 mov eax,dword ptr [v1]
003317B7 50 push eax
003317B8 68 30 6B 33 00 push 336B30h
003317BD E8 72 FB FF FF call _printf (0331334h)
003317C2 83 C4 08 add esp,8
}
003317C5 EB DE jmp Sub_2+25h (03317A5h)
for 循環(jmp + cmp + J指令 + 代碼塊 + jmp)
int i = 0;
0033181E C7 45 F8 00 00 00 00 mov dword ptr [i],0
for (i=0;i<3;i++)
00331825 C7 45 F8 00 00 00 00 mov dword ptr [i],0
0033182C EB 09 jmp Sub_3+37h (0331837h)
0033182E 8B 45 F8 mov eax,dword ptr [i] //jmp跳轉的地方
00331831 83 C0 01 add eax,1
00331834 89 45 F8 mov dword ptr [i],eax
00331837 83 7D F8 03 cmp dword ptr [i],3
0033183B 7D 16 jge Sub_3+53h (0331853h)
{
printf("%d\r\n", i + 1);
0033183D 8B 45 F8 mov eax,dword ptr [i]
00331840 83 C0 01 add eax,1
00331843 50 push eax
00331844 68 30 6B 33 00 push 336B30h
00331849 E8 E6 FA FF FF call _printf (0331334h)
0033184E 83 C4 08 add esp,8
}
00331851 EB DB jmp Sub_3+2Eh (033182Eh)
C++源碼
#include<iostrean>
using namespace std;
//do 先執行循環體,後比較判斷
//while 先比較判斷,後執行循環體
//for 先初始化,再比較判斷,最後執行循環體
//goto --->do while
void Sub_1();
void Sub_2();
void Sub_3();
void Sub_4();
int main()
{
Sub_1();
Sub_2();
Sub_3();
Sub_4();
return 0;
}
void Sub_1()
{
int v1 = 0;
do
{
v1++;
printf("%d\r\n", v1);
} while (!(v1==3));
}
void Sub_2()
{
int v1 = 0;
while (!(v1 == 3))
{
v1++;
printf("%d\r\n", v1);
}
}
void Sub_3()
{
int i = 0;
for (i=0;i<3;i++)
{
printf("%d\r\n", i + 1);
}
}
void Sub_4()
{
int v1 = 0;
Flag1:
v1++;
printf("%d\r\n", v1);
if (v1 == 3)
{
goto Exit;
}
goto Flag1;
Exit:
return;
}