У меня так:
.macro INIT_STACK
.ifdef SPH
ldi r16,HIGH(RAMEND)
out SPH,r16
.endif
ldi r16,LOW(RAMEND)
out SPL,r16
.endmacro
.macro Clear_SRAM
ldix SRAM_START
Clear_SRAM_Cycle:
st X+,RCLR
cpi XL,LOW(SRAM_START+SRAM_SIZE)
brne Clear_SRAM_Cycle
cpi XH,HIGH(SRAM_START+SRAM_SIZE)
brne Clear_SRAM_Cycle
.endmacro
;Copyright (C) 2010 Zhukov Alex
.macro RecoverContext
pop ktmp
out SREG,ktmp
pop r31
pop r30
pop r29
pop r28
pop r27
pop r26
pop r25
pop r24
pop r23
pop r22
pop r21
pop r20
pop r19
pop r18
pop r17
pop r16
#if (SaveAllRegisters==Yes)
pop r15
pop r14
pop r13
pop r12
pop r11
pop r10
pop r9
pop r8
pop r7
pop r6
pop r5
pop r4
pop r3
pop r2
pop r1
pop r0
#else
#endif
.endmacro
.macro SaveContext
#if (SaveAllRegisters==Yes)
push r0
push r1
push r2
push r3
push r4
push r5
push r6
push r7
push r8
push r9
push r10
push r11
push r12
push r13
push r14
push r15
#else
#endif
push r16
push r17
push r18
push r19
push r20
push r21
push r22
push r23
push r24
push r25
push r26
push r27
push r28
push r29
push r30
push r31
in ktmp,SREG
push ktmp
.endmacro
;=========================================================================
Reset:
;-------------------------------------------------------------------------
Check_WDRF:
in r16,MCUCSR
sbrs r16,WDRF
rjmp Initial
cbr r16,1<<WDRF
out MCUCSR,r16
ldi r16,1<<SYS_ERR_LED
out SYS_ERR_DDR,r16
;-------------------------------------------------------------------------
;-------------------------------------------------------------------------
Empty_Cycle:
rjmp Empty_Cycle
;-------------------------------------------------------------------------
;-------------------------------------------------------------------------
Initial:
;-------------------------------------------------------------------------
clr r7
clr RCLR; Инициализация вспомогательного регистра.
ser r16
mov RSER,r16; Инициализация вспомогательного регистра.
;-------------------------------------------------------------------------
Init_IO:
;-------------------------------------------------------------------------
out KEYS_PORT,RSER
ldi r16,0x0F
out CMD_DDR,r16
out KEYS_PIN,RSER
;-------------------------------------------------------------------------
;-------------------------------------------------------------------------
Init_Stack; Инициализация стека.
;-------------------------------------------------------------------------
;-------------------------------------------------------------------------
Clear_SRAM; Очистка ОЗУ.
;-------------------------------------------------------------------------
-
- А можно узнать, зачем запоминать контекст в программе на ассемблере?! maik-vs(1677 знак., 05.10.2011 11:19)