- •Описание лабораторного макета
- •Устройство умк
- •2. Подготовка умк к работе
- •3. Порядок работы
- •3.1. Описание клавиатуры.
- •Индикация и изменение содержимого памяти.
- •3.3. Индикация и изменение содержимого регистров.
- •3.4. Передача управления программе пользователя.
- •3.6. Заполнение массива памяти константой.
- •3.8. Прерывание выполнения программы пользователя.
- •3.9. Пошаговое выполнение программ.
- •Лабораторная работа № 1 запись и выполнение простых программ
- •Теоретическая часть
- •Задание для домашней подготовки
- •Задание для выполнения в лаборатории
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа № 2 виды адресации и команды пересылок
- •Теоретическая часть
- •Задание для домашней подготовки
- •Задание для выполнения в лаборатории
- •Указания по оформлению отчета
- •Контрольные вопросы
- •Организация циклов
- •Задание для домашней подготовки
- •Задание для выполнения в лаборатории
- •Задание для домашней подготовки
- •Задание для выполнения в лаборатории
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа № 5 выполнение арифметических операций
- •Теоретическая часть
- •Задание для домашней подготовки
- •Задание для домашней подготовки
- •Задание для выполнения в лаборатории
- •Методические указания
- •Способы адресации процессора к1801
- •Форматы команд микропроцессора кр 1801:
- •Коды способов адресации процессора к1801
- •Задание для домашней подготовки
- •Команды переходов
- •Пример 9.2.
- •Пример 9.3
- •Задание для выполнения в лаборатории
- •Контрольные вопросы
- •Лабораторная работа № 10 выполнение арифметических операций в машинных кодах микропроцессора к1801вм1
- •Теоретическая часть
- •Умножение
- •Деление
- •Задание для домашней подготовки
- •Задание для выполнения в лаборатории
- •Указания по оформлению отчета
- •Контрольные вопросы
- •Приложения
- •Система команд микропроцессора кр580вм80а
- •Система команд мп к1801вм1 Одноадресные команды
- •Двухадресные команды
- •Регистровые команды
- •Команды управления
- •Команды прерываний и специальные команды
- •Изменение кодов условий
- •Условные обозначения
- •Время выполнения команд мп к1801вм1
- •1. Устройство умк 3
Умножение
В основе программ умножения лежит алгоритм — умножение в столбец, основанный на последовательных сдвигах и суммированиях. Отметим, что сдвиг возможен как влево, так и вправо. Например, при сдвиге влево умножение производится следующим образом:
10621=2226D
01101010
+00010101
01101010
+01101010__
1000010010
+01101010____
0100010110010
Отметим, что при умножении со сдвигом влево производится последовательный анализ разрядов множителя, начиная с младшего, до старшего с последующим сдвигом влево множимого и суммированием.
Классический алгоритм умножения со сдвигом влево приведен в описании лабораторной работы 5 "Выполнение арифметических операций".
Приведем один из возможных вариантов реализации этого алгоритма:
Загружаем в счетчик числа циклов число N, соответствующее разрядности операндов.
Обнуляем регистр - накопитель.
Анализируем младший (текущий) бит множителя. Если он равен нулю, то переходим к пункту 5.
Прибавляем множимое к старшему слову регистра - накопителя.
Сдвигаем содержимое регистра - накопителя вправо на один разряд.
Сдвигаем множитель вправо на один разряд. При этом младший бит теряется.
Уменьшаем содержимое счетчика числа циклов на единицу и переходим к пункту 3, если содержимое счетчика больше нуля.
Напомним, что умножение в двоичной арифметике двух чисел ограниченной разрядности без принятия специальных мер по определению знака результата имеет смысл только для положительных чисел. Поэтому, если в программе возникает необходимость умножить отрицательное число на положительное, то предварительно необходимо отрицательное число инвертировать.
Допустим, необходимо умножить два шестнадцатиразрядных числа, причем одно из них может принимать как положительные, так и отрицательные значения. При этом в регистре R3 расположено отрицательное множимое, а в регистре R2 — положительный множитель. Результат необходимо разместить в регистрах R1, R2. Для реализации алгоритма умножения используем регистр R0 в качестве счетчика циклов.
На рис. 10.1 приведена подробная блок-схема умножения чисел:
(R3)(R2) = (R1,R2).
Р ис. 10.1. Блок-схема алгоритма умножения чисел
Один из возможных вариантов реализации этого алгоритма приведен в подпрограмме 10.1.
Подпрограмма 10.1.
Метка |
Мнемоника |
Комментарий |
|
TST R3 |
Проверка содержимого R3 |
|
BPL M1 |
Переход, если (R3) >= 0 |
|
NEG R3 |
(R3) -(R3) |
М1 |
MOV #20,R0 |
Загрузка счетчика циклов (R0) = 16D. |
|
CLR R1 |
Очистка (R1) = 0. |
М3 |
BIT #1,R2 |
Проверка младшего разряда множителя |
|
BEQ М2 |
Если младший бит = 0, то переход на М2 |
|
ADD R3,R1 |
Прибавить содержимое (R3) к накопителю |
М2 |
ASR R1 |
Арифметический сдвиг вправо |
|
ROR R2 |
Циклический сдвиг вправо |
|
SOB R0,M3 |
(R0) = (R0)-1. Переход, если (R0) не равно 0. |
|
HALT |
Останов. |
При выполнении этой программы в качестве регистра-накопителя используется собственно регистр R1 и часть регистра R2 по мере сдвига множителя вправо. Таким образом, подпрограмма 10.1 позволяет перемножать 15-ти разрядное и 16-ти разрядное число.
Подпрограмму 10.1 можно легко приспособить для умножения двух 16-ти разрядных положительных чисел (подпрограмма 10.2).
Подпрограмма 10.2.
Метка |
Мнемоника |
Комментарий |
|
MOV #20,R0 |
Загрузка счетчика циклов |
|
CLR R1 |
Очистка регистра-накопителя |
M3 |
BIT #1,R2 |
Проверка младшего бита множителя |
|
BEQ M1 |
Если бит равен 0, то переход на Ml |
|
ADD R3,R1 |
Прибавить множимое к накопителю |
|
BR М2 |
Безусловный переход на М2 |
M1 |
CLC |
Очистка бита С |
M2 |
ROR R1 |
Циклический сдвиг (R1) вправо |
|
ROR R2 |
Циклический сдвиг (R2) вправо |
|
SOB R0,M3 |
Переход на M3, если (R0)>0 |
|
HALT |
Останов |
Пользуясь приемами работы с числами, состоящими из нескольких слов можно увеличить разрядность сомножителей. В подпрограмме 10.3 приведен пример умножения 32-х разрядного положительного числа, размещенного в регистрах R1 и R2 на 16-ти разрядное положительное число, расположенное в регистре R5. Результат операции размещаем в регистрах R3, R4, R5 Блок-схема подпрограммы 3 приведена ни рис. 10.2.
В качестве счетчика циклов используется регистр R0.
Подпрограмма 10.3.
(R1,R2)*(R5) = (R3,R4,R5)
Метка |
Мнемоника |
Комментарий |
|
MOV #20,R0 |
Загрузка счетчика циклов |
|
CLR R3 |
Очистка регистров накопителей R1,R4 |
|
CLR R4 |
|
M3 |
BIT #1,R5 |
Проверка младшего бита множителя |
|
BEQ M1 |
Переход, если бит нулевой |
|
ADD R2,R4 |
Прибавить множимое к регистру-накопителю |
|
ADC R3 |
|
|
ADD R1,R3 |
|
|
BR M2 |
Безусловный переход |
M1 |
CLC |
Очистка бита С |
M2 |
ROR R3 |
Цикл. сдвиг содержимого регистров. R3, R4 ,R5 вправо. |
|
ROR R4 |
|
|
ROR R5 |
|
|
SOB R0,M3 |
(R0) = (R0)-1. Переход, если R0>0 |
|
HALT |
Останов |