void to_buffer( unsigned char c )
{
if( head != (unsigned char)(tail-1) ) buf [ head++ ] = c;
}
В примере оптимизированной функции хорошо видно, что для прямого
включения ассемблерного кода необходимо использовать директивы _asm и
_endasm.
void to_buffer_asm( unsigned char c )
{
_asm
mov r2,dpl
;buffer.c if( head != (unsigned char)(tail-1)
mov a,_tail
dec a
mov r3,a
mov a,_head
cjne a,ar3,00106$
ret
00106$:
;buffer.c buf [ head++ ] = c;
mov r3,_head
inc _head
mov dpl,r3
mov dph,#(_buf >> 8)
mov a,r2
movx @dptr,a
00103$:
ret
229
_endasm;
}
Внутри ассемблерной вставки возможно использование любых директив,
понятных ассемблеру.