Цикл лабораторных работ по дисциплине "Машинно-зависимые языки программирования", в рамках которой предлагалось изучить Ассемблер (NASM x86_64), работая с целочисленной арифметикой, условными переходами, файловым вводом-выводом, обработкой массивов и вычислениями на сопроцессоре (FPU).
Технологический стек • Структура репозитория • Условия работ • Сборка и запуск • Тестирование и граничные условия • Лицензия
| Категория | Инструмент | Примечание |
|---|---|---|
| ОС | Linux |
- |
| Архитектура | x86_64 |
- |
| Ассемблер | NASM |
- |
| Линковка | GCC / LD |
GCC используется только при смешанном программировании (C + ASM), в остальных случаях - LD |
| Отладка | GDB |
- |
├── firstForay # Проба пера: вывод "Hello world!" на Ассемблере
├── firstLab # Смешанное программирование (C + ASM). Целочисленные вычисления (8/16 бит).
├── secondLab # Смешанное программирование (C + ASM). Условные переходы. Реализация кусочно-заданных функций.
├── thirdLab # Низкоуровневый ввод-вывод. Реализация собственных функций чтения/печати.
├── fourthLab # Обработка одномерных массивов. Работа с файлами и параметрами argc/argv.
└── fifthLab # Вычисления с плавающей точкой (FPU). Использование подпрограмм и стека.
Задача: Вычислить выражение для знаковых (int8) и беззнаковых (uint16) форматов.
Выражение:
Особенности: Реализация в виде двух модулей: C (ввод/вывод, проверка на верность ассемблерного модуля) и ASM (вычисления).
Задача: Найти значение X для знаковых (int16) и беззнаковых (uint16) форматов по условию:
Особенности: Реализация в виде двух модулей: C (ввод/вывод, проверка на верность ассемблерного модуля) и ASM (вычисления). Использование команд сравнения и переходов для реализации логики if-else.
Задача: Реализовать целочисленные вычисления, сделанные в лабораторной работе №2, полностью используя язык Ассемблера для организации корректного ввода-вывода информации.
Особенности: Полный отказ от библиотечных функций scanf/printf. Передача параметров между модулями должна быть реализована через глобальные переменные.
Задача: Найти сколько отрицательных элементов массива
Особенности: Массив читается из файла, параметры c и d вводятся с клавиатуры.
Задача: Вычислить вещественное выражение с использованием инструкций FPU:
Особенности:
- Переменные a и b имеют тип
Float. - Переменная c (и остальные, если есть) — тип
Int. - Вычисления должны быть разбиты на 3 функции (числитель, знаменатель, итог).
Сборка:
makeПример запуска (л/р №1):
cd firstLab
make
./bin/8_bitСогласно требованиям заданий, программы протестированы на:
- Минимально и максимально возможных значениях для типов данных (переполнение).
- Делении на ноль (обработка исключений).
- Некорректном вводе (ввод букв вместо цифр в л/р №3).
- Пустых или поврежденных файлах (л/р №4).
Проект распространяется под лицензией PolyForm Noncommercial 1.0.0.
Эта лицензия позволяет свободно использовать материалы для личного обучения и некоммерческих проектов, но запрещает любое коммерческое использование.
- Разрешено: использовать, копировать, изменять и распространять код для некоммерческих целей.
- Запрещено: продажа материалов, использование в платных курсах или любое другое коммерческое использование.
- Условие: при распространении необходимо сохранять уведомления о лицензии.
Полный текст лицензии: LICENSE.