Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторный практикум.docx
Скачиваний:
0
Добавлен:
26.06.2025
Размер:
2.36 Mб
Скачать

Задание для выполнения лабораторной работы

1. Исследование команд обмена данными регистров и ячеек памяти

1.1. Составить программу последовательной записи числа 1F16 в регистры A, B, C, D, E, H, L, пользуясь командами MOV RD, RS и MVI RD, data8. Зафиксировать в отчете содержимое регистров до и после выполнения каждой команды.

Таблица 42

Программа пересылки константы между регистрами блока РОН

Адрес

Машинный код

Мнемоника команды

Операнд

Комментарий

0800

3E 1F

MVI A,

1F

(A) ← 1F

0802

47

MOV B,A

(B) ← (A)

0803

48

MOV C,B

(C) ← (B)

0804

51

MOV D,C

(D) ← (C)

0805

5A

MOV E,D

(E) ← (D)

0806

63

MOV H,E

(H) ← (E)

0807

6C

MOV L,H

(L) ← (H)

0808

FF

RST 7

Прервать выполнение

Программы

1.2. Составить программу обмена данными между регистрами А и С с применением регистра М. Зафиксировать в отчете содержимое регистров и ячейки памяти до и после выполнения каждой команды.

Таблица 43

Программа обмена данными между регистрами блока РОН и ячейкой памяти

Адрес

Машинный код

Мнемоника команды

Операнд

Комментарий

0800

21 20 08

LXI H,

0820

(HL) ← 0820

0803

3E 05

MVI A,

05

(A) ← 05

0805

0E 21

MVI C,

21

(C) ← 21

0807

77

MOV M,A

M(HL) ← (A)

0808

79

MOV A,C

(A) ← (C)

0809

4E

MOV C,M

(C) ← M(HL)

080A

FF

RST 7

Прервать выполнение

Программы

1.3. Записать последовательно элементы массива в регистры E, D, L, H. Исходный массив: 0А00 (0516); 0А01 (0216); 0А02 (0716); 0А03 (0116). Предварительно записать исходный массив в память.

Таблица 44

Программа перемещения массива данных из памяти в регистры блока РОН

Адрес

Машинный код

Мнемоника команды

Операнд

Комментарий

0800

2A 00 0A

LHLD

0A00

(L) ← M(0A00)

(H) ← M(0A01)

0803

EB

XCHG

(HL) ↔ (DE)

0805

2A 02 0A

LHLD

0A02

(L) ← 0A02

(H) ← 0A03

080A

FF

RST 7

Прервать выполнение

Программы

1.4. В регистрах записаны числа: D – 0116, E – 0716, H – 0216, L – 0516. Образовать массив {07, 01, 05, 02} в памяти, начиная с ячейки 0835. Предварительно записать числа в регистры.

Таблица 45

Программа создания массива данных из содержимого регистров блока РОН в памяти

Адрес

Машинный код

Мнемоника команды

Операнд

Комментарий

0800

22 37 08

SHLD

0837

M(0837) ← (L)

M(0838) ← (H)

0803

EB

XCHG

(HL) ↔ (DE)

0804

22 35 08

SHLD

0835

M(0835) ← (L)

M(0836) ← (H)

0807

FF

RST 7

Прервать выполнение

Программы

1.5. Составить программу обмена данными между двумя ячейками памяти 0830 (7816) и 0831 (Е316). Предварительно записать числа в память.

Таблица 46

Программа обмена данными между двумя ячейками памяти

Адрес

Машинный код

Мнемоника команды

Операнд

Комментарий

0800

3A 30 08

LDA

0830

(A) ← M(0830)

0803

47

MOV B,A

(B) ← (A)

0804

3A 31 08

LDA

0831

(A) ← M(0831)

0807

32 30 08

STA

0830

M(0830) ← (A)

080A

78

MOV A,B

(A) ← (B)

080B

32 31 08

STA

0831

M(0831) ← (A)

Продолжение таблицы 46

Адрес

Машинный код

Мнемоника команды

Операнд

Комментарий

080E

FF

RST 7

Прервать выполнение

Программы

1.6. Составить программу обмена данными между ячейкой памяти 0820 (7816) и регистром D (0А16). Предварительно записать данные в ячейку памяти и регистр. Для промежуточного хранения данных использовать регистр М.

Таблица 47

Программа обмена данными между ячейкой памяти и регистром

Адрес

Машинный код

Мнемоника команды

Операнд

Комментарий

0800

21 40 08

LXI H,

0840

(HL) ← 0840

0803

01 20 08

LXI B,

0820

(BC) ← 0820

0806

0A

LDAX B

(A) ← M(BC)

0807

77

MOV M,A

0830

(M) ← (A)

