Area : Встроенные системы Date : Thu Jun 18, 10:48 From : Alexander Trush 2:5020/392.40 To : Alexandr A. Redchuck Subj : Стек в 90s8515 ──────────────────────────────────────────────────────────────────────────────── Привет Alexandr! 14 Jun 98 22:41, Alexandr A. Redchuck wrote to All: AAR> При вызове в стек идет сначала младшая часть адреса возврата, потом AAR> старшая. Т.е. AAR> foo: AAR> pop ZH AAR> pop ZL AAR> ijmp AAR> работает. Кстати этому есть полезное применение. Вот у меня в программе часто приходится заносить 4-х байтовые константы в ОЗУ, скорость не притична, а вот объем FLASH'а ограничен 8К, поэтому я поступаю так: .INCLUDE "8515def.inc" .DSEG .ORG 0x60 buf: .BYTE 16 .CSEG .ORG 0x0000 cli ; Запрет прерываний ldi R16, low(RAMEND) out SPL, R16 ldi R16, high(RAMEND) out SPH, R16 ; Инициализация стека ldi YH, high(buf) ldi YL, low(buf) rcall Put4NextBytes .DB "TEST" rcall Put4NextBytes .DB "NEXT" rcall Put4NextBytes .DB "STOP" rjmp PC ; Ждём-с... ; *********************************************************************** ; Подпрограмма копирования четырех байт расположеных после команды вызова ; подпрограммы в ОЗУ через указатель в [YH:YL] ; Hе будет работать корректно с кристаллами размер памяти программ ; которых более 64К Put4NextBytes: pop ZH ; Получение адреса возврата pop ZL lsl ZL ; Переход к адресации байт в памяти программ rol ZH lpm ; 1-й из памяти программ st Y+,R0 adiw ZL, 1 lpm ; 2-й st Y+,R0 adiw ZL, 1 lpm ; 3-й st Y+,R0 adiw ZL, 1 lpm ; 4-й st Y+,R0 adiw ZL, 1 lsr ZH ; Возврат с пропуском скопированых данных ror ZL ; Сдвиги для перехода к адресации слов ijmp .EXIT Bye-bye. --- * Origin: trush@ropnet.ru / ICQ: 7865704 / (FIDONet 2:5020/392.40)