Files
solutions/README.md

79 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Архитектура ЭВМ
## Лабораторный практикум
### Что здесь находится
В данном репозитории находятся "отчеты" к лабам - авторское описание порядка действий для решения лабы. Все, что не является исходником программы будет лежать в формате `.md` файла.
### Используемое ПО
### Стандартный набор
Если вы находитесь под крылышком у Милицына, то вам нужен следующий набор:
- Windows XP: операционная система. Есть готовый образ ([WinXPCompArch.ova](https://static.inkling.su/CompArch2024/WinXPCompArch.ova), 1.8 GB) для VirtualBox со всем необходимым софтом
- Borland C for DOS - лежит в каталоге BIN папки BORLAND под названием BC
- Turbo Debugger - Можно вызвать из-под Borland C for DOS при помощи нажатия на зачем-то оставшуюся там букву Ё.
### Авторский набор
<!---
Пока что автора только 2, но может в будущем поменяется, это надо учитывать
-->
У данного репозитория 2 автора примерно одинаковой степени извращенства, поэтому сразу стоит отметить, что если вы заглядываете сюда для того чтобы получить *самые простые решения - **можно разворачиваться и уходить***. Да и методичка впринципе написана вполне понятно
Для тех кто остался, поясняем. Из используемого ПО:
- Linux - почти любой дистрибутив на базе x86-64.
- Nasm - ассемблер, с которым будем работать вчистую, если потребуется
- GCC - стандартная коллекция гнушных компиляторов. Скорее всего с ней будем работать больше всего
- GDB - Классический гнушный и немного душный дебаггер. Дебажит все, но надо привыкнуть
#### Комментарии
Кого-то заинтересует вопрос - а почему именно такой набор:
У Винды, Линукса и Мака есть свои особенности по части выполнения действий в ассемблере. Например, отличаются таблицы системных вызовов, а также у винды гораздо шире стандартная библиотека Win32. На маках - свои решения, например Core Foundation для низкоуровневой разработки на C, помимо которого поддерживается POSIX (Unix же). Выбор пал на линукс, потому что лично мне он привычнее и у него не столь хтоническая коллекция системных вызовов.
Выбор же ассемблера менее принципиален, просто так случилось, что под линукс работают 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. Хотя и это можно настроить на самом деле
### Материалы
- Образ WinXP с готовым окружением - [WinXPCompArch.ova](https://static.inkling.su/CompArch2024/WinXPCompArch.ova) (1.8 GB)
- Инструменты из образа (`asmtool`, `borlandc`) - [Tools.zip](https://static.inkling.su/CompArch2024/Tools.zip) (23 MB)
- Каталог с примерами программ - [CompArch2024/templates](https://git.inkling.su/CompArch2024/templates)
- Книги - [CompArch2024/books](https://git.inkling.su/CompArch2024/books)
### Лабораторные работы
> **Обозначения**
>
> 🟢 - Готово
>
> 🟠 - WIP
- [1. Введение в низкоуровневое программирование. Встроенный отладчик. Встроенный Ассемблер](01-asm-basics/README.md)
- [2. Система команд процессора, ее связь с кодами команд](02-cpu-commnads/README.md)
- [3. Ассемблер и функции BIOS](03-asm-bios/README.md)
- [4. Способы адресации и сегментная организация памяти](04-addr-methods/README.md)
- [5. Подпрограммы и передача параметров](05-subroutines-params/README.md)
- [6. Подпрограммы, программные прерывания и особые случаи](06-subroutines-interruptions/README.md)
- [7. FPU. Кодирование чисел с плавающей запятой. Особые численные значения. Особые случаи](07-fpu/README.md)
- [8. Отладчик](08-debugging/README.md)
- [9. Обмен ЭВМ с клавиатурой](09-keyboard/README.md)
- [10. Мультизадачность](10-multitasking/README.md)