ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
3 июля
91713
=L.A.= (15.06.2007 00:27, просмотров: 5195)
Спецы по AVR ассемблер, вопрос Есть переменная ns_rptr - три байта. Вопрос по следующим командам в тексте проги ldd EH, Y+ns_rptr , add EH, T4L, а затем std Y+ns_rptr, EH Я правильно понимаю, что младший байт ns_rptr используется только для суммирования с переносом, а для адресации используются 2 старших байта?
tone_lp:                       ;                                            ;
        ldd     EH, Y+ns_rptr  ;Load wave table pointer ( ns_rptr )         ;
        lddw    Z, Y+ns_rptr+1 ;/                                           ;
        lpm     EL, Z          ;Get a sample Load Program Memory            ;
        lddw    T4, Y+ns_freq  ;Load angular speed                          ;
        add     EH, T4L        ;Increase wave table ptr (next angle)        ;
        adc     ZL, T4H        ;======;                                     ;
        adc     ZH, _0                ;  / Add with Carry two Registers     ;
        cpi     ZH, high(wt_end*2)    ;   Repeat sustain area               ;
        brcs    tn110                 ;   Branch if Carry Set               ;
;                                     ;                                     ;
        subiw   Z, (wt_end-wt_loop)*2 ;                                     ;
        std     Y+ns_wrap, _0         ;  /                                  ;
tn110:                                ;                                     ;
        std     Y+ns_rptr, EH         ;  Save wave table ptr                ;
        stdw    Y+ns_rptr+1, Z        ;  /                                  ;
        ldd     EH, Y+ns_lvl          ;  Apply envelope curve Load Indirect ;
          MULT                        ;  /                                  ;
        addw    T2, T0                ;  Add the sample to accumlator       ;
        adiw    YL, 9                 ;  Next note                          ;
        cpi     YL, low(Notes+nsize*N_NOTE); Compare Register with Immediate;
;                                     ;                                     ;
        brne    tone_lp               ;  / Branch if Not Equal  if (Z = 0) t;
;-------------------------------------;                                     ;