Исследование однокристального микропроцессора с фиксированным списком команд. Практическое ознакомление с организацией микропроцессорных систем на основе однокристальных микропроцессоров и приобретение навыков программирования микропроцессоров указанного типа, страница 8

Команда RST N является командой CALL addr специализированной на работе с прерываниями. Подпрограммы обработки прерываний обычно располагаются по фиксированным адресам, что позволяет сократить размер команды обращения к ним до одного байта.

Программа 10

Программа демонстрирует работу нескольких прерывающих друг друга вложенных программ.

Адрес

Команда

Мнемоника

Комментарии

000

061

LXI SP

Инициализация указателя стека

001

067

В2

002

000

В3

003

317

RST 1

Вызов подпрограммы 1

004

166

HLT

Останов

010

327

RST 2

Вызов подпрограммы 2

011

311

RET

Возврат из подпрограммы 1

020

337

RST 3

Вызов подпрограммы 3

021

311

RET

Возврат из подпрограммы 2

030

347

RST 4

Вызов подпрограммы 4

031

311

RET

Возврат из подпрограммы 3

040

357

RST 5

Вызов подпрограммы 5

041

311

RET

Возврат из подпрограммы 4

050

311

RET

Возврат из подпрограммы 5

Индивидуальное задание 1

Реализовать подсчёт количества отрицательных чётных чисел в массиве из 16-ти.

Алгоритм программы:

Создаём массив из 16-ти знаковых чисел(начиная с 200-го адреса, если в старшем бите 1-ца, число отрицательное). Непосредственно загружаем в В-пару регистров число 16 – количество чисел в массиве(C => 020, т.к. система 8-я, B => 000). Загружаем в D-пару адрес массива(сначала адрес первого числа, Е => 200, D => 000). Косвенно загружаем аккумулятор D-парой. Складываем аккумулятор с 0(A + B) для получения флагов, после чего идёт проверка флага S(знак числа, смотрит на старший бит байта). Число положительное – идёт переход через несколько адресов вперёд, отрицательное – оно сдвигается вправо и анализируется выдвигаемый бит. Если число нечётное(выдвинутый бит 1) – переход через несколько адресов вперёд, чётное – идёт на следующую команду инкрементирования счётчика(В). Дальше идёт инкремент адресного регистра Е для перехода на следующее число в массиве и его анализа. Декрементируем регистр количества чисел массива С(на эту операцию идёт переход, если число положительное или нечётное) и осуществляем переход по флагу Z(если Z=0, т.е. в регистре С не 0, тогда идёт переход к косвенной загрузке в D-пару аккумулятора). Если регистр С обнулился и цикл закончен, тогда загружаем в H-пару адрес, где будет хранится результат(т.к. регистры мы читать не можем) и переписываем в память по этому адресу регистр В, после чего идёт зацикливание.

Адрес

Команда

Мнемоника

Адрес

Команда

Мнемоника

000

001

LXI B

016

021

B2

001

020

B2

017

000

B3

002

000

B3

020

004

INR B

003

021

LXI D

021

034

INR E

004

200

B2

022

015

DCR C

005

000

B3

023

302

JNZ

006

032

LDAX D

024

006

B2

007

306

ADI

025

000

B3

010

000

B2

026

041

LXI H

011

362

JP

027

300

B2

012

021

B2

030

000

B3

013

000

B3

031

160

MOV M, B

014

017

RRC

032

166

HLT

015

332

JC