Задание на лабораторную работу
Лабораторная работа. Арифметические операции над знаковыми числами
Постановка задачи
Разработать и отладить программу, выполняющую следующие действия:
- Получить у пользователя через TRG два знаковых числа в прямом коде и арифметическую операцию сложение или вычитание.
- При необходимости преобразовать полученные данные в дополнительный код (для отрицательных чисел).
- Выполнить арифметическую операцию.
- Вывести результат в прямом коде на DRG.
Разработать пользовательский интерфейс с индикацией на DRG и инструкцией по вводу. Пример интерфейса:
- При появлении на DL1-4 "IN 1": Ввести первое число с тумблерного регистра TRG в формате прямого кода со знаком, продолжить выполнение.
- При появлении на DL1-4 "IN 2": Ввести второе число с тумблерного регистра TRG в формате прямого кода со знаком, продолжить выполнение.
- При появлении на DL1-4 "OP": Ввести код операции с TRG ( "+" — 00000000; "-" — 11111111 ), продолжить выполнение.
- По окончании работы программы на DRG — результат в прямом коде.
Примечание: DL1-4 — не обязательно использовать. Интерфейс пользователя разрабатывается самостоятельно.
Прямой код со знаком:
- Бит 7 — знак числа (0 = положительное, 1 = отрицательное)
- Биты 6–0 — модуль числа (диапазон 0–127)
Примеры:
| Число | Двоичный код | Hex |
|---|---|---|
| +50 | 0011 0010 | 32₁₆ |
| -60 | 1011 1100 | BC₁₆ |
| -10 | 1000 1010 | 8A₁₆ |
Дополнительный код:
Используется для выполнения арифметических операций. Положительные числа представляются так же, как в прямом коде. Отрицательные числа требуют преобразования.
Алгоритмы преобразования
Из прямого кода в дополнительный (для отрицательного числа):
- Извлечь модуль (биты 0–6).
- Инвертировать все биты модуля.
- Прибавить 1 к результату.
- Установить бит 7 в 1 (знак отрицательный).
Пример: -60 (прямой: BC₁₆ = 10111100). Модуль: 0111100 (60). Инверт: 1000011, +1 = 1000100. С MSB=1: 11000100 (C4₁₆).
Из дополнительного кода в прямой (для отрицательного числа):
- Если бит 7 = 0 (положительное число), то прямой код равен дополнительному коду.
- Если бит 7 = 1 (отрицательное число):
- Вычесть 1 из всего 8-битного значения.
- Инвертировать все 8 битов результата.
- Младшие 7 битов инвертированного значения — это модуль числа.
- Установить бит 7 в 1 (знак отрицательный) и объединить с модулем.
Пример: -10 (дополнительный код: F6₁₆ = 11110110₂).
- Вычесть 1: 11110110₂ - 00000001₂ = 11110101₂ (F5₁₆).
- Инвертировать все биты: ~11110101₂ = 00001010₂ (0A₁₆).
- Модуль (младшие 7 битов): 0001010₂ = 10₁₀ (0A₁₆, без MSB).
- Прямой код: бит 7=1 + модуль = 10001010₂ (8A₁₆).
- Программу начать с адреса 10₁₆
- Использовать подпрограммы для преобразования форматов представления чисел
- Константы (01, 02, 03, 80₁₆) можно заранее записать в ячейки памяти
- Программа должна работать в режиме RS (пошаговое выполнение)
- Обеспечить визуальную индикацию этапов работы программы на светодиодном регистре DRG
- Разработать алгоритм программы в виде блок-схемы или структурной схемы
- Написать программу в машинных кодах микроЭВМ МП-589
- Записать константы в ячейки памяти (при использовании)
- Ввести программу в микроЭВМ, начиная с адреса 10₁₆
- Проверить правильность ввода программы
- Выполнить программу в режиме RS с тестовыми данными из таблицы
- Проверить корректность получаемых результатов
- Оформить отчёт
Базовые тесты:
| Первое число (hex/dec) | Второе число (hex/dec) | Операция (hex) | Ожидаемый результат (hex/dec) |
|---|---|---|---|
| 32₁₆ (+50) | BC₁₆ (-60) | 00₁₆ (сложение) | 8A₁₆ (-10) |
| 32₁₆ (+50) | BC₁₆ (-60) | 01₁₆ (вычитание) | 6E₁₆ (+110) |
| 9E₁₆ (-30) | 28₁₆ (+40) | 00₁₆ (сложение) | 0A₁₆ (+10) |
| 9E₁₆ (-30) | 28₁₆ (+40) | 01₁₆ (вычитание) | C6₁₆ (-70) |
Расширенные тесты (включая переполнение):
| Первое число (hex/dec) | Второе число (hex/dec) | Операция (hex) | Ожидаемый результат (hex/dec или ошибка) |
|---|---|---|---|
| 7F₁₆ (+127) | 01₁₆ (+1) | 00₁₆ (сложение) | FF₁₆ (переполнение, ошибка), понять, что будет при реализации |
| 00₁₆ (0) | 00₁₆ (0) | 00₁₆ (сложение) | 00₁₆ (0) |
- Титульный лист
- Цель работы
- Постановка задачи
- Алгоритм решения задачи (блок-схема или структурная схема)
- Текст программы в машинных кодах с подробными комментариями
- Таблица результатов тестирования программы (включая hex/dec и промежуточные значения в доп. коде)
- Инструкция оператора по использованию программы
- Выводы по работе
- В чём различие между прямым и дополнительным кодом представления чисел?
- Почему для выполнения арифметических операций используется дополнительный код?
- Опишите алгоритм преобразования отрицательного числа из прямого кода в дополнительный код.
- Опишите алгоритм преобразования отрицательного числа из дополнительного кода в прямой код.
- Как реализована операция вычитания в вашей программе?
- Какие команды микроЭВМ МП-589 используются для определения знака числа?
- Для чего в программе используются подпрограммы? Как организован вызов и возврат из подпрограммы?
- Как работает команда SRA и для чего она используется в программе?
- Что произойдёт при переполнении разрядной сетки при сложении двух больших чисел одного знака?
- Как реализовать проверку переполнения в программе?