79 lines
7.8 KiB
Markdown
79 lines
7.8 KiB
Markdown
# Архитектура ЭВМ
|
||
|
||
## Лабораторный практикум
|
||
|
||
### Что здесь находится
|
||
|
||
В данном репозитории находятся "отчеты" к лабам - авторское описание порядка действий для решения лабы. Все, что не является исходником программы будет лежать в формате `.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 - это классический гнушный (и немного душный) дебаггер, который будет работать везде и чуть ли не со всем на планете, но как и многое из того, что написано под линукс, выглядит это как-то так:
|
||
|
||

|
||
|
||
Поэтому если вы не отчаялись, лучше поставить 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)
|