Опять серьезные люди будут ругаться :)
Но нельзя после праздников резко начинать, ибо
Program Counter мозга работает с декрементом...
/////////////////////////
// Cи файл....
#include <stdio.h>
extern void my_fun(void);
///////
void main( void )
{
PORTC = 0;
while(1)
{
my_fun();
printf("%d\n",PORTC);
}
}//main
//////////////////////////
//////////////////////////
// АСМ-файл...
#include <iom128.h>
PUBLIC my_fun
//////
RSEG CODE
//////
my_fun:
push R24
push R25
rjmp go_to_command_1
;--- возврат регистров и выход из асм-функции
pop R24
pop R25
ret
;-------------------
;программа из команд 1,2,3,4,5 выполняемая снизу вверх:
;-------------------
pop R17 ; команда 5 - и на выход
call _decrement_PC_
out PORTC, R17 ; команда 4
call _decrement_PC_
inc R17 ; команда 3
call _decrement_PC_
in R17,PORTC ; команда 2
call _decrement_PC_
go_to_command_1:
push R17 ; команда 1
call _decrement_PC_
;-------------------
_decrement_PC_:
pop R25 ; take high return address
pop R24 ; take low return address
subi R24,6
push R24
push R25
ret
///////
END