Задание на лабораторную работу
Требуемые условия завершения
Лабораторная работа. Основы работы с регистрами и преобразования форматов представления чисел
Цель работы: Освоить базовые операции над регистрами (сдвиги), визуализацию на DRG, а также преобразование знаковых чисел из прямого кода в дополнительный код с индикацией знака.
Постановка задачи
Разработать и отладить две независимые программы для каждого задания. Каждая программа должна начинаться с адреса 10₁₆. Для Задания 1 использовать режим RC (циклическое исполнение), для Задания 2 — режим RS (пошаговое).
Задание 1. Реализация циклического «бегущего единичного бита» с визуализацией на DRG
Разработать программу, выполняющую следующие действия:
- Загрузить в аккумулятор AC начальное значение 01₁₆ (
0000 0001₂), не используя запись в память. - Выполнить 7 последовательных сдвигов влево, каждый раз выводя результат на светодиодный регистр DRG.
- После каждого сдвига младший разряд заполняется 0 (использовать команду логического сдвига влево, например, SLA).
- Затем выполнить 7 последовательных сдвигов вправо, также выводя результат на DRG.
- После каждого сдвига старший разряд заполняется 0 (использовать команду логического сдвига вправо, например, SRA).
- Для реализации сдвигов использовать доступные команды микроЭВМ (арифметические операции и условные переходы для циклов).
- Визуально проконтролировать корректность «бегущего шарика» по светодиодам DRG в режиме RC (циклическое исполнение).
Задание 2. Преобразование числа из прямого кода в дополнительный код с визуализацией результата
Разработать программу, выполняющую следующие действия:
- Ввести значение, установленное на тумблерном регистре TRG, в аккумулятор AC (в формате прямого кода со знаком).
- Преобразовать это значение в дополнительный код по следующему алгоритму:
- Если старший бит (бит 7) = 0 (число неотрицательное), то дополнительный код совпадает с исходным.
- Если старший бит = 1 (число отрицательное в прямом коде), то:
- Извлечь модуль числа (биты 0–6, маскируя бит 7).
- Инвертировать биты модуля (7 бит, дополненные 0 до 8 бит).
- Прибавить 1 к результату.
- Установить бит 7 в 1 (знак отрицательный).
- Вывести полученное значение в дополнительном коде на светодиодный регистр DRG.
- Определить знак результата и вывести индикацию на дисплей DL:
- Если результат ≥ 0 (старший бит = 0) → вывести 4 пустых символа на DL.
- Если результат < 0 (старший бит = 1) → вывести 3 пустых символа и символ «–» на DL.
Формат представления чисел
Прямой код со знаком (для Задания 2):
- Бит 7 — знак числа (0 = положительное, 1 = отрицательное)
- Биты 6–0 — модуль числа (диапазон 0–127)
Примеры:
| Число | Двоичный код (прямой) | Hex (прямой) | Дополнительный код (Hex) |
|---|---|---|---|
| +5 | 0000 0101 | 05₁₆ | 05₁₆ |
| -3 | 1000 0011 | 83₁₆ | FD₁₆ |
| -0 | 1000 0000 | 80₁ₖ | 00₁ₖ |
Примечание: Для Задания 1 формат не применяется — используются только биты для визуализации сдвигов.
Требования к реализации
- Каждую программу начать с адреса 10₁₆.
- Использовать константы (01, 07, 7F, 80₁ₖ) заранее в памяти, если нужно.
- Для Задания 1: обеспечить циклическое выполнение (JMP в начало).
- Для Задания 2: использовать подпрограммы для преобразования, если возможно.
- Обеспечить визуальную индикацию на DRG (для обеих) и DL (для Задания 2).
Порядок выполнения
- Разработать алгоритм программы в виде блок-схемы или структурной схемы для каждого задания.
- Написать программу в машинных кодах микроЭВМ МП-589 (отдельно для каждого задания).
- Записать константы в ячейки памяти (при использовании).
- Ввести программу в микроЭВМ, начиная с адреса 10₁ₖ.
- Проверить правильность ввода программы.
- Выполнить программу в режиме RC для Задания 1 и RS для Задания 2 с тестовыми данными.
- Проверить корректность получаемых результатов.
- Оформить отчёт.
Тестовые примеры
Задание 1: Визуально проверить последовательность на DRG.
| Шаг | Сдвиг влево (Binary/Hex) | Сдвиг вправо (Binary/Hex) |
|---|---|---|
| 0 | 00000001 / 01 | — |
| 1 | 00000010 / 02 | 10000000 / 80 |
| 2 | 00000100 / 04 | 01000000 / 40 |
| 3 | 00001000 / 08 | 00100000 / 20 |
| 4 | 00010000 / 10 | 00010000 / 10 |
| 5 | 00100000 / 20 | 00001000 / 08 |
| 6 | 01000000 / 40 | 00000100 / 04 |
| 7 | 10000000 / 80 | 00000010 / 02 |
После 7-го вправо — возврат к 01, цикл повторяется.
Задание 2:
| Вход (TRG, hex/dec) | Знак входа | Результат в доп. коде (DRG, hex) | Индикация знака (DL) |
|---|---|---|---|
| 05₁ₖ (+5) | + | 05₁ₖ | 4 пустых |
| 83₁ₖ (-3) | - | FD₁ₖ | 3 пустых + «–» |
| 80₁ₖ (-0) | - | 00₁ₖ | 4 пустых (≥0) |
Содержание отчёта
- Титульный лист
- Цель работы
- Постановка задачи
- Алгоритм решения задачи (блок-схема или структурная схема) для каждого задания
- Текст программы в машинных кодах с подробными комментариями (для каждого задания)
- Таблица результатов тестирования программы (включая hex/dec, визуальные описания и индикацию DL)
- Выводы по работе
Контрольные вопросы
- В чём различие между логическим и арифметическим сдвигом? Как это влияет на знак числа?
- Почему в Задании 1 используются сдвиги с заполнением нулями (логические), а не арифметические?
- Опишите алгоритм преобразования отрицательного числа из прямого кода в дополнительный код.
- Почему для положительных чисел прямой и дополнительный коды совпадают?
- Как реализованы циклы в программе для Задания 1 (используя условные переходы)?
- Какие команды микроЭВМ используются для ввода с TRG и вывода на DRG/DL?
- Для чего используется дисплей DL в Задании 2? Как кодируется символ «–»?
- Что произойдёт при вводе числа с модулем >127 (например, 100₁ₖ)?
- Как организовать циклическое исполнение в режиме RC?
- В чём преимущество дополнительного кода перед прямым для арифметических операций?
Примечание: Для Задания 1 в режиме RC наблюдайте "бегущий бит" на DRG. Для Задания 2 в режиме RS пользователь устанавливает TRG и переходит к следующему шагу. Алгоритм Задания 2 исправлен для корректного преобразования (инверсия только модуля).
Последнее изменение: вторник, 28 октября 2025, 21:00