Файл: В.В. Демьянов Изучение системы команд микропроцессора серии К580 на учебно-отладочной микроЭВМ.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 15.06.2024
Просмотров: 71
Скачиваний: 0
31
|
|
|
|
Продолжение программы 2 |
|
Адрес |
Код |
Метка |
Мнемокод |
Комментарий |
|
|
команды |
|
|
|
|
820D |
D2 1582 |
|
JNC M1 |
Если нет займа (результат |
|
|
|
|
|
положительный), идти к |
|
|
|
|
|
M1 |
|
8210 |
AF |
|
XRA |
|
|
8211 |
3C |
|
INR A |
Занести 1 в аккумулятор |
|
8212 |
32 00 80 |
|
STA 8000 |
Занести 1 по адресу 8200 |
|
8215 |
E7 |
|
RST4 |
Прервать |
выполнение |
|
|
|
|
программы |
|
Существует несколько алгоритмов умножения чисел. Наиболее распространенный из них - алгоритм умножения в столбец, например:
При вычислении результата по этому алгоритму необходимо осуществить многократное суммирование со сдвигом влево множимого при одновременной проверке содержимого разрядов множителя, начиная со стороны его младшего разряда. При этом, если в очередном разряде множителя записана 1, то множимое прибавляется к сумме и сдвигается влево на 1 разряд, а если в разряде записан 0, то произойдет только сдвиг множимого. Сдвиг множимого влево можно заменить сдвигом суммы вправо. По этому
алгоритму работает программа умножения двух однобайтных чисел с получением двухбайтного результата (программа 3). В регистре D содержится множимое, в регистре Е - множитель. Результат записывается в регистры В и С.
Программа 3
Адрес |
Код |
Метка |
Мнемокод |
Комментарий |
|
команды |
|
|
|
8200 |
01 0000 |
MPL |
LXI B, 0000 |
Очистить регистры B, C |
8203 |
3E 01 |
|
MVI A,01 |
Загрузить в аккумулятор |
|
|
|
|
указатель разряда |
8205 |
A7 |
|
ANA A |
Очистить признак C |
31
32
Продолжение программы 3
Адрес |
Код |
Метка |
Мнемокод |
Комментарий |
|
|
команды |
|
|
|
|
8206 |
F5 |
MPL1 |
PUSH PSW |
Сохранить указатель раз- |
|
|
|
|
|
ряда в стеке |
|
8207 |
A3 |
|
ANA E |
Проверить |
содержимое |
|
|
|
|
очередного разряда мно- |
|
|
|
|
|
жителя |
|
8208 |
78 |
|
MOV A,B |
Загрузить |
в аккумулятор |
|
|
|
|
старший байт суммы |
|
8209 |
CA 0D 82 |
|
JZ MPL2 |
Если в очередном поряд- |
|
|
|
|
|
ке записан 0, идти к |
|
|
|
|
|
MPL2 |
|
820C |
82 |
|
ADD D |
Прибавить содержимое к |
|
|
|
|
|
сумме |
|
820D |
1F |
MPL2 |
RAR |
Сдвинуть |
сумму вправо |
|
|
|
|
(младший байт→ C) |
|
820E |
47 |
|
MOV B,A |
Сохранить |
содержимое |
|
|
|
|
аккумулятора в регистре |
|
|
|
|
|
B |
|
820F |
79 |
|
MOV A,C |
Загрузить |
в аккумулятор |
|
|
|
|
младший байт суммы |
|
8210 |
1F |
|
RAR |
Сдвинуть число в акку- |
|
|
|
|
|
муляторе вправо (C→ в |
|
|
|
|
|
старший байт) |
|
8211 |
4F |
|
MOV C,A |
Сохранить |
содержимое |
|
|
|
|
аккумулятора в регистре |
|
|
|
|
|
C |
|
8212 |
F1 |
|
POP PSW |
Получить из стека указа- |
|
|
|
|
|
тель разряда |
|
8213 |
17 |
|
RAL |
Указатель на следующий |
|
|
|
|
|
разряд |
|
8214 |
D2 0682 |
|
JNC MPL1 |
Если разряд не послед- |
|
|
|
|
|
ний, идти к MPL1 |
|
8217 |
E7 |
|
RST4 |
Прервать |
выполнение |
|
|
|
|
программы |
32
33
Деление двоичных чисел основывается на последовательном вычитании делителя из делимого и остатков от деления. Использование в двоичном коде только двух цифр (0 и 1) исключает в каждом цикле деления необходимость определения числа делителей, содержащихся в текущем значении делимого или остатка (достаточно только сравнить их). Основанная на этом алгоритме программа 1 производит деление однобайтных чисел. Делимое содержится в регистре Е, делитель - в регистре D, частное - в регистре Н, остаток - в регистре С.
Для вычисления специальных функций (SIN X, COS X, LN X и т.п.) применяются алгоритмы, основанные на разложении этих функций в соответствующие ряды. Это занимает длительное время и обеспечивает невысокую точность, т.к. у МП серии К580 сравнительно небольшая длина машинного слова и невысокая производительность. Поэтому, когда ставятся жесткие требования по точности и быстродействию, функции задаются в виде таблиц. Однако такое представление требует значительно большего объема памяти, чем при их вычислении.
Программа 4
Адрес |
Код |
Метка |
Мнемокод |
Комментарий |
|
команды |
|
|
|
8200 |
21 0800 |
DIVB |
LXI B, 0008 |
Загрузить счетчик блоков |
|
|
|
|
в регистр L и очистить |
|
|
|
|
регистр H |
8203 |
0E 00 |
|
MVI C,00 |
Очистить регистр проме- |
|
|
|
|
жуточного делимого |
8205 |
7B |
MXT |
MOV A,E |
Загрузить делимое в ак- |
|
|
B |
|
кумулятор |
8206 |
17 |
|
RAL |
Сдвинуть старший байт в |
|
|
|
|
признак C |
8207 |
5F |
|
MOV E,A |
Возвратить делимое в ре- |
|
|
|
|
гистр E |
8208 |
79 |
|
MOV A,C |
Загрузить в аккумулятор |
|
|
|
|
промежуточное делимое |
|
|
|
|
из регистра C |
8209 |
17 |
|
RAL |
Сдвинуть признак C в |
|
|
|
|
младший байт |
33
34
|
|
|
|
Продолжение программы 4 |
|
Адрес |
Код |
Метка |
Мнемокод |
Комментарий |
|
|
команды |
|
|
|
|
820A |
92 |
|
SUB D |
Вычесть из модифициро- |
|
|
|
|
|
ванного промежуточного |
|
|
|
|
|
делимого делитель |
|
820B |
D2 0F82 |
|
JNC N0ADD |
Если признак C=1, вос- |
|
|
|
|
|
становить |
содержимое |
|
|
|
|
аккумулятора |
|
820E |
82 |
|
ADD D |
|
|
820F |
4F |
N0AD |
MOV C,A |
Возвратить |
промежуточ- |
|
|
D |
|
ные данные в регистр C |
|
8210 |
3F |
|
CMC |
Инвертировать признак C |
|
8211 |
7C |
|
MOV A,H |
Загрузить частное в ак- |
|
|
|
|
|
кумулятор |
|
8212 |
17 |
|
RAL |
Сдвинуть |
признак C в |
|
|
|
|
младший разряд частного |
|
8213 |
67 |
|
MOV H,A |
Сохранить частное в ре- |
|
|
|
|
|
гистре H |
|
8214 |
2D |
|
DCR L |
Уменьшить на 1 содер- |
|
|
|
|
|
жимое счетчика битов L |
|
8215 |
C2 0582 |
|
JNZ MXTB |
Если проверены 8 разря- |
|
|
|
|
|
дов, то останов, иначе |
|
|
|
|
|
идти к MXTB |
|
8218 |
E7 |
|
RST4 |
Прервать |
выполнение |
|
|
|
|
программы |
|
2. ЗАДАНИЕ ДЛЯ ДОМАШНЕЙ ПОДГОТОВКИ
1. Изучите группу арифметических команд МП серии К580.
2.Изучите программы 1-4, приведенные выше. Рассмотрите алгоритмы их работы. Рассмотрите результат выполнения каждой программы на конкретных числовых примерах.
3.Произведите оценку времени выполнения программ умножения
иделения восьмиразрядных двоичных чисел.
34
35
4.Составьте программы исследования результатов перемножения и деления чисел, приняв программы 3 и 4 в качестве подпрограмм.
5.Разработайте программу сложения двух восьмиразрядных чисел
сполучением результата в двоично-десятичном коде (результат должен быть записан по адресам 8000 и 8001).
3.ЗАДАНИЕ К ЛАБОРАТОРНОЙ РАБОТЕ
3.1. Исследовать программу сложения однобайтных чисел с получением двухбайтного результата.
Ввести в микроЭВМ программу 1. Записать в микроЭВМ последовательность из пяти чисел, начиная с адреса 8400. Запустить программу на счет и проверить ее выполнение по данным, записанным в регистре С и аккумуляторе МП. Изменить программу 1 так, чтобы результат ее выполнения записывался по адресам 8000 и 8001. Изменить в программе количество слагаемых и выполнить счет заново.
3.2.Исследовать программу вычитания двух чисел, имеющих одинаковую длину.
Ввести программу 2 в микроЭВМ. Занести в регистровые пары DЕ
иHL начальные адреса младших байтов уменьшаемого и вычитаемого (используйте область памяти 8400-87FF), а в регистр С - длину числа в байтах (для первого случая длина равна 1). Записать по адресам, указанным в регистровых парах DЕ и HL, уменьшаемое и вычитаемое (выбрать уменьшаемое больше, чем вычитаемое). Запустить программу на счет и исследовать результат ее выполнения по числу, записанному по адресу, где находится вычитаемое, и по адресу 8000. Изменить числа, записанные по адресам, занесенным в регистровые пары DЕ и HL так, чтобы вычитаемое было больше уменьшаемого, запустить программу на счет и проанализировать результат. Исследовать в аналогичной последовательности результаты вычитания двухбайтных чисел.
3.3.Исследовать программу умножения двух восьмиразрядных чисел с получением шестнадцатиразрядного результата.
Ввести в микроЭВМ программу умножения, разработанную самостоятельно на основе программы 3. Осуществить пуск программы и проверить результат умножения двух чисел по числу, записанному в регистрах В, С.
35
36
3.4. Исследовать программу деления двух восьмиразрядных чисел. Ввести в микроЭВМ программу 4. Занести в регистры Е и D делимое и делитель. Запустить программу и проверить результат деления по
содержимому регистров H и C.
3.5.Исследовать программу сложения двух восьмиразрядных чисел
сполучением результата в двоично-десятичном коде.
Ввести в микроЭВМ программу, разработанную при выполнении п.5 задания для домашней подготовки. Проверить результаты выполнения программы при сложении следующих чисел 33+25; 38+25; 98+25. Заменить в разработанной программе операцию сложения на операцию вычитания и проверить, возможно ли осуществить десятичную коррекцию числа аккумулятора после команды вычитания.
4. СОДЕРЖАНИЕ ОТЧЕТА
Отчет должен содержать:
1) перечень арифметических команд МП серии К580;
2)алгоритмы сложения, умножения и деления;
3)разработанные на основании п.4 и 5 задания для домашней подготовки программы;
4)расчет времени выполнения программ умножения и деления восьмиразрядных чисел.
5. КОНТРОЛЬНЫЕ ВОПРОСЫ
1. Какие команды арифметических операций может выполнять МП К580?
2.Сформулируйте правило выполнения МП команды DAA.
3.После каких команд можно осуществлять десятичную коррекцию числа аккумулятора (выполнять команду DAA)?
4.Как оценить максимальное время выполнения подпрограммы умножения двух чисел (программа 3)?
5.Можно ли непосредственно исследовать перемножения двух чисел по подпрограмме 3?
6.На чем основаны алгоритмы работы подпрограмм умножения и деления чисел?
36