Форум программистов, компьютерный форум CyberForum.ru

C или C++(не холивар) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ x86 интерпретатор исходный код http://www.cyberforum.ru/cpp/thread193279.html
кто-нибудь слышал про интерпретаторы x86? в инете нарыл только что в qemu, bochs есть встроенные интерпретаторы команд x86 процессора, но пока не докопался до них. Нужно самому написать такой интерпретатор, но не хочется изобретать велосипед заного.
C++ Крестики Нолики учу си месяц дали задачу... хелп ми плиз! Игра крестики нолики. Игра в крестики нолики вдется на квадратном поле 3*3. Играют двое. Начинают крестики. каждый из игроков, поочередно, ставит свой значок, крестик или нолик, на свободную клетку. Выигрывает тот кто первый поставит три своих значка вряд по вертикали, горизонтали или диагонали. Последовательность ходов задается 9-значным числом. Цифра... http://www.cyberforum.ru/cpp/thread193237.html
Алгоритмы и программы по использованию указателей и динамических структур данных C++
Здравствуйте! Помогите, пожалуйста, написать задачу. Вот текст:Дан указатель P0 на один из элементов непустого двусвязного списка. Вывести число N — количество элементов в списке, а также указатели (адреса) P1 и P2 на первый и последний элементы списка. Если можно, то с комментариями. Заранее спасибо
Функция rand C++
Решить задачу с использованием библиотечной функции rand,заголовочный файл stdlib.h Случайные числа в диапазоне от -32768 до 32768 можно получить с помощью следуйщей фунции int casual () { static int randx=1; randx=(randx*25173+13849)%65536; return randx; }
C++ Проверить, если число n является нечётным числом http://www.cyberforum.ru/cpp/thread193056.html
Помогите пожалуйста написать программу: проверить, если число n является нечётным числом... Вроде лёгкая,но чё-то не получается...
C++ callback метода класса Предыстория: нужно последовательно запускать несколько однотипных циклов большой степени вложенности, в теле которых вызывать разные функции. Т.к. вроде бы переписывать циклы (тем более громоздкие по STL-ным контейнерам) плохо, то я решил сделать одну функцию, в которой реализуется цикл, в теле которого вызывается переданная в качестве параметра callback-функция. Все эти функции имели отношение... подробнее

Показать сообщение отдельно
ISergey
Maniac
Эксперт С++
1372 / 883 / 52
Регистрация: 02.01.2009
Сообщений: 2,652
Записей в блоге: 1
19.11.2010, 20:01     C или C++(не холивар)
Цитата Сообщение от i.c Посмотреть сообщение
А вы не подключайте ненужные библиотеки и вызовов будет меньше
Я имел в виду свои функции..

Вот бессмысленный код.. (Заведомо отключил все оптимизации)

C++
1
2
3
4
5
6
7
8
9
int foo(int i) { return i + i; }
 
int main()
{
    int a = 0;
    for(int i = 0; i < 100; ++i)
        a = a + foo(i);
    return 0;
}
Превращается в
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
;int main()
;{
00411420  push        ebp  
00411421  mov         ebp,esp 
00411423  sub         esp,0D8h 
00411429  push        ebx  
0041142A  push        esi  
0041142B  push        edi  
0041142C  lea         edi,[ebp-0D8h] 
00411432  mov         ecx,36h 
00411437  mov         eax,0CCCCCCCCh 
0041143C  rep stos    dword ptr es:[edi] 
;   int a = 0;
0041143E  mov         dword ptr [a],0 
;   for(int i = 0; i < 100; ++i)
00411445  mov         dword ptr [i],0 
0041144C  jmp         main+37h (411457h) 
0041144E  mov         eax,dword ptr [i] 
00411451  add         eax,1 
00411454  mov         dword ptr [i],eax 
00411457  cmp         dword ptr [i],64h 
0041145B  jge         main+51h (411471h) 
;       a = a + foo(i);
0041145D  mov         eax,dword ptr [i] 
00411460  push        eax  
00411461  call        m_atoi (4111E0h) 
00411466  add         esp,4 
00411469  add         eax,dword ptr [a] 
0041146C  mov         dword ptr [a],eax 
0041146F  jmp         main+2Eh (41144Eh) 
;   return 0;
00411471  xor         eax,eax 
;}
00411473  pop         edi  
00411474  pop         esi  
00411475  pop         ebx  
00411476  add         esp,0D8h 
0041147C  cmp         ebp,esp 
0041147E  call        @ILT+320(__RTC_CheckEsp) (411145h) 
00411483  mov         esp,ebp 
00411485  pop         ebp  
00411486  ret    
 
...
 
;int foo(int i) { return i + i; }
004113B0  push        ebp  
004113B1  mov         ebp,esp 
004113B3  sub         esp,0C0h 
004113B9  push        ebx  
004113BA  push        esi  
004113BB  push        edi  
004113BC  lea         edi,[ebp-0C0h] 
004113C2  mov         ecx,30h 
004113C7  mov         eax,0CCCCCCCCh 
004113CC  rep stos    dword ptr es:[edi] 
004113CE  mov         eax,dword ptr [i] 
004113D1  add         eax,dword ptr [i] 
004113D4  pop         edi  
004113D5  pop         esi  
004113D6  pop         ebx  
004113D7  mov         esp,ebp 
004113D9  pop         ebp  
004113DA  ret
Убрав функцию получим более мене нормальный вариант..
C++
1
2
3
4
5
6
7
int main()
{
    int a = 0;
    for(int i = 0; i < 100; ++i)
        a = a + (i + i);
    return 0;
}
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
;int main()
;{
00411820  push        ebp  
00411821  mov         ebp,esp 
00411823  sub         esp,0D8h 
00411829  push        ebx  
0041182A  push        esi  
0041182B  push        edi  
0041182C  lea         edi,[ebp-0D8h] 
00411832  mov         ecx,36h 
00411837  mov         eax,0CCCCCCCCh 
0041183C  rep stos    dword ptr es:[edi] 
;   int a = 0;
0041183E  mov         dword ptr [a],0 
;   for(int i = 0; i < 100; ++i)
00411845  mov         dword ptr [i],0 
0041184C  jmp         main+37h (411857h) 
0041184E  mov         eax,dword ptr [i] 
00411851  add         eax,1 
00411854  mov         dword ptr [i],eax 
00411857  cmp         dword ptr [i],64h 
0041185B  jge         main+4Bh (41186Bh) 
;       a = a + (i + i);
0041185D  mov         eax,dword ptr [i] 
00411860  add         eax,dword ptr [i] 
00411863  add         eax,dword ptr [a] 
00411866  mov         dword ptr [a],eax 
00411869  jmp         main+2Eh (41184Eh) 
;   return 0;
0041186B  xor         eax,eax 
;}
0041186D  pop         edi  
0041186E  pop         esi  
0041186F  pop         ebx  
00411870  mov         esp,ebp 
00411872  pop         ebp  
00411873  ret
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru