From 93ea438f0558c9ea7b41d1a45046216aef9e108e Mon Sep 17 00:00:00 2001 From: Miheev Egor Date: Sat, 7 Sep 2024 12:16:02 +0300 Subject: [PATCH] =?UTF-8?q?docs:=20=D1=80=D0=B0=D1=81=D1=88=D0=B8=D1=80?= =?UTF-8?q?=D0=B5=D0=BD=20README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 53 ++++++++++++++++++++++++++++++++++++++++- assets/typical_gdb.PNG | Bin 0 -> 30418 bytes 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 assets/typical_gdb.PNG diff --git a/README.md b/README.md index 7f296be..4672e51 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,56 @@ ## Лабораторный практикум -### Содержание +### Что в здесь находится + +В данном репозитории находятся "отчеты" к лабам - авторское описание порядка действий для решения лабы. Все, что не является исходником программы будет лежать в формате .md файла. + +### Используемое ПО + +### Стандартный набор + +Если вы находитесь под крылышком у Милицына, то вам нужен следующий набор: + +- Windows XP: операционная система. Вам он ее даст в виде установочного образа и на ней вы найдете все остальные программы +- Borland C for DOS - лежит в каталоге BIN папки BORLAND под названием BC +- Turbo Debugger - Можно вызвать из под Borland C for DOS при помощи нажатия на зачем-то оставшуюся там букву Ё. + +### Авторский набор + + + +У данного репозитория 2 автора примерно одинаковой степени извращенства, поэтому сразу стоит отметить, что если вы заглядываете сюда для того чтобы получить самые простые решения - можно разворачиваться и уходить. Да и методичка впринципе написана вполне понятно + +Для тех кто остался, поясняем. Из используемого ПО: + +- Linux - почти любой дистрибутив на базе x86-64. +- Nasm - ассемблер, с которым будем работать вчистую, если потребуется +- GCC - стандартная коллекция гнушных компиляторов. Скорее всего с ней будем работать больше всего +- GDB - Классический гнушный и немного душный дебаггер. Дебажит все, но надо привыкнуть + +#### Комментарии + +Кого-то заинтересуте вопрос, почему именно такой набор: + +У Винды, Линукса и Мака есть свои особенности по части выполнения действий в ассемблере. Например отличаются таблицы системных вызовов, а также у винды гораздо шире стандартная библиотека Win32. Про мак ничего сказать не могу - не работал. Выбор пал на линукс, потому что лично мне он привычнее и у него не столь хтоническая коллекция системных вызовов. + +Выбор же ассемблера менее принципиален, просто так случилось, что под линукс работают nasm, yasm и gasm. Я предпочитаю работать с nasm, так как по нему немного больше документации и она даже продолжает поддерживаться. И пусть выбор ассемблера не принципиален, я буду по возможности работать с nasm, хотя во время вставок ассемблера в C возможно придется обратиться и к другим ассемблерам + +GCC - пойдет любой компилятор для C. gcc просто лично мне роднее. Хорошим выбором также может стать clang. + +GDB - это классический гнушный (и немного душный) дебаггер, который будет работать везде и чуть ли не со всем на планете, но как и многое из того, что написано под линукс, выглядит это как-то так: + +![Картинка с gdb](./assets/typical_gdb.PNG) + +Поэтому если вы не отчаялись, лучше поставить edb или какой-нибудь скин на GDB вроде [Voltron](https://github.com/snare/voltron). Но почему именно GDB? Ну... Я извращенец. Если вы тоже, то замечу, что у gdb есть нативный TUI, который можно вполне гибко настраивать. Почитать по этому поводу побольше можно [тут](https://www.sourceware.org/gdb/current/onlinedocs/gdb.html/TUI.html) + +### Оффтоп + +Поскольку пусть ассемблера тяжел, а мы с вами вряд ли когда-нибудь будем писать ассемблер лучше компилятора. Даже умные дяди не всегда пишут код лучше компилятора. В связи с этим предлагаю сразу же сдаться и узнать, что у GCC есть опция `-S`, которая заставит его компильнуть код до ассемблера. При этом использоваться будет Gasm. Также есть возможность воспользоваться [Compiler Explorer'ом](https://godbolt.org/). Он приятен тем, что выдает ассемблер в синтаксисе intel, а не AT&T. Хотя и это можно настроить на самом деле + +### Лабораторные работы > **Обозначения** > @@ -20,3 +69,5 @@ - [8. Отладчик](08-debugging/README.md) - [9. Обмен ЭВМ с клавиатурой](09-keyboard/README.md) - [10. Мультизадачность](10-multitasking/README.md) + + diff --git a/assets/typical_gdb.PNG b/assets/typical_gdb.PNG new file mode 100644 index 0000000000000000000000000000000000000000..db25243c27c416e80077822b42f0a45e96feba45 GIT binary patch literal 30418 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%0D$O7whnMllt;cO0yx3ZhCSMdYWL&2*67}C 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