Аппаратные и программные средства встраиваемых систем



Pdf көрінісі
бет220/268
Дата07.01.2022
өлшемі3,23 Mb.
#18255
1   ...   216   217   218   219   220   221   222   223   ...   268
5.2.9  Ассемблерные вставки 
Компилятор SDCC позволяет  использовать  ассемблерные  вставки. 
Попробуем оптимизировать программу, представленную ниже. 
unsigned char __far __at(0x7f00) buf [0x100]; 
unsigned char head, tail; 
 
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; 

 
Внутри  ассемблерной  вставки  возможно  использование  любых  директив, 
понятных ассемблеру. 


Достарыңызбен бөлісу:
1   ...   216   217   218   219   220   221   222   223   ...   268




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет