Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ассемблер.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
725 Кб
Скачать
☆

2. Программирование последовательных

УЧАСТКОВ АЛГОРИТМА

2.1. Программирование участков алгоритма, не содержащих

разветвлений

Пример 2.1. Требуется принять из ОЗУ два числа, хранящихся в соседних ячейках, и, вычислив разность чисел, поместить ее в ОЗУ в третью ячейку. Адрес первого числа хранить в паре регистров НL, адрес второго числа на единицу больше содержимого этих регистров.

Для решения данной задачи примем, что адрес первого числа 0900Н, тогда второе число будет храниться по адресу 0901Н, а результат необходимо будет поместить по адресу 0902H (для решения данной задачи на УМК-80 можно задаться любыми адресами ОЗУ в диапазоне 0800 0ВFF).

На рис. 2.1 приведена блок-схема алгоритма решения данной задачи, построенная из операций, выполняемых МП серии КР580. Рассмотрим операции, выполняемые в каждом из блоков схемы-алгоритма.

Блок 1 производит запись в регистровую пару НL адреса первого числа 0900Н (мнемоническое обозначение команды LXI H, 0900Н).

Блок 2 производит прием в аккумулятор содержимого ячейки, ОЗУ (М), адресом которой служит содержимое пары регистров HL. Таким образом, в регистр А принимается первое из чисел; эта операция может быть выполнена командой пересылки регистр-регистр (мнемоническое обозначение команды МОV А, М).

Блок 3 формирует в паре регистров НL адрес второго числа (0901H); эта операция выполняется командой приращения пары регистров (мнемоника команды INX H).

0900H  HL

(M)  A

(HL) + 1  HL

(A) – (M)  A

(HL) + 1  HL

(A)  M

Рис.2.1. Блок-схема алгоритма вычитания чисел, хранящихся в памяти

Блок 4 производит вычисление разности содержимого аккумулятора (А) и содержимого ячейки ОЗУ (М), адресом которой служит содержимое пары регистров HL; операция выполняется командой вычитания SUB M.

Блок 5 формирует в паре регистров адрес ОЗУ (0902Н), куда необходимо поместить результат; эта операция выполняется командой приращения пары регистров INX H.

Блок 6 пересылает в память (по адресу 0902Н) полученную в аккумуляторе разность; выполняющая эту операцию команда имеет мнемонику МОV M, А.

В табл. 2.1 приведена программа рассматриваемой задачи на языке Ассемблер и в машинных кодах.

Команды программы при отсутствии условных и безусловных переходов размещаются в ячейках памяти с последовательно нарастающими адресами. При написании данной программы размещение команд произведено, начиная с ячейки, имеющей адрес 0800Н. Для того чтобы после выполнения данной программы на УМК-80 управление было передано системной программе Монитор, в конце программы добавлена команда RST 7.

Таблица 2.1

Программа вычитания чисел

Адрес Н-код

Метка

Мнемоника

Операнд

Машинный код

Комментарий

0800

LXI

H, 0900Н

21 00 09

Блок 1

0803

MOV

А, М

7Е

Блок 2

0804

INX

H

23

Блок 3

0805

SUB

М

96

Блок 4

0806

INX

H

23

Блок 5

0807

MOV

М, А

77

Блок 6

0808

RST

7

FF

Переход к программе Монитор

Пример 2.2. Требуется сложить два числа 6 и 10 и их сумму поместить в регистр D. Перед сложением числа должны храниться соответственно в регистрах В и С.

Для решения данной задачи память необходима только для размещения кодов команд, данные и результаты счета будут храниться в регистрах МП.

На рис.2.2 приведена блок-схема алгоритма решения данной задачи. Рассмотрим операции, выполненные в каждом из блоков.

Блок 1 загружает непосредственно в регистр В число 6; эта операция выполняется командой пересылки МVI B, 06Н.

Блок 2 загружает непосредственно в регистр С число 10; эта операция выполняется командой пересылки МVI C, 0АН (0А – Н-код числа 10).

Блок 3 производит пересылку первого числа из регистра В в аккумулятор (А), т.к. при выполнении арифметических и логических операций один из операндов обязательно должен находиться в аккумуляторе (исключение – команда DAD); эта операция выполняется командой пересылки МОV А, В.

6  B

10  C

(B)  A

(A) + (C)  A

(A)  D

Рис. 2.2 Блок-схема алгоритма сложения двух чисел 6 и 10

Блок 4 производит вычисление суммы содержимого аккумулятора (А) регистра С, т.е. первого и второго чисел; мнемоника команды ADD C.

Блок 5 производит пересылку суммы двух чисел из аккумулятора (А) в регистр D; мнемоника команды MOV D, А.

В табл. 2.2 приведена программа рассматриваемой задачи на языке Ассемблер и в машинных кодах. Размещение команд произведено с ячейки ОЗУ, имеющей адрес 0800Н.

Таблица 2.2

Программа сложения двух чисел 6 и 10

Адрес Н-код

Метка

Мнемоника

Операнд

Машинный код

Комментарий

0800

MVI

В, 06Н

06 06

Блок 1

0802

MVI

C, 0АН

0Е 0А

Блок 2

0804

MOV

А, В

78

Блок 3

0805

ADD

С

81

Блок 4

0806

MOV

D, А

57

Блок 5

0807

RST

7

FF

Переход к программе Монитор