Составление линейных и циклических программ

НА ЯЗЫКЕ АССЕМБЛЕР

Цель работы

1 Изучить приемы программирования последовательных и циклических вычислительных процессов в микропроцессорных системах (МПС), построенных на микропроцессоре (МП) К1821ВМ85А.

2 Приобрести практические навыки составления линейных и циклических программ на языке Ассемблер для МП К1821ВМ85А.

Подготовка к выполнению работы

1 Повторить по [4] систему команд микропроцессора К1821ВМ85А, форматы данных и команд, способы адресации.

2 Изучить по [4] примеры составления линейной программы инвертирования содержимого ячейки памяти и циклической программы суммирования однобайтных двоичных чисел на языке Ассемблер.

3 Подготовить ответы на вопросы для самоконтроля.

Вопросы для самоконтроля

1 Поясните, как формируется адрес следующей команды в линейных программах?

2 Поясните, как формируется адрес следующей команды в циклических программах при выполнении команд условных переходов на примере команды JC 0A10H, если условие перехода выполняется либо не выполняется?

3 Поясните, что понимают под способом адресации? Укажите, какие способы адресации используются в МП К1821ВМ85А и поясните их сущность?

4 Укажите выполняемую операцию, способы адресации, формат, число циклов и тактов, машинный код, а также действия МП в каждом машинном цикле для следующих команд:

а) MOV C,D; б) ANA M; в) SUB 10H;

г) MVI A, 10H; д) JNZ 0B50H; е) CALL 0950H;

е) CALL 0950H; ж) RET; з) CNC 0900H;

и) LXI B, 0920H.

Порядок выполнения работы

1 Проверка подготовки учащихся к занятию по вопросам для самоконтроля в виде фронтального или программированного опроса.

2 Выполнить индивидуальное задание № 1. Составить схему алгоритма и программу линейного вычислительного процесса на языке Ассемблер для МП К1821ВМ85А, которая реализует последовательности арифметических или логических операций согласно варианту, заданному в таблице 1 (номер варианта выбирается в зависимости от номера учащегося в списке учебного журнала группы).

Таблица 1 – Исходные данные к индивидуальному заданию № 1

№ варианта Последовательность операций Значения операндов (P = 16)
(A) (B) (C) (D) (E) (M1) (M2)
M2 = 2((C) + (D)) – (M1) 1A
M1 = ( составление линейных и циклических программ - student2.ru ) составление линейных и циклических программ - student2.ru (A) составление линейных и циклических программ - student2.ru (M2) F0
M2 = ((M1) – (A)) : 2 + 05H 15H 25H
M1 = (( составление линейных и циклических программ - student2.ru ) составление линейных и циклических программ - student2.ru (M2)) составление линейных и циклических программ - student2.ru (A) 2D E1
M2 = (D) – 2 (M1) + 10 H
M1 = ( составление линейных и циклических программ - student2.ru ) составление линейных и циклических программ - student2.ru (A) составление линейных и циклических программ - student2.ru ( составление линейных и циклических программ - student2.ru ) 1F
M2 = ((C) – (A)) : 4 – (M1) 2D
M1 = ( составление линейных и циклических программ - student2.ru ) составление линейных и циклических программ - student2.ru ((A) составление линейных и циклических программ - student2.ru (M2)) 1E A0
M2 = 4((D) – (M1)) + (A) 10H 0A
M1 = ((B) составление линейных и циклических программ - student2.ru ( составление линейных и циклических программ - student2.ru )) составление линейных и циклических программ - student2.ru ( составление линейных и циклических программ - student2.ru ) 2F
Примечания 1 M1 – ячейка памяти по адресу 09XXH, где XX – номер по списку в учебном журнале в шестнадцатеричной системе счисления. 2 M2 – ячейка памяти по адресу 0AXXH. 3 Начальный адрес программы 08XXH.


2.1 Составить алгоритм решения задачи с учетом программной загрузки исходных данных. При составлении алгоритма следует помнить, что в МП КР51821ВМ85А умножение и деление на 2 выполняется с помощью команд циклического сдвига влево RLC и вправо RRC соответственно.

2.2 Составить программу на языке Ассемблер в виде таблицы (таблица 2).

Таблица 2 – Линейная программа на языке Ассемблер

Адрес Метка Команда Операнд Машинный код Комментарий
           
           
           
           

2.3 Определить ожидаемый результат вычисления. Для этого при выполнении арифметических операций следует подставить в заданное уравнение значения переменных в десятичной системе счисления и выполнить указанные арифметические операции в десятичной системе счисления. Порядок расчета и ожидаемый результат записать в отчет в десятичной и шестнадцатеричной системах счисления.

Логические операции следует выполнять в двоичной системе счисления поразрядно, при этом следует помнить, что логические операции обладают приоритетом. Порядок расчета и ожидаемый результат записать в отчет в двоичной и шестнадцатеричной системах счисления.

