ВУЗ:
Составители:
Эта подпрограмма предназначена для умножения 8-битных целых чисел без знака. Она реализует анализ отдельных
цифр множителя с последующим накапливающим суммированием множимого и сдвигом частичной суммы или множимого.
Умножение выполняется старшими разрядами вперёд. Сдвиг частичной суммы в регистрах Н, L осуществляется командой
удвоения DAD Н.
Перед выполнением подпрограммы один множитель помещается в аккумулятор, второй – в регистр Е. Результат будет
получен в регистровой паре Н, L. Команда LXI Н, 0000Н обнуляет содержимое регистровой пары Н, L, чтобы предваритель-
но записанные в этих регистрах данные не влияли на результат вычисления подпрограммы. Команда MVI B, 08Н служит для
начальной установки счётчика циклов (или счётчика бит). В ходе подпрограммы осуществляется умножение одного множи-
мого целиком на каждый бит другого множителя. Как уже было указано, оба числа –
8-битные, поэтому требуется 8 циклов. Команда DAD Н осуществляет удвоение частичной суммы, а команда RLC – удвое-
ние содержимого аккумулятора (множителя). Команда JNZ анализирует содержимое следующего разряда. Если этот разряд
равен 1, то множимое (в регистровой паре D, Е) добавляется к частичной сумме. Если этот разряд равен нулю, суммирование
пропускается. Команда DCR B осуществляет счёт циклов. Если вычисления не закончены, осуществляется условный пере-
ход на следующий цикл (командой JNZ M4). По окончании вычислений осуществляется возврат в основную программу по
команде RЕТ.
ПРИМЕР ВЫПОЛНЕНИЯ КУРСОВОГО ПРОЕКТА
1. ОБЩАЯ ПОСТАНОВКА ЗАДАЧИ
Пусть алгоритм работы устройства задан уравнением
V
(
t
) =
kx
2
(
t
) +
y
(
t – N
),
где
k
– заданная константа, например,
k
= 2,5;
x
(
t
) – сигнал на одном входе (порт
X
– 1 байт);
y
(
t – N
) – сигнал, поступающий
по второму входу и отстающий от
x
(
t
) на
N
=10 тактов (порт
Y
– 1 байт);
V
(
t
) – выходной сигнал, выводится через порт
V
(2
байта). Для хранения коэффициента
k
можно отвести ячейку ОЗУ или формировать этот коэффициент в самой программе,
что обычно предпочтительней.
Для хранения
N
слов, считанных в моменты времени, следующие за
t
i
после поступления
у
(
t
i
–
N
), целесообразно орга-
низовать очередь. Внутри ОЗУ выделяется некоторая область, выполняющая функции стека. Как обычно, регистровая пара
HL будет адресным индексным регистром при косвенной адресации ПЗУ и ОЗУ. Различие в ПЗУ и ОЗУ при обращении к
памяти будет заключаться в установке адресной линии А15 в 1 или 0. Например, при А15 = 0 производится выборка из ПЗУ,
а при А15 = 1 – обращение к ОЗУ.
Если в проектируемом устройстве содержится не более восьми портов для подключения внешних устройств вво-
да/вывода, то каждому порту выделяется индивидуальная адресная линия, что соответствует использованию кода «1 из 8-
ми» для кодирования портов ввода/вывода:
PORT 1 – 00000001 (01Н) PORT 5 – 00000001 (10Н=16)
PORT 2 – 00000010 (02Н) PORT 6 – 00000001 (20Н=32)
PORT 3 – 00000100 (04Н) PORT 7 – 00000001 (40H=64)
PORT 4 – 00001000 (08Н) PORT 8 – 00000001 (80H=128)
2. РАСПРЕДЕЛЕНИЕ ПАМЯТИ
Весь объём адресуемой памяти (64К) с адресами 0000H...FFFFH можно распределить следующим образом. Для основ-
ной программы будем использовать адреса, начиная с 0000Н до FFFFH. Для инициализации портов ввода/вывода зададим их
адреса: порт ввода переменной
x
(
t
) – 01H; порт ввода
y
(
t
–
N
) – 02H, порт вывода
V
(
t
) – 04H (применяется код «1 из 8-ми»).
3. СОСТАВЛЕНИЕ СТРУКТУРНОЙ СХЕМЫ АЛГОРИТМА РЕШЕНИЯ
ЗАДАЧИ И ПРОГРАММЫ
В соответствии со словесным описанием составляем структурную схему алгоритма, на основании которой будет разра-
батываться программа.
Следует придерживаться естественного хода решения, т.е. линейной структуры с необходимыми метками и циклами
(рис. 1).
Программы на ассемблере и в машинных кодах, соответствующие этому алгоритму, приведены в табл. 4.
В приведённом алгоритме решения задачи константа
k
формируется программным путём, с помощью сдвигов влево,
вправо и суммирования результатов константа
N
, а также остальные константы записываются в 16-ричном коде.
Следует обратить внимание, что приступать к выполнению курсового проекта имеет смысл только после изучения тео-
ретических вопросов, посвящённых программному обеспечению (программированию на языке ассемблера и в машинных
кодах). При этом нужно ориентироваться на рекомендуемую учебную литературу.
Блок начальных директив не обязателен. Он обычно вводится для удобства программирования. Адреса портов – 01Н,
02Н, 04Н, 08H и т.д. Таким образом, для каждого порта выделяется отдельная линия.
Стек и очередь требуются в том случае, когда одна из переменных зависит от
t – N.
Если все переменные зависят от
t
,
стек и очередь не нужны.
При наличии переменной, зависящей от
t – N
,
сначала вводятся все значения этой переменной при
t…t – N
в виде оче-
реди. Затем данные из очереди пересылаются в стек. При этом последним элементом оказывается значение переменной при
t
– N
,
которое извлекается первым и используется в вычислениях.
Страницы
- « первая
- ‹ предыдущая
- …
- 6
- 7
- 8
- 9
- 10
- …
- следующая ›
- последняя »