Исследование однокристального микропроцессора с фиксированным списком команд, страница 13

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

Вызов подпрограммы 1 вызов подпрограммы 2 вызов подпрограммы 3 вызов подпрограммы 4 вызов подпрограммы 5возврат из подпрограммы 5 возврат из подпрограммы 4 возврат из подпрограммы 3 возврат из подпрограммы 2 возврат из подпрограммы 1останов.

4. Индивидуальное задание №1: сортировать массив методом «пузырька»

Сначала в ячейки памяти с адресами L = 100, 101 … 114 (Н = 000) записываем вразнобой 13 чисел. После упорядочения массива (используется «пузырьковый» метод) по возрастанию пятый по величине элемент будет находиться по адресу

L = 108. Когда получим его, переместим это значение в ячейку памяти по адресу L = 200.

Адрес

Код команды

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

Комментарии

L = 000

001

016

014

MVI C

B2

число прохождений внешнего цикла (13 – 1 = 12 = 148)

002

003

004

041

100

000

LXI H

B2

B3

загрузка адреса первого элемента массива

005

006

026

014

MVI D

B2

число сравнений внутри главного цикла

007

106

MOV B, M

сохраняем первый из сравниваемых элементов в В

010

043

INX H

формирование адреса второго сравниваемого элемента

011

176

MOV A, M

сохранение второго элемента в аккумуляторе

012

270

CMP B

сравнение аккумулятора с регистром В;

если A>B, то флаг С = 0

013

014

015

322

022

000

JNC

B2

B3

если С = 0 (не было заема), то элементы расположены по возрастанию и выполнять перемену их местами не нужно, переходим к адресу 022, в противном случае – к следующей команде

016

160

MOV M, B

меняем элементы местами (перезапись первого по адресу второго)

017

053

DCX H

формирование адреса первого элемента

020

167

MOV M, A

сохранение по адресу первого элемента второго

021

043

INX H

получение адреса первого из сравниваемых в следующем цикле

022

025

DCR D

уменьшение переменной внутреннего цикла

023

024

025

302

007

000

JNZ

B2

B3

если переменная не равно нулю – переход к следующей итерации

026

015

DCR C

уменьшение переменной внешнего цикла

027

030

031

302

002

000

JNZ

B2

B3

если переменная внешнего цикла не равно нулю – переход к следующей итерации

032

033

034

041

110

000

LXI H

B2

B3

непосредственная загрузка пары регистров (косвенно адресуют М)

035

176

MOV A, M

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

036

037

040

062

200

000

STA

B2

B3

прямое запоминание содержимого аккумулятора по адресу

041

166

HLT

останов