3 Выполнить индивидуальное задание № 2. Составить программу циклического вычислительного процесса на языке Ассемблер для МП К1821ВМ85А, которая реализует умножение двух восьмиразрядных двоичных чисел без учета знака (кодовое умножение) согласно варианту, заданному в таблице 3.

Таблица 3 – Исходные данные к индивидуальному заданию № 2

Номер варианта Значения операндов (P = 16) Начальный адрес программы
(DE) (A)
00A3 B2
00B4 C3
00D5
00E6
00F1 DA
00D4
00B2
00C3 5B
00B3
00D2 A3 080A

Пусть множимое хранится в паре регистров DE, где оно занимает младший регистр E, старший регистр D пары регистров установлен в нуль. Множитель хранится в аккумуляторе A. 16-разрядное произведение будем формировать в паре регистров HL. Счетчик числа повторений цикла организуем на регистре B.

Процесс умножения организуем следующим образом. Будем анализировать разряды множителя, начиная с его старшего разряда. Поэтому частичные произведения будут формироваться, начиная со старшего частичного произведения. Накопление суммы частичных произведений будем производить в паре регистров HL, т.е. к содержимому предварительно сброшенной в нуль пары регистров HL вначале прибавим восьмое частичное произведение. Затем, сдвинув на один разряд влево содержимое пары регистров HL, прибавим седьмое частичное произведение и так далее, пока не будут просуммированы все частичные произведения.

Таким образом, процесс умножения носит циклический характер. Цикл, содержащий операции сдвига влево содержимого пары регистров HL, формирования и прибавления к содержимому пары регистров HL очередного частичного произведения, должен быть повторен восемь раз.

Алгоритм решения задачи представлен на рисунке 1.

Блок 1(рисунок 1) производит загрузку множимого в пару регистров DE и множителя в регистр A. Блок 2 производит загрузку нулевого значения в пару регистров HL. Блок 3 устанавливает в регистре B (счетчике циклов) начальное значение 8. Блок 4 производит сдвиг на один разряд влево содержимого пары регистров HL. Эта операция выполняется путем удвоения содержимого пары регистров: HL (HL) + (HL). Блок 5 предназначен для анализа очередного разряда множителя. Для этого содержимое аккумулятора сдвигается влево, в результате чего очередной разряд множителя пересылается в триггер TC регистра признаков. Блок 6 производит разветвление (условный переход) по содержимому триггера TC. При (TC) = 1 в блоке 7 выполняется операция суммирования множимого к сумме предыдущих частичных произведений в паре регистров HL. При (TC) = 0 операция суммирования не выполняется, по команде условного перехода JNC M1 осуществляется переход к команде блока 8. Блок 8 производит вычитание единицы из содержимого регистра B, после чего блок 9 выполняет условный переход по содержимому триггера TZ регистра признаков. Если (TZ) = 0 (содержимое регистра B не равно нулю), то команда условного перехода JNZ M2 производит переход к команде блока 4, вызывая очередное повторение выполнения тела цикла. Если (TZ) = 1 (содержимое регистра B равно нулю), то происходит выход из цикла и переход к очередной команде.

составление линейных и циклических программ - student2.ru составление линейных и циклических программ - student2.ru составление линейных и циклических программ - student2.ru составление линейных и циклических программ - student2.ru

Рисунок 1 – Схема алгоритма кодового умножения восьмиразрядных двоичных чисел

3.1 Составить циклическую программу умножения восьмиразрядных двоичных чисел на языке Ассемблер в форме таблицы 2.

3.2 Определить время выполнения операции умножения для тактовой частоты равной 2 МГц. Для этого определить количество тактов, требуемое для однократного прохождения цикла алгоритма и полученный результат умножить на восемь. Суммарное число тактов умножить на длительность тактового периода (0,5 мкс).

4 Ответить на контрольные вопросы.

5 Оформить отчет и сдать зачет.

Содержание отчета

Отчет должен содержать:

1 Наименование и цель лабораторной работы.

2 Выполненные индивидуальные задания № 1, 2 (условия, алгоритмы и программы).

3 Расчет ожидаемого результата выполнения линейной программы.

4 Расчет времени выполнения операции умножения двух восьмиразрядных двоичных чисел.

5 Ответы на контрольные вопросы.

Контрольные вопросы

1 Поясните, как проверить переполнение разрядной сетки при выполнении операции суммирования в МП К1821ВМ85А?

2 Поясните, как умножить на два в К1821ВМ85А?

3 Поясните, как выполнить суммирование двух 16-разрядных двоичных чисел в МП К1821ВМ85А? Укажите необходимую команду и ее особенности.

Требования к знаниям и умениям учащихся

В результате выполнения лабораторной работы учащийся должен знать:

– систему команд МП К1821ВМ85А;

– приемы составления линейных и циклических программ.

Должен уметь:

– составлять линейные и циклические программы на языке Ассемблер;

– расшифровывать команды МП К1821ВМ85А;

– определять время выполнения программы.

ЛАБОРОТОРНАЯ РАБОТА № 13

Наши рекомендации