Skip to content

b1sted-labs/asm-labs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Лабораторные работы по Ассемблеру

Цикл лабораторных работ по дисциплине "Машинно-зависимые языки программирования", в рамках которой предлагалось изучить Ассемблер (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). Использование подпрограмм и стека.

Условия работ

Лабораторная работа №1: Целочисленная арифметика

Задача: Вычислить выражение для знаковых (int8) и беззнаковых (uint16) форматов.

Выражение:

$$\frac{b \cdot 7 + 64 / a}{31 - c \cdot b / 2}$$

Особенности: Реализация в виде двух модулей: C (ввод/вывод, проверка на верность ассемблерного модуля) и ASM (вычисления).

Лабораторная работа №2: Организация условных переходов

Задача: Найти значение X для знаковых (int16) и беззнаковых (uint16) форматов по условию:

$$ X = \begin{cases} 100 + a / b, & \text{если } a < b \\ 32, & \text{если } a > b \\ a \cdot a / b, & \text{если } a = b \end{cases} $$

Особенности: Реализация в виде двух модулей: C (ввод/вывод, проверка на верность ассемблерного модуля) и ASM (вычисления). Использование команд сравнения и переходов для реализации логики if-else.

Лабораторная работа №3: Ввод-вывод на Ассемблере

Задача: Реализовать целочисленные вычисления, сделанные в лабораторной работе №2, полностью используя язык Ассемблера для организации корректного ввода-вывода информации.

Особенности: Полный отказ от библиотечных функций scanf/printf. Передача параметров между модулями должна быть реализована через глобальные переменные.

Лабораторная работа №4: Обработка одномерных массивов

Задача: Найти сколько отрицательных элементов массива $A={a[i]}$ удовлетворяет условию:

$$c \le a[i] \le d$$

Особенности: Массив читается из файла, параметры c и d вводятся с клавиатуры.

Лабораторная работа №5: Сопроцессор (FPU)

Задача: Вычислить вещественное выражение с использованием инструкций FPU:

$$\frac{b \cdot 7 + 64 / a}{31 - c \cdot b / 2}$$

Особенности:

  • Переменные a и b имеют тип Float.
  • Переменная c (и остальные, если есть) — тип Int.
  • Вычисления должны быть разбиты на 3 функции (числитель, знаменатель, итог).

Сборка и запуск

Сборка:

make

Пример запуска (л/р №1):

cd firstLab
make
./bin/8_bit

Тестирование и граничные условия

Согласно требованиям заданий, программы протестированы на:

  1. Минимально и максимально возможных значениях для типов данных (переполнение).
  2. Делении на ноль (обработка исключений).
  3. Некорректном вводе (ввод букв вместо цифр в л/р №3).
  4. Пустых или поврежденных файлах (л/р №4).

Лицензия

Проект распространяется под лицензией PolyForm Noncommercial 1.0.0.

Эта лицензия позволяет свободно использовать материалы для личного обучения и некоммерческих проектов, но запрещает любое коммерческое использование.

  • Разрешено: использовать, копировать, изменять и распространять код для некоммерческих целей.
  • Запрещено: продажа материалов, использование в платных курсах или любое другое коммерческое использование.
  • Условие: при распространении необходимо сохранять уведомления о лицензии.

Полный текст лицензии: LICENSE.

About

A series of laboratory works implementing NASM x86_64 Assembly to master integer arithmetic, conditional branching, file I/O, array processing, and FPU computations.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors