Команды вызова подпрограммы и возврата
CALL <B3><B2> – вызов подпрограммы по адресу <B3><B2>, указанному во втором и третьем байтах команды;
RET – возврат из подпрограммы.
3.1 Записать в память программу подсчета контрольной суммы массива (таблица 80), использующую команду вызова подпрограммы сравнения содержимого пар рег. HL и DE (таблица 81).
Таблица 80 – Контрольная программа подсчета контрольной суммы массива,
использующая подпрограмму сравнения содержимого пар регистров
Адрес | Метка | Команда | Операнд | Машинный код | Комментарий |
LXI | H, 0100H | 21 00 01 | ; Загр HL – нач. адрес ; массива | ||
LXI | D, 017FH | 11 7F 01 | ; Загр. DE – конеч. адрес ; массива. | ||
LXI | SP, 0B00H | 31 00 0B | ; Загр SP=0В00H, нижняя ; граница стека | ||
MVI | B, 00H | 06 00 | ; Загр. В=00Н – исх. знач. ; КС | ||
084B | М1 | MOV | A, B | ; Подсчет КС массива ; памяти | |
084C | ADD | M | ; Подсчет КС массива ; памяти. | ||
084E | INX | H | ; HL=(HL)+1, адр. след. ; ячейки | ||
084F | CALL | М2 | CD 56 08 | ; Вызов подпрограммы ; сравнения | |
JNC | М1 | D2 4B 08 | ;Переход на адрес ;080ВН, если (ТС)=0 | ||
HLT | ; Останов |
Таблица 81 – Подпрограмма сравнения содержимого пар регистров HL и DE
Адрес | Метка | Команда | Операнд | Машинный код | Комментарий |
М2 | MOV | A, E | 7B | ; Подпрограмма сравнения | |
SUB | L | ; Если (HL)>(DE), то (ТС)=1 | |||
MOV | A, D | 7A | ; Иначе (ТС)=0 | ||
SBB | H | 9C | ; | ||
085A | RET | C9 | ; |
3.2 Выполнить программу:
СТ0840 0855ВП.
Определить значение контрольной суммы заданного массива (содержимое регистра В). Сравнить полученное значение с результатом подсчета контрольной суммы с помощью команды ПОДСЧЕТ КОНТРОЛЬНОЙ СУММЫ системной программы МОНИТОР, они должны совпадать. Записать в отчет полученное значение контрольной суммы.
3.3 Выполнить программу поэтапно, устанавливая точки останова (ТО) в соответствии с таблицей 82:
СТ0840Н ТОВП.
Записать в таблицу 82 содержимое указателя стека SP в точках останова.
Таблица 82 – Результаты выполнения контрольной программы подсчета контрольной суммы массива
Точка останова | ТО1=084FH | ТО2=0856H | ТО3=085АH | ТО4=0852H | ТО5=0855H |
(SP) |
В точке останова ТО3 посмотреть содержимое ячеек памяти с адресами SP, SP+1. В них должны находиться мл. и ст. байты адреса возврата (таблица 83).
Таблица 83 – Содержимое стека в точке останова ТО3
(М) по адр. (SP) | 52Н |
(М) по адр. (SP+1) | 08Н |
Задание 2:
Написать с адреса 0А20Н проверочную программу подсчета контрольной суммы массива.
1 Заполнить массив (0А50Н…0А6FН) константой ЕЕН:
– начальный адрес массива загрузить в пару регистров HL;
– константу ЕЕН загрузить в регистр D;
– заполнение массива константой оформить в виде цикла;
– счетчик циклов организовать на регистре Е.
2 Подсчитать контрольную сумму этого массива (без учета переноса):
– подсчет контрольной суммы оформить как подпрограмму;
– значение контрольной суммы записать в регистр С;
– начальный адрес подпрограммы 0950Н;
– нижняя граница стека 0В50Н.
3 Алгоритм решения задачи и алгоритм подпрограммы представлены на рисунках 5 и 4 соответственно.
4 Программу и подпрограмму записать в таблицы, аналогичные по форме таблицам 80 и 81 соответственно.
5 Записать в память УМК и выполнить проверочную программу подсчета контрольной суммы. Указать в отчете значение контрольной суммы. Полученное значение контрольной суммы сравнить с результатом, полученным при использовании команды ПОДСЧЕТ КОНТРОЛЬНОЙ СУММЫ системной программы МОНИТОР, они должны совпадать.
6
![]() |
Выполнить программу поэтапно, устанавливая точки останова аналогично контрольной программе (таблицы 80 и 81). Результаты записать в таблицы, аналогичные по форме таблицам 82 и 83. Сделать выводы о содержимом указателя стека в каждой точке останова и содержимом стека в ТО3.
Рисунок 4 – Алгоритм подпрограммы подсчета контрольной суммы
Рисунок 5 – Алгоритм решения задачи
ЛАБОРАТОРНАЯ РАБОТА № 20