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

Число 7f16 из регистра в переписать в ячейку памяти 0800

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

Адрес

Машинный

код

Мнемоника

команды

Операнд

Комментарий

0800

3E 7F

MVI A

7F

(A) ←7F

0802

47

MOV B, A

(B) ←(A)

0803

21 00 08

LXI H

0800

(HL) ←0800

0806

70

MOV M, B

M(0800) ←(B)

0807

4F

MOV C, A

(C) ←(A)

0808

23

INX H

HL+1

0809

71

MOV M, C

M(0801) ←(C)

080A

3A 00 08

LDA

0800

(A) ←M(0800)

080B

67

MOV H, A

(H) ←(A)

080E

3A 01 08

LDA

0801

(A) ←M(0801)

0811

6F

MOV L, A

(L) ←(A)

0812

F9

SPHL

(SP) ← (HL)

0813

FF

RST

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

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

    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

(𝑨) ← (𝑨) 𝖠 (𝑨)

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

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

    1. Исследовать команды управления 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

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

    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

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

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

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

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

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

МОV A,B СMА MOV В,А MOV А,С СМА MOV C,A INX В.