Параллельные программы C, x86 - PullRequest
1 голос
/ 23 апреля 2011

Где я могу найти примеры мертвых простых программ на C и x86?Примеры, которые я нашел до сих пор в Интернете, похоже, прыгают прямо из «Привет, мир в x86», чтобы «написать свою собственную операционную систему!»У меня возникают проблемы с усвоением того, что должно произойти, когда вы делаете такие вещи, как вызов функции.

Ответы [ 5 ]

2 голосов
/ 23 апреля 2011

Я бы порекомендовал взглянуть на вывод промежуточной сборки GCC, например, позвонить

gcc -S a.c

, а затем посмотреть как

В большинстве случаев сборка меньше и проще для понимания, создаваемаяоптимизировать, поэтому вы бы предпочли использовать

gcc -O -S a.c
0 голосов
/ 23 апреля 2011

В gcc вы можете использовать опции -save-temps -fverbose-asm, которые лучше, чем опция -S, потому что она все еще генерирует объектный файл, и вы также получаете файл препроцессора. Verbose-asm также важен, потому что он добавляет комментарии к выводу сборки, которые устанавливают связь между именами функций и переменных вашей программы и сгенерированным кодом сборки. Особенно при генерации с оптимизацией часто бывает трудно установить связь между источником C и сборкой.

0 голосов
/ 23 апреля 2011

Рекомендую ДДД . Вы можете иметь как исходные тексты C (если вы создали символы отладки), так и показ машинного кода. Вы также можете перешагнуть через код, интерактивно проверяя регистр и значения памяти. Отличный инструмент обучения.

0 голосов
/ 23 апреля 2011

Если вы имеете в виду ассемблер x86, то с помощью gcc вы можете использовать gcc -S yourhelloworldprogram.c, чтобы получить вывод ассемблера.Для Visual Studio вы можете получить вывод ассемблера следующим образом: Как получить вывод ассемблера из файла C в VS2005

0 голосов
/ 23 апреля 2011

Если вы имеете в виду язык ассемблера x86, используйте objdump --disassemble myprog (в любой системе GNU), чтобы показать язык ассемблера, сгенерированный вашей C-программой.Если в вашей системе нет objdump, вы можете использовать ndisasm.

...