label_0_0 |
!= |
second |
first |
push |
jmpOnFalse |
label_0_1 |
pop |
||
< |
second |
first |
push |
|
jmpOnFalse |
label_1_0 |
pop |
||
-= |
first |
second |
second |
|
jmp |
label_1_1 |
|||
label_1_0 |
-= |
second |
first |
first |
label_1_1 |
jmp |
label_0_0 |
||
label_0_1 |
return |
First |
ОМ (объектный модуль) без оптимизации:
//int nod(int first, int second){
00411B00 55 push ebp
00411B01 8B EC mov ebp,esp
00411B03 83 EC 40 sub esp,40h //эта команда может быть удалена при оптимизации
00411B06 53 push ebx //эта команда может быть удалена при оптимизации
00411B07 56 push esi //эта команда может быть удалена при оптимизации
00411B08 57 push edi //эта команда может быть удалена при оптимизации
// while(first != second)
00411B09 8B 45 08 mov eax,dword ptr [first]
00411B0C 3B 45 0C cmp eax,dword ptr [second]
00411B0F 74 1E je nod+2Fh (411B2Fh) //при оптимизации должно быть другое смещение
// if(first < second)
00411B11 8B 45 08 mov eax,dword ptr [first] //эта команда может быть удалена при оптимизации
00411B14 3B 45 0C cmp eax,dword ptr [second] //эта команда может быть удалена при оптимизации
00411B17 7D 0B jge nod+24h (411B24h) //при оптимизации должно быть другое смещение
// second -= first;
00411B19 8B 45 0C mov eax,dword ptr [second]
00411B1C 2B 45 08 sub eax,dword ptr [first]
00411B1F 89 45 0C mov dword ptr [second],eax
// else
00411B22 EB 09 jmp nod+2Dh (411B2Dh) //при оптимизации переход должен быть на начало цикла
// first -= second;
00411B24 8B 45 08 mov eax,dword ptr [first] //эта команда может быть удалена при оптимизации
00411B27 2B 45 0C sub eax,dword ptr [second]
00411B2A 89 45 08 mov dword ptr [first],eax
00411B2D EB DA jmp nod+9 (411B09h) //при оптимизации переход должен быть на следующую команду
// return first;
00411B2F 8B 45 08 mov eax,dword ptr [first] //эта команда может быть удалена при оптимизации
//}
00411B32 5F pop edi //эта команда может быть удалена при оптимизации
00411B33 5E pop esi //эта команда может быть удалена при оптимизации
00411B34 5B pop ebx //эта команда может быть удалена при оптимизации
00411B35 8B E5 mov esp,ebp
00411B37 5D pop ebp
00411B38 C3 ret
ОМ (объектный модуль) после оптимизации:
//int nod(int first, int second){
00411B00 55 push ebp
00411B01 8B EC mov ebp,esp
// while(first != second)
00411B03 8B 45 08 mov eax,dword ptr [first]
00411B06 3B 45 0C cmp eax,dword ptr [second]
00411B09 74 1E je nod+20h (411B2Fh)
// if(first < second)
00411B0B 7D 0B jge nod+18h (411B24h)
// second -= first;
00411B0D 8B 45 0C mov eax,dword ptr [second]
00411B10 2B 45 08 sub eax,dword ptr [first]
00411B13 89 45 0C mov dword ptr [second],eax
// else
00411B16 EB 09 jmp nod+3 (411B2Dh)
// first -= second;
00411B18 2B 45 0C sub eax,dword ptr [second]
00411B1B 89 45 08 mov dword ptr [first],eax
00411B1E EB DA jmp nod+6 (411B09h)
// return first;
//}
00411B20 8B E5 mov esp,ebp
00411B22 5D pop ebp
00411B23 C3 ret
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.