ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 15.06.2025
Просмотров: 4529
Скачиваний: 2
16.16. Команды для подпрограммы
Для программиста задача подсчета байтов между переходом и целью перехода может оказаться чреватой ошибками. Ассемблерная программа разрешает эту задачу автоматически. Для этого задают символические адреса переходов.
В последующих ассемблерных программах используют метку (label) LOOP, которая представляет собой символический адрес
ANA |
А |
; |
тестировалие |
наксшливающего |
регистра |
JNZ |
LOOP |
; |
переход, если |
накапливающий |
регистр |
; |
равен О |
||||
СМА |
; дополнение накапливающего регистра |
||||
LOOP
16.16, Команды для подпрограммы
Подпрограммы вызываются командой CALL («вызов»). При выдаче команды CALL осуществляются следующие шаги:
1.При вызове подпрограммы командой CALL вначале запоми нается адрес обратного перехода путем размещения в стеке сначала старшего байта счетчика команд, а затем младших байтов. Ячейка ЗУ в стеке определяется в процессе вычита ния 1 из адреса, на который показывает указатель вершины стека. Затем младший байт счетчика команд размещается в ячейке ЗУ с адресом (SP)-2.
2.Затем показания указателя вершины стека уменьшаются на 2. В том случае, если выбрано обычное представление, при ко тором ячейки ЗУ с более старшими адресами вносятся вниз, стек растет вверх. Указатель вершины стека после команды CALL показывает на самую старшую занятую позицию стека (top of stack = TOS).
3.Счетчик команд загружается адресом, имеющимся в операн де. Теперь на этом месте будет стоять следующая подлежащая выполнению команда.
При обратном переходе в соответствии с командой RET (return) производится:
LСодержание ячейки ЗУ, на которую показывает указатель вер шины стека, записываемый в младшем байте счетчика команд.
16.16. Команды для подпрограммы
Команда RST (restart, «перезапуск») вызывает после запомина ния PC новый старт программы по определенному адресу. Старто вый адрес является результатом умножения двоичного эквивалента операнда на 8.
Например, J\ля. RST Зю = 112 стартовым адресом является
0000000000011000.
С помощью команд PUSH и POP содержание регистров может быть размещено в ЗУ магазинного типа (то есть стеке) и выведено вновь, чтобы избежать его разрушения при операциях подпрограм мы. С помощью команд PUSH PSW и POP PSW можно сохранить (содержимое накапливающего регистра и флаг-регистра = proces sor status word, PSW, слева состояния процессора). Команда XTHL производит взаимную замену пары регистров HL и TOS (top of staса, вершина стека).
Указатель вершины стека может быть загружен в регисторную пару HL с помощью следующих команд
LXI Н,ООООН DAD SP
Указатель вершины стека должен быть инициализирован. Как пра вило, его устанавливают по самому старшему адресу зоны RAMH-1. Поскольку он перед первой записью уменьшает свое значение на 1, он будет при этом показывать на старший адрес. Инициализация может быть осуществлена с помощью команды LXISP.
Таблица 16.14. Команды для стека.
К о м а н да |
Операнд |
Воздействие, если |
В |
z |
T |
|||
условие выполнено |
||||||||
PUSH |
i-p |
((SP) - |
1) |
^ |
(rh) |
1 |
3 |
12 |
(rp Ф SP) |
((SP) - |
2) |
^ |
(rl) |
||||
(SP) ^ |
(SP) - 2 |
|||||||
PUSH |
PSW |
((SP) - |
1) |
^ |
(A) |
1 |
3 |
12 |
((SP) - |
2) |
^ |
(?????????) |
|||||
(SP) ^ |
(SP) - |
2 |
||||||
POP |
rp |
(rl) <- |
((SP)) |
1 |
3 |
10 |
||
(rp Ф SP) |
(rh) ^ |
((SP) + 1) |
||||||
(SP) <r- (SP) + 2 |
||||||||
POP |
PSW |
(???????????) |
4r- ((SP)) |
1 |
3 |
10 |
||
(A) ^ |
((SP) + 1) |
|||||||
(SP) ^ |
(SP) + 2 |
|||||||
Глава 16. Структура, система команд и работа микропроцессора
В табл. 16.15 показана подпрограмма, в которой запоминаются содержания всех регистров. Это необходимо только тогда, когда они используются и в подпрограмме. Без запоминания в стеке было бы утеряно содержание, которое еще может потребоваться в вызы вающей программе.
Таблица 16.15. Структура подпрограммы. |
|||||
Адрес |
Машин, |
Метка |
Операц. |
Операнд |
Комментарии |
код |
код |
||||
1000 |
31 01 18 |
LXI |
SP, 1801H |
Инициализация стека |
|
1003 |
01 ЕС OF |
LXI |
B, OFECH |
Загрузка в ВС |
|
1006 |
11 D1 80 |
LXI |
H, ICFEH |
Вызов подпрогрг1Ммы |
|
1009 |
21 FE 1С |
LXI |
H, ICFEH |
||
ЮОС |
CD 00 12 |
CALL |
UTPR |
||
1200 |
05 |
UTPR |
PUSH |
В |
Запоминание ВС |
1201 |
D5 |
PUSH |
D |
||
1202 |
Е5 |
PUSH |
H |
||
1203 |
F5 |
PUSH |
PSW |
Запоминание (А) и |
|
флагов |
|||||
Команды подпрограммы |
|||||
120F |
Fl |
POP |
PSW |
Получить |
|
накопительный регистр |
|||||
H |
и флаги |
||||
1210 |
El |
POP |
Получить назад HL |
||
1211 |
Dl |
POP |
D |
||
1212 |
01 |
PGP |
В |
||
1213 |
C9 |
RET |
Обратный переход |
||
В табл. 16.16 показано содержание стека во время выполнения подпрограммы в табл. 16.15. В этом примере принято, что в накап ливающем регистре стоит ЕОН и что флаг-регистр содержит 08Н.
16.17. Команды для управления процессором
Команда HLT (half, «останов») приводит процессор в состояние ожи дания. Он выходит из этого состояния только при воздействии ко манд прерывания RESET или TRAP. Другие прерывания должны быть сначала окончены, чтобы исключить воздействие на состоя ние останова (halt).