Лабораторная работа. Арифметические операции над знаковыми числами

Постановка задачи

Разработать и отладить программу, выполняющую следующие действия:

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

Разработать пользовательский интерфейс с индикацией на DRG и инструкцией по вводу. Пример интерфейса:

  1. При появлении на DL1-4 "IN 1": Ввести первое число с тумблерного регистра TRG в формате прямого кода со знаком, продолжить выполнение.
  2. При появлении на DL1-4 "IN 2": Ввести второе число с тумблерного регистра TRG в формате прямого кода со знаком, продолжить выполнение.
  3. При появлении на DL1-4 "OP": Ввести код операции с TRG ( "+" — 00000000; "-" — 11111111 ), продолжить выполнение.
  4. По окончании работы программы на DRG — результат в прямом коде.

Примечание: DL1-4 — не обязательно использовать. Интерфейс пользователя разрабатывается самостоятельно.

Формат представления чисел

Прямой код со знаком:

  • Бит 7 — знак числа (0 = положительное, 1 = отрицательное)
  • Биты 6–0 — модуль числа (диапазон 0–127)

Примеры:

Число Двоичный код Hex
+50 0011 0010 32₁₆
-60 1011 1100 BC₁₆
-10 1000 1010 8A₁₆

Дополнительный код:

Используется для выполнения арифметических операций. Положительные числа представляются так же, как в прямом коде. Отрицательные числа требуют преобразования.

Алгоритмы преобразования

Из прямого кода в дополнительный (для отрицательного числа):

  1. Извлечь модуль (биты 0–6).
  2. Инвертировать все биты модуля.
  3. Прибавить 1 к результату.
  4. Установить бит 7 в 1 (знак отрицательный).

Пример: -60 (прямой: BC₁₆ = 10111100). Модуль: 0111100 (60). Инверт: 1000011, +1 = 1000100. С MSB=1: 11000100 (C4₁₆).

Из дополнительного кода в прямой (для отрицательного числа):

  1. Если бит 7 = 0 (положительное число), то прямой код равен дополнительному коду.
  2. Если бит 7 = 1 (отрицательное число):
    1. Вычесть 1 из всего 8-битного значения.
    2. Инвертировать все 8 битов результата.
    3. Младшие 7 битов инвертированного значения — это модуль числа.
    4. Установить бит 7 в 1 (знак отрицательный) и объединить с модулем.

Пример: -10 (дополнительный код: F6₁₆ = 11110110₂).

  1. Вычесть 1: 11110110₂ - 00000001₂ = 11110101₂ (F5₁₆).
  2. Инвертировать все биты: ~11110101₂ = 00001010₂ (0A₁₆).
  3. Модуль (младшие 7 битов): 0001010₂ = 10₁₀ (0A₁₆, без MSB).
  4. Прямой код: бит 7=1 + модуль = 10001010₂ (8A₁₆).

Требования к реализации
  • Программу начать с адреса 10₁₆
  • Использовать подпрограммы для преобразования форматов представления чисел
  • Константы (01, 02, 03, 80₁₆) можно заранее записать в ячейки памяти
  • Программа должна работать в режиме RS (пошаговое выполнение)
  • Обеспечить визуальную индикацию этапов работы программы на светодиодном регистре DRG
Порядок выполнения
  1. Разработать алгоритм программы в виде блок-схемы или структурной схемы
  2. Написать программу в машинных кодах микроЭВМ МП-589
  3. Записать константы в ячейки памяти (при использовании)
  4. Ввести программу в микроЭВМ, начиная с адреса 10₁₆
  5. Проверить правильность ввода программы
  6. Выполнить программу в режиме RS с тестовыми данными из таблицы
  7. Проверить корректность получаемых результатов
  8. Оформить отчёт
Тестовые примеры

Базовые тесты:

Первое число (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)

Содержание отчёта
  1. Титульный лист
  2. Цель работы
  3. Постановка задачи
  4. Алгоритм решения задачи (блок-схема или структурная схема)
  5. Текст программы в машинных кодах с подробными комментариями
  6. Таблица результатов тестирования программы (включая hex/dec и промежуточные значения в доп. коде)
  7. Инструкция оператора по использованию программы
  8. Выводы по работе
Контрольные вопросы
  1. В чём различие между прямым и дополнительным кодом представления чисел?
  2. Почему для выполнения арифметических операций используется дополнительный код?
  3. Опишите алгоритм преобразования отрицательного числа из прямого кода в дополнительный код.
  4. Опишите алгоритм преобразования отрицательного числа из дополнительного кода в прямой код.
  5. Как реализована операция вычитания в вашей программе?
  6. Какие команды микроЭВМ МП-589 используются для определения знака числа?
  7. Для чего в программе используются подпрограммы? Как организован вызов и возврат из подпрограммы?
  8. Как работает команда SRA и для чего она используется в программе?
  9. Что произойдёт при переполнении разрядной сетки при сложении двух больших чисел одного знака?
  10. Как реализовать проверку переполнения в программе?
Последнее изменение: вторник, 28 октября 2025, 09:00