Смотрю исходники dsplib, писанные на ассемблере.
Смотрим на реализацию функции iir32 из файла iircas32.asm
short oflag = iircas4(DATA *x, DATA *h, DATA *r, DATA *dbuffer, ushort nbiq, ushort nx)
В AR3 при передаче параметров в функцию сохранился адрес на первый элемент dbuffer.
Далее вижу вот это
;Save pointer to index at dbuffer[0]
mov XAR3, XAR5
и позже
mov *AR5, AR3 ;init AR3 offset to buffer start
Как я это понимаю регистр AR3 инициализируется первым элементом из буффера dbuffer (у меня он равен 0). Зачем? Тем более что потом используется косвенная адресация с использованием регистра AR3:
mpym *AR1, uns(*AR3+), AC3 ; b2jH * ud2jL
Как я могу взять по адресу AR3 значение (*AR3), если у меня там не адрес?
Я посмотрел по другим примерам. В функции fir вообще что-то читается из 0-го адреса явно.
MOV #0, h_ptr ;point to first coefficient
MPYM *h_ptr+, *db_ptr+, AC0
Как такое может быть? Разъясните пожалуйста.