ХАНДЫФАР

Инструкции PUSH и POP

В микропроцессоре 8085 инструкции PUSH и POP используются для работы со стеком. Стек — это структура данных «первым пришёл — последним ушёл» (LIFO) в памяти, которая играет важную роль в обработке подпрограмм, прерываний и сохранении значений регистров во время выполнения программы.

Общий формат PUSH — PUSH RP, где RP представляет собой пару регистров. В 8085 допустимыми парами регистров для PUSH являются BC, DE, HL и PSW (слово состояния программы, которое содержит значения регистров накопителя и флага).

Для каждой пары регистров существуют определённые коды операций:

  • PUSH B помещает содержимое пары регистров BC в стек.
  • PUSH D помещает содержимое пары регистров DE в стек.
  • PUSH H помещает содержимое пары регистров HL в стек.
  • PUSH PSW помещает содержимое слова состояния программы (аккумулятора и флагов) в стек.

Общий формат инструкции POP — POP RP, где RP представляет собой пару регистров. Как и в случае с инструкцией PUSH, допустимыми парами регистров являются BC, DE, HL и PSW.

Для каждой пары регистров существуют определённые коды операций:

  • POP B извлекает содержимое из стека в пару регистров BC.
  • POP D извлекает содержимое из стека в пару регистров DE.
  • POP H извлекает содержимое из стека в пару регистров HL.
  • POP PSW помещает содержимое стека в слово состояния программы (обновляя аккумулятор и флаги).

В следующем примере мы напишем функцию которая будет копировать элементы массива src в массив dst.

  1. ; Автор: Довгополов Евгений Сергеевич
  2. src: db 01h, 02h, 03h, 04h, 05h
  3. dst: db 00h, 00h, 00h, 00h, 00h
  4. main:
  5. ____lxi_____sp, 0100h__; Инициализируем указателя стека по адресу 0100h.
  6. ____mvi_____c, 05h_____; Копируем шестнадцатеричное непосредственное значение 03h в регистр C.
  7. ____lxi_____d, src_____; Загружаем адрес переменной src в пару регистров DE.
  8. ____lxi_____h, dst_____; Загружаем адрес переменной dst в пару регистров HL.
  9. ____call____CopyArray__; Вызываем процедуру CopyArray.
  10. ____hlt________________; Завершаем программу.
  11. CopyArray:_____________; Процедура CopyArray.
  12. ____push____psw________; Ложим содержимое стека в слово состояния программы PSW в стек.
  13. ____push____d__________; Ложим значение пары регистров DE на вершину стека.
  14. ____push____h__________; Ложим значение пары регистров HL на вершину стека.
  15. CopyLoop:
  16. ____ldax____a__________; Загружаем значение по адресу в памяти (src) в аккумулятор A.
  17. ____mov_____m, a_______; Копируем значение регистра A в память на которую указывает пара регистров HL.
  18. ____inx ____d__________; Увеличиваем значение пары регистров DE на 1.
  19. ____inx ____h__________; Увеличиваем значение пары регистров HL на 1.
  20. ____dcr ____c__________; Уменьшаем значение в регистре C на 1.
  21. ____jnz_____CopyLoop___; Выполняем переход на метку CopyLoop пока регистр C не будет равен 0.
  22. ____pop ____h__________; Выталкиваем значение из стека в пару регистров HL.
  23. ____pop ____d__________; Выталкиваем значение из стека в пару регистров DE.
  24. ____pop_____psw________; Выталкиваем значение из стека в регистр PSW.
  25. ____ret________________; Возврат из процедуры обратно к месту вызова.
Инструкции PUSH и POP

В микропроцессоре 8085 инструкции PUSH и POP используются для работы со стеком. Стек — это структура данных «первым пришёл — последним ушёл» (LIFO) в памяти, которая играет важную роль в обработке подпрограмм, прерываний и сохранении значений регистров во время выполнения программы.

Общий формат PUSH — PUSH RP, где RP представляет собой пару регистров. В 8085 допустимыми парами регистров для PUSH являются BC, DE, HL и PSW (слово состояния программы, которое содержит значения регистров накопителя и флага).

Для каждой пары регистров существуют определённые коды операций:

  • PUSH B помещает содержимое пары регистров BC в стек.
  • PUSH D помещает содержимое пары регистров DE в стек.
  • PUSH H помещает содержимое пары регистров HL в стек.
  • PUSH PSW помещает содержимое слова состояния программы (аккумулятора и флагов) в стек.

Общий формат инструкции POP — POP RP, где RP представляет собой пару регистров. Как и в случае с инструкцией PUSH, допустимыми парами регистров являются BC, DE, HL и PSW.

Для каждой пары регистров существуют определённые коды операций:

  • POP B извлекает содержимое из стека в пару регистров BC.
  • POP D извлекает содержимое из стека в пару регистров DE.
  • POP H извлекает содержимое из стека в пару регистров HL.
  • POP PSW помещает содержимое стека в слово состояния программы (обновляя аккумулятор и флаги).

В следующем примере мы напишем функцию которая будет копировать элементы массива src в массив dst.

  1. ; Автор: Довгополов Евгений Сергеевич
  2. src: db 01h, 02h, 03h, 04h, 05h
  3. dst: db 00h, 00h, 00h, 00h, 00h
  4. main:
  5. ____lxi_____sp, 0100h
  6. ____mvi_____c, 05h
  7. ____lxi_____d, src
  8. ____lxi_____h, dst
  9. ____call____CopyArray
  10. ____hlt
  11. CopyArray:
  12. ____push____psw
  13. ____push____d
  14. ____push____h
  15. CopyLoop:
  16. ____ldax____a
  17. ____mov_____m, a
  18. ____inx ____d
  19. ____inx ____h
  20. ____dcr ____c
  21. ____jnz_____CopyLoop
  22. ____pop ____h
  23. ____pop ____d
  24. ____pop_____psw
  25. ____ret
Made on
Tilda