0808

7A

MOV A,D

(A) ← (D)

0809

02

STAX B

0831

M(BC) ← (A)

080A

56

MOV D,M

(D) ← (M)

080B

FF

RST 7

Прервать выполнение

Программы

2. Исследование команд обмена данными со стеком

2.1. Организовать стековую область памяти, начиная с ячейки 0820. Поменять местами содержимое регистровых пар ВС и DE, используя команды обмена данными со стеком. Предварительно заполнить регистры данными: B – 1216, C – 3416, D – AB16, E – CD16.

Таблица 48

Программа организации стековой памяти

Адрес

Машинный код

Мнемоника команды

Операнд

Комментарий

0800

21 20 08

LXI H,

0820

(HL) ← 0820

0803

F9

SPHL

(SP) ← (HL)

0804

C5

PUSH B

M(SP – 1) ← (B)

M(SP – 2) ← (C)

(SP) ← (SP) – 2

0805

D5

PUSH D

M(SP – 1) ← (D)

M(SP – 2) ← (E)

(SP) ← (SP) – 2

Продолжение таблицы 48

Адрес

Машинный код

Мнемоника команды

Операнд

Комментарий

0806

C1

POP B

(C) ← M(SP)

(B) ← M(SP + 1)

(SP) ← (SP) + 2

0807

D1

POP D

(E) ← M(SP)

(D) ← M(SP + 1)

(SP) ← (SP) + 2

0808

FF

RST 7

Прервать выполнение

Программы

3. Составление программ управления

3.1. Составить программу в соответствии с предложенной блок-схемой (рис. 41), проверить корректность ее работы.

4. Исследование команд управления

4.1. Для исследования команд JMP ADDR, CALL ADDR, RZ ADDR, NOP и HLT записать и пошагово выполнить подпрограмму, которая представляет собой подпрограмму умножения двух 8-разрядных двоичных чисел без знака.

Таблица 49

Программа умножения двух однобайтных чисел без знака

Адрес

Машинный код

Метка

Мнемоника команды

Операнд

Комментарий

0850

31 C0 0B

START

LXI SP,

0BC0

(SP) ← 0BC0

0853

00

NOP

0854

CD 60 08

CALL

0860

M(SP – 1) ← (PC)

M(SP – 2) ← (PC)

(SP) ← (SP) – 2

(PC) ← 0860

0857

00

NOP

0858

76

HLT

Останов

0860

21 00 00

MULT

LXI H,

0000

(HL) ← 0000

0863

4A

MOV C,D

(C) ← (D)

0864

06 00

MVI B,

00

(B) ← 00

0866

7B

CYCLE

MOV A,E

(A) ← (E)

0867

A7

ANA A

Продолжение таблицы 49

Адрес

Машинный код

Метка

Мнемоника команды

Операнд

Комментарий

0868

C8

RZ

если Z = 1

(PC) ← M(SP)

(PC) ← M(SP + 1)

(SP) ← (SP) + 2

0869

09

DAD B

(HL) ← (HL) + (BC)

086A

1D

DCR E

(E) ← (E) – 1

086B

C3 66 08

JMP

0866

(PC) ← 0866

Рисунок 41 – Блок-схема алгоритма программы для задания 3.1

В данной программе подпрограмма умножения MULT представляется в виде подпрограммы, вызываемой командой CALL ADDR, при обращении к которой множимое должно находиться в регистре D, а множитель – в регистре Е микропроцессора КР580ВМ80А. Результат умножения, который может быть уже 16-разрядным числом, получается в регистровой паре HL. Поэтому для выполнения данной программы предварительно в регистры D и Е нужно занести множимое и множитель в виде двоичных (шестнадцатеричных) чисел.

4.2. Исследовать команды управления PCHL и JZ ADDR. Для этого предыдущую программу умножения изменить с использованием данных команд, выполнить ее и проверить корректность полученных результатов.

Таблица 50

Программа умножения двух однобайтных чисел без знака

Адрес

Машинный код

Метка

Мнемоника команды

Операнд

Комментарий

0850

21 5A 08

START

LXI H,

085A

(HL) ← 085A

0853

00

NOP

0854

00

NOP

0855

E9

PCHL

(PC) ← (HL)

0856

00

NOP

0857

00

NOP

0858

00

NOP

0859

76

HLT

Останов

085A

21 00 00

MULT

LXI H,

0000

(HL) ← 0000

085D

4A

MOV C,D

(C) ← (D)

085E

06 00

MVI B,

00

(B) ← 00

0860

7B

CYCLE

MOV A,E

(A) ← (E)

0861

A7

ANA A

0862

CA 56 08

JZ

0856

если Z = 1

(PC) ← 0856

0865

09

