- •Команды манипуляции стеком. Вызов подпрограммы и возврат
- •"Цифровые и микропроцессорные устройства"
- •Команды манипуляции стеком. Вызов подпрограммы и возврат
- •5 Приборы, оборудование и документация
- •6 Порядок выполнения работы
- •7 Содержание отчёта
- •8 Контрольные вопросы
- •9 Требования к знаниям и умениям студентов
- •10 Методические указания
- •Теоретическое обоснование
- •Команды записи в стек, восстановления и обмена стеком
- •10.3 Команды вызова подпрограммы и возврата
- •Команды манипуляции стеком. Вызов подпрограммы и возврат
10.3 Команды вызова подпрограммы и возврата
CALL <B3><B2> – вызов подпрограммы по адресу <B3><B2>, указанному во втором и третьем байтах команды;
RET – возврат из подпрограммы.
10.3.1 Записать в память программу подсчёта контрольной суммы массива, использующую команду вызова подпрограммы сравнения содержимого пар рег. HL и DE.
Таблица 8 – Контрольная программа подсчёта контрольной суммы массива, использующая подпрограмму сравнения содержимого пар регистров
Адрес |
Команда |
Операнд |
Машинный код |
Комментарий |
0840 |
LXI |
H, 0100H |
21 00 01 |
; Загр HL – нач. адрес ; массива |
0843 |
LXI |
D, 017FH |
11 7F 01 |
; Загр. DE – конеч. адрес ; массива. |
0846 |
LXI |
SP, 0B00H |
31 00 0B |
; Загр SP=0В00H, нижняя ; граница стека |
0849 |
MVI |
B, 00H |
06 00 |
; Загр. В=00Н – исх. знач. ; КС |
084B |
MOV |
A, B |
78 |
; Подсчёт КС массива ; памяти |
Продолжение таблицы 8 – Контрольная программа подсчёта контрольной суммы массива, использующая подпрограмму сравнения содержимого пар регистров
Адрес |
Команда |
Операнд |
Машинный код |
Комментарий |
084C |
ADD |
M |
86 |
; Подсчёт КС массива ; памяти. |
084D |
MOV |
B, A |
47 |
; Подсчёт КС массива ; памяти. |
084E |
INX |
H |
23 |
; HL=(HL)+1, адр. след. ; ячейки |
084F |
CALL |
0856H |
CD 56 08 |
; Вызов подпрограммы ; сравнения |
0852 |
JNC |
084BH |
D2 4B 08 |
Переход на адрес 080ВН, если (ТС)=0 |
0855 |
HLT |
|
76 |
; Останов |
Таблица 9 – Подпрограмма сравнения содержимого пар регистров HL и DE
Адрес |
Команда |
Операнд |
Машинный код |
Комментарий |
0856 |
MOV |
A, E |
7B |
; Подпрограмма сравнения |
0857 |
SUB |
L |
95 |
; Если (HL)>(DE), то (ТС)=1 |
0858 |
MOV |
A, D |
7A |
; Иначе (ТС)=0 |
0859 |
SBB |
H |
9C |
; |
085A |
RET |
|
C9 |
; |
10.3.2 Выполнить программу:
СТ0840 0855ВП.
Определить значение контрольной суммы заданного массива (содержимое регистра В). Сравнить полученное значение с результатом подсчёта контрольной суммы с помощью команды ПОДСЧЁТ КОНТРОЛЬНОЙ СУММЫ системной программы МОНИТОР, они должны совпадать. Записать в отчёт полученное значение контрольной суммы.
10.3.3 Выполнить программу поэтапно, устанавливая точки останова (ТО) в соответствии с таблицей 10:
СТ0840Н ТОВП.
Записать в таблицу 10 содержимое указателя стека SP в точках останова.
Таблица 10 – Результаты выполнения контрольной программы подсчёта контрольной суммы массива
Точка останова |
ТО1=084FH |
ТО2=0856H |
ТО3=085АH |
ТО4=0852H |
ТО5=0855H |
(SP) |
|
|
|
|
|
В точке останова ТО3 посмотреть содержимое ячеек памяти с адресами SP, SP+1. В них должны находиться мл. и ст. байты адреса возврата (таблица 11).
Таблица 11 – Содержимое стека в точке останова ТО3
(М) по адр. (SP) |
52Н |
(М) по адр. (SP+1) |
08Н |
Задание 2:
Написать с адреса 0А20Н проверочную программу подсчёта контрольной суммы массива.
1. Заполнить массив (0А50Н…0А6FН) константой ЕЕН:
начальный адрес массива загрузить в пару регистров HL;
константу ЕЕН загрузить в регистр D;
заполнение массива константой оформить в виде цикла;
счётчик циклов организовать на регистре Е.
2. Подсчитать контрольную сумму этого массива (без учёта переноса):
подсчёт контрольной суммы оформить как подпрограмму;
значение контрольной суммы записать в регистр С;
начальный адрес подпрограммы 0950Н;
нижняя граница стека 0В50Н.
3. Алгоритм решения задачи и алгоритм подпрограммы представлены на рисунках 2 и 1 соответственно.
4. Программу и подпрограмму записать в таблицы, аналогичные по форме таблицам 8 и 9 соответственно.
5. Записать в память УМК и выполнить проверочную программу подсчёта контрольной суммы. Указать в отчёте значение контрольной суммы. Полученное значение контрольной суммы сравнить с результатом, полученным при использовании команды ПОДСЧЁТ КОНТРОЛЬНОЙ СУММЫ системной программы МОНИТОР, они должны совпадать.
6. Выполнить программу поэтапно, устанавливая точки останова аналогично контрольной программе (таблицы 8 и 9). Результаты записать в таблицы, аналогичные по форме таблицам 10 и11.
Р исунок 1 – Алгоритм подпрограммы подсчёта контрольной суммы.
Р исунок 2 – Алгоритм решения задачи.
План 2003/04, поз. 124
Богородов Владимир Ильич