Команды вызова подпрограммы и возврата

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

 
  команды вызова подпрограммы и возврата - student2.ru

Выполнить программу поэтапно, устанавливая точки останова аналогично контрольной программе (таблицы 80 и 81). Результаты записать в таблицы, аналогичные по форме таблицам 82 и 83. Сделать выводы о содержимом указателя стека в каждой точке останова и содержимом стека в ТО3.

Рисунок 4 – Алгоритм подпрограммы подсчета контрольной суммы

команды вызова подпрограммы и возврата - student2.ru команды вызова подпрограммы и возврата - student2.ru команды вызова подпрограммы и возврата - student2.ru Рисунок 5 – Алгоритм решения задачи

ЛАБОРАТОРНАЯ РАБОТА № 20

Наши рекомендации