DAD B

(HL) ← (HL) + (BC)

0866

1D

DCR E

(E) ← (E) – 1

0867

C3 60 08

JMP

0860

(PC) ← 0860

5. Исследование команд работы со стеком

5.1. Исследовать команды работы со стеком PUSH H, POP H, XTHL, SPHL. Для этого предыдущую программу умножения изменить с использованием данных команд, выполнить ее и проверить корректность полученных результатов.

Таблица 51

Программа умножения двух однобайтных чисел без знака

Адрес

Машинный код

Метка

Мнемоника команды

Операнд

Комментарий

0850

21 57 08

START

LXI H,

0857

(HL) ← 0857

0853

E9

PCHL

(PC) ← (HL)

0854

00

NOP

0855

00

NOP

0856

76

HLT

Останов

0857

21 90 08

MULT

LXI H,

0890

(HL) ← 0890

085A

F9

SPHL

(SP) ← (HL)

085B

00

NOP

085C

4A

MOV C,D

(C) ← (D)

085D

06 00

MVI B,

00

(B) ← 00

085F

21 00 00

LXI H,

0000

(HL) ← 0000

0862

E3

XTHL

(L) ↔ M(SP)

(H) ↔ M(SP + 1)

0863

21 00 00

LXI H,

0000

(HL) ← 0000

0866

E1

CYCLE

POP H

(L) ← M(SP)

(H) ← M(SP + 1)

(SP) ← (SP) + 2

0867

7B

MOV A,E

(A) ← (E)

0868

A7

ANA A

0869

CA 54 08

JZ

0854

если Z = 1

(PC) ← 0854

086C

09

DAD B

(HL) ← (HL) + (BC)

086D

1D

DCR E

(E) ← (E) – 1

086E

E5

PUSH H

M(SP – 1) ← (H)

M(SP – 2) ← (L)

(SP) ← (SP) – 2

086F

C3 60 08

JMP

0860

(PC) ← 0860

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

7. Разработать программу, включающую в себя три отдельные подпрограммы – изменение знака числа, определение модуля числа, поиск максимального числа в массиве. В основной программе предусмотреть загрузку всех регистров блока РОН, A и регистра флагов F данными, их сохранение в стеке и последующее извлечение данных из стека в соответствующие регистры после выполнения указанных подпрограмм. После выполнения разработанной программы проверить корректность полученных результатов, а также сравнить содержимое всех регистров блока РОН, A и регистра флагов F до и после выполнения программы.

7.1. Изменение знака числа

Программная реализация этой операции следует из представления чисел для МП КР580ВМ80А в дополнительном коде и осуществляется при помощи двух команд: СМА – инверсия содержимого аккумулятора и INR A – инкремент содержимого аккумулятора. Она может быть использована при замене операции вычитания операцией сложения в дополнительном коде.

Для изменения знака двухбайтового числа приходится выполнять инверсию каждого байта, последовательно пересылая его в аккумулятор и используя затем команду INX. Например, для изменения знака числа, находящегося в регистровой паре ВС, необходима следующая последовательность команд:

МОV A,B

СMА

MOV В,А

MOV А,С

СМА

MOV C,A

INX В.

7.2. Определение модуля числа

В микроЭВМ числа представляются в дополнительном коде, поэтому при определении модуля нельзя ограничиться только определением знака числа, информация о котором содержится в старшем бите. Если число положительное, то его следует оставить в том же виде. Если же число отрицательное, то его необходимо побитно инвертировать и добавить 1 к младшему значащему разряду полученного числа.

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

На рис. 42 приведена структурная схема программы определения модуля числа, находящегося в регистре Е.

Рисунок 42 – Блок-схема программы определения модуля 8-разрядного числа (7 бит – знаковый)

7.3. Поиск максимального числа в массиве чисел.

В прикладных программах встречается задача определения максимального из нескольких чисел. Для выполнения этой операции используется команда сравнения СМР, не изменяющая содержимого аккумулятора.

Допустим, числа занимают область ОЗУ, с адреса 1 по адрес 2. Требуется поместить максимальное число в регистр В. Адреса ячеек памяти, где хранятся числа, будем указывать в регистровой паре НL. На рис. 43 приведена структурная схема для определения максимального из массива чисел.

Отметим некоторые особенности подпрограммы. Анализ массива начинается с конечного адреса (адрес 2). Окончание массива характеризуется нулевым значением числа в регистре-счетчике С.

В ряде случаев нет необходимости в хранении всего массива чисел, а достаточно определить максимальное число по мере поступления каждого нового значения. На рис. 44 приведена структурная схема такого «копирного» сравнения чисел. Поступающее новое число находится в аккумуляторе, а максимальное число помещается в регистр В.