
- •Описание лабораторного макета
- •Устройство умк
- •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
Деление
Существует несколько алгоритмов деления. В описании к лабораторной работе № 5 "Выполнение арифметических операций" рассмотрены два алгоритма, позволяющие рассчитать частное и остаток от деления двух 8-ми разрядных слов. На практике часто применяется программа упрощенного деления с округлением результата до целого. Рассмотрим один из таких алгоритмов, позволяющий делить положительные и отрицательные представленные в дополнительном коде числа на положительное целое число.
Алгоритм основан на операциях сдвига и вычитания и выполняется следующим образом:
В счетчик числа циклов загружаем число N, соответствующее разрядности частного от деления.
Р
ис.
10.2. Блок-схема алгоритма умножения чисел
Сдвигаем делимое на один разряд влево. Если полученный старший разряд делимого равен 1, то прибавляем к старшему слову делимого делитель, если старший разряд делимого равен нулю, то вычитаем из старшего слова делимого делитель.
Проверяем старший разряд результата операции п2. Если старший разряд результата равен 0, то бит частного равен 1, в противном случае бит частного равен 0.
Уменьшаем содержимое счетчика числа циклов на 1 и переходим к п.2, если счетчик не равен 0.
Отметим, что в процессе расчета биты частного устанавливаются от старшего к младшему, т. е. на первом цикле в п3. определяется самый старший бит, а на последнем цикле — самый младший бит частного.
Алгоритм расчета поясним на следующем примере:
а) 62:6 10,3; N=5
000111110:0110 0 1 010 = +1010
001111100
- 0110_____
110111100 старший бит
=1
101111000
+0110_____
000111000 старший бит
=0
001110000
- 0110_____
110110000 старший бит
=1
101100000
+0110_____
000100000 старший бит =0
001000000
- 0110_____
110000000 старший бит
=1
б) (-62):6 -10,3
111000010 : 0110 1 0 1 0 1 = -1110
110000100
+0110_____
001000100 старший
бит = 0
010001000
- 0110_____
111001000 старший
бит = 1
110010000
+0110_____
001010000 старший
бит = 0
010100000
- 0110_____
111100000 старший бит = 1
111000000
+0110_____
010000000 старший
бит = 0
В подпрограмме 10.4 приведен пример программы деления 32-х разрядного числа на 16-ти разрядное по рассмотренному алгоритму. Делимое расположено в регистрах R1 и R2, делитель в регистре R3, частное от деления размещается в регистре R2. Регистр R0 используется в качестве счетчика циклов.
Блок - схема подпрограммы 10.4 приведена на рис. 10.3. В начальной части подпрограммы производится проверка на знак делителя. Если содержимое R3 — отрицательное число, то производится изменение знака делителя и делимого.
Если содержимое R3 — положительное число, то переход к собственно алгоритму деления. Далее загружается счетчик циклов R0 и производятся циклы сдвигов и арифметических действий в соответствии с описанным алгоритмом.
Отметим, что программа работоспособна, если частное не превышает по разрядности разрядность регистра R2. В противном случае программа производит вычисления с ошибкой.
В подпрограмме 10.4 в качестве делителя могут быть использованы целые числа в диапазоне от -32768 до +32767.
Подпрограмма 10.4.
(R1,R2):(R3) = (R2)
Метка |
Мнемоника |
Комментарий |
|
TST R3 |
Проверка знака делителя |
|
BPL M1 |
Переход, если делитель положительное число |
|
СОМ R1 |
Изменение знака делимого |
|
СОМ R2 |
|
|
ADD #1,R2 |
|
|
ADC R1 |
|
|
NEG R3 |
Изменение знака делителя |
M1 |
MOV #20,R0 |
Загрузка счетчика циклов |
M5 |
ASL R2 |
Сдвиг делимого влево |
|
ROL R1 |
|
|
BIT #100000,R1 |
Проверка старшего разряда делимого |
|
BEQ M2 |
Переход, если старший разряд равен 0 |
|
ADD R3,R1 |
Сложение старшего слова делимого с делителем |
|
BR МЗ |
Безусловный переход |
M2 |
SUB R3,R1 |
Вычитание из старшего слова делимого делителя |
M3 |
BIT #100000,R1 |
Проверка старшего разряда результата |
|
BNE M4 |
Переход, если старший разряд равен 1 |
|
INC R2 |
Установка текущего разряда частного в 1 |
M4 |
SOB R0,M5 |
Уменьшение содержимого счетчика на 1. Переход, если содержимое R0>0 |
|
HALT |
Останов |
В подпрограмме 10.5 приведена программа деления 48-ми разрядного числа на 32-х разрядное число. Программа составлена на основании приведенного алгоритме деления. Делимое располагается в регистрах R3, R4 и R5, делитель в регистрах R1, R2, частное после выполнения программы располагается в регистре R5, в качестве счетчика числа циклов используется регистр R0.
Отметим, что, несмотря на увеличение разрядности делимого и делителя, в программе 5 остается ограничение на частное, которое должно быть в диапазоне от -32768 то +32767.
Р
ис.
10.3. Блок - схема подпрограммы деления
Подпрограмма 10.5
(R3,R4,R5) : (R 1,R2) = (R5)
Метка |
Мнемоника |
Комментарий |
|
TST R1 |
Проверка знака делителя |
|
BPL М1 |
Переход, если делитель положительное число |
|
СОМ R1 |
Изменение знака делителя |
|
СОМ R2 |
|
|
ADD #1,R2 |
|
|
ADC R1 |
|
|
СОМ R3 |
Изменение знака делимого |
|
СОМ R4 |
|
|
СОМ R5 |
|
|
ADD #1,R5 |
|
|
ADC R4 |
|
|
ADC R3 |
|
M1 |
MOV #20,R0 |
Загрузка счетчика числа циклов |
M5 |
ASL R5 |
Сдвиг делимого влево |
|
ROL R4 |
|
|
ROL R3 |
|
|
BIT #100000,R3 |
Проверка старшего разряда делимого |
|
BEQ M2 |
Переход, если старший разряд равен 0 |
|
ADD R2,R4 |
Сложение содержимого регистров R3 и R4 с делителем |
|
ADC R3 |
|
|
ADD R1,R3 |
|
|
BR M3 |
Безусловный переход |
M2 |
SUB R2,R4 |
Вычитание из содержимого регистров R3 и R4 делителя |
|
SBC R3 |
|
|
SUB R1,R3 |
|
M3 |
B1T #100000,R3 |
Проверка старшего разряда результата |
|
BNE M4 |
Переход, если старший разряд результата равен 1 |
|
INC R5 |
Установка текущего разряда частного в 1 |
M4 |
SOB R0,M5 |
(R0)=(R0)-1. Переход, если содержимое R0>0 |
|
HALT |
Останов |