- •Команды манипуляции стеком. Вызов подпрограммы и возврат
- •"Цифровые и микропроцессорные устройства"
- •Команды манипуляции стеком. Вызов подпрограммы и возврат
- •5 Приборы, оборудование и документация
- •6 Порядок выполнения работы
- •7 Содержание отчёта
- •8 Контрольные вопросы
- •9 Требования к знаниям и умениям студентов
- •10 Методические указания
- •Теоретическое обоснование
- •Команды записи в стек, восстановления и обмена стеком
- •10.3 Команды вызова подпрограммы и возврата
- •Команды манипуляции стеком. Вызов подпрограммы и возврат
Команды записи в стек, восстановления и обмена стеком
PUSH B – запись в стек содержимого рег. пары BC;
PUSH D – запись в стек содержимого рег. пары DE;
PUSH H – запись в стек содержимого рег. пары HL;
PUSH PSW – запись в стек содержимого рег. пары F, A;
POP B – восстановление содержимого пары рег. BC;
POP D – восстановление содержимого пары рег. DE;
POP H – восстановление содержимого пары рег. HL;
POP PSW – восстановление содержимого пары рег. F, A;
XTHL – обмен содержимого верх. эл. стека и пары рег. HL.
10.2.1 Записать в память, начиная с адреса 0800Н, коды программы сохранения содержимого регистров: BC, DE, HL, F, A, которая указана в таблице 1.
Таблица 1 – Контрольная программа сохранения содержимого пар регистров
Адрес |
Команда |
Операнд |
Машинный код |
Комментарий |
0800 |
LXI |
SP,0B20H |
31 20 0В |
; Загр. SP=0B20H, нижняя ; граница стека |
0803 |
PUSH |
B |
C5 |
; ЗП сод. пары рег. BC в стек |
0804 |
PUSH |
D |
D5 |
; ЗП сод. пары рег. DE в стек |
0805 |
PUSH |
H |
E5 |
; ЗП сод. пары рег. HL в стек |
0806 |
PUSH |
PSW |
F5 |
; ЗП сод. пары рег. F, A в ; стек |
Выполнить программу:
СТ0800 0807ВП
Проверить содержимое пар регистров и заполнить таблицу 2. Результаты записать в рабочую тетрадь.
Таблица 2 – Результаты выполнения контрольной программы сохранения содержимого пар регистров
(BC) |
(DE) |
(HL) |
(PSW) |
(SP) |
|
|
|
|
|
10.2.3 Изменить содержимое регистров микропроцессора:
B, C, D, E, H, L, A, F.
10.2.4 Записать в память программу восстановления содержимого пар регистров, которая указана в таблице 3.
Таблица 3 – Контрольная программа восстановления содержимого пар регистров
Адрес |
Команда |
Операнд |
Машинный код |
Комментарий |
0810 |
POP |
PSW |
F1 |
; Восст. сод. пары рег. F, A |
0811 |
POP |
H |
E1 |
; Восст. сод. пары рег. HL |
0812 |
POP |
D |
D1 |
; Восст. сод. пары рег. DE |
0813 |
POP |
B |
C1 |
; Восст. сод. пары рег. BC |
10.2.5 Выполнить программу:
СТ0810 0814ВП.
Проверить содержимое пар регистров и заполнить таблицу 4.
Таблица 4 – Результаты выполнения контрольной программы восстановления содержимого пар регистров
(BC) |
(DE) |
(HL) |
(PSW) |
(SP) |
|
|
|
|
|
Содержимое регистров B, C, D, E, H, L, F, A должно совпадать с соответствующими значениями таблицы 2. Содержимое указателя стека (SP)=0B20H.
Записать в память программу пересылки данных из одного массива в другой (таблица 5), используя для адресации рег. пару HL и команду обмена стеком XTHL.
Таблица 5 – Контрольная программа пересылки данных из одного массива памяти в другой
Адрес |
Команда |
Операнд |
Машинный код |
Комментарий |
0820 |
LXI |
H, 0900H |
21 00 09 |
; Загр. HL=0900H, адр. 2 ; масс. |
0823 |
LXI |
SP, 0B00H |
31 00 0B |
; Загр. SP=0B00H, нижняя ; граница стека |
0826 |
PUSH |
H |
E5 |
; ЗП в стек (HL)=0900H, ; адр. 2 масс. |
0827 |
LXI |
H, 0100H |
21 00 01 |
; Загр. HL=0100H адр. 1 ; масс. |
082A |
MVI |
C, 80H |
0E 80 |
; Загр. C=80H – длина ; массива |
082C |
MOV |
A, M |
7E |
; Перес. A ← (M), элем. 1 ; масс. |
Продолжение таблицы 5 – Контрольная программа пересылки данных из одного массива памяти в другой
Адрес |
Команда |
Операнд |
Машинный код |
Комментарий |
082D |
INX |
H |
23 |
; HL=(HL)+1, увел. на 1 адр. ; 1 массива |
082E |
XTHL |
|
E3 |
; Обмен сод. стека и HL, ; (HL) – адр. 2 масс., ; [(SP)] – адр. 1 масс. |
082F |
MOV |
M, A |
77 |
; ЗП M ← (A) эл. во 2 масс. |
0830 |
INX |
H |
23 |
; HL=(HL)+1, адр. 2 масс.+1 |
0831 |
XTHL |
|
E3 |
; Обмен сод. стека и HL, ; (HL) – адр. 1 масс., [(SP)] ; адр. 2 масс. |
0832 |
DCR |
C |
0D |
; С=(С)-1, уменьш. длину ; масс. |
0833 |
JNZ |
082CH |
C2 2C 08 |
; Продолжить, если (Iz)=0 |
0836 |
POP |
D |
D1 |
; Очистка стека |
Выполнить программу:
СТ0820 0837ВП.
Подсчитать контрольную сумму (КС) исходного массива (0100Н…017FH) и КС 2 массива (0900H…097FH), они должны совпадать (см. таблицу 6). Для подсчета КС использовать команду ПОДСЧЁТ КОНТРОЛЬНОЙ СУММЫ системной программы МОНИТОР.
Таблица 6 – Результаты выполнения контрольной программы пересылки данных из одного массива в другой
КС массива (0100Н…017FH) |
КС массива (0900Н…097FH) |
77 |
77 |
Задание 1:
Написать и выполнить программу обмена регистровыми парами, используя команды записи в стек PUSH ri и восстановления POP ri, следующим образом:
BC → DE;
DE → HL;
HL → BC.
Начальный адрес программы 0А00Н, нижняя граница стека 0В10Н. Исходные данные для загрузки регистровых пар указаны в таблице 7.
Таблица 7 – Исходные данные и результаты выполнения проверочной программы записи в стек и восстановления
Вариант |
1 |
2 |
3 |
4 |
5 |
(BC) – исх. |
0001 |
0506 |
0B0C |
1112 |
1718 |
(DE) – исх. |
0203 |
0708 |
0D0E |
1314 |
191A |
(HL) – исх. |
0304 |
090A |
0F10 |
1516 |
1B1C |
(DE) – рез. |
|
|
|
|
|
(HL) – рез. |
|
|
|
|
|
(BC) – рез. |
|
|
|
|
|
Проверочную программу записать в таблицу, аналогичную по форме таблице 1. Выполнить программу, результаты записать в таблицу 7.