В ноутах были примеры
построения ассемблерных функций
для С.
Там короче перед выполнением тела
функций были всякие манипуляции с регистами.
Вот пример не полный.
Почитай подобнее их рекомендации.
_q15toq0:
POPD *+ ; Keep return address
SAR AR0,*+ ; Keep old frame pointer (FP)
SAR AR1,* ; Keep old stack pointer (SP)
LARK AR0,__q15toq0_framesize ; Load AR0 with frame size
LAR AR0,*0+,AR0 ; AR0->FP0 (new FP), ARP=AR0
;================================================================================
SBRK #3 ; ARP=AR0, AR0->FR0-3 (1st argument)
SETC SXM ; Turn sign extension mode on
; ACC = q15*scaler (Q16)
; ARP=AR0, AR0->FR0
_q15toq0_exit:
;MAR *,AR1 ; can be removed if this condition is met on
; ; every path to this code. (i.e., ARP=AR1 here)
CLRC OVM
CLRC SXM
SBRK #(__q15toq0_framesize+1)
LAR AR0,*-
PSHD *
RET