Алгоритм работы программы:
Вызов подпрограммы 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 |
останов |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.