Процессор та какой?
Если умножитель аппаратный, то либо 16х16=32, либо 32х32=64. А 32х32=32 - смысла особого не имеет.
Код
mov.w R15,&MPY;загружаем 1е операнды (15х13)
mov.w R13,&OP2
; 3 такта ждать
mov.w &RESHI,R15; результат
mov.w &RESLO,&RESHI
mov.w &MPY ,&MAC;загружаем 2е операнды с суммированием результата (15х12) Если такая форма сработает - все получится. Если нет, готовь еще 4 регистра.
mov.w R12,&OP2
; 3 такта ждать
add.w &SUMEXT,R15; учитываем переполнение
mov.w R14,&MAC;загружаем 3е операнды с суммированием результата (14х13)
mov.w R13,&OP2
; 3 такта ждать
add.w &SUMEXT,R15; учитываем переполнение
mov.w &RESHI,R14 ; записываем результат
mov.w &RESLO,&RESHI
mov.w R12,&OP2 ; загружаем 4е операнды с суммированием результата (14х12)
; 3 такта ждать
add.w &SUMEXT,R14; учитываем переполнение
; тут надо проверить переполнение через SR. И если флаг стоит - inc R15
mov.w &RESHI,R13 ; опять же результат
mov.w &RESLO,R12 ; и последний результат
Проверить возможности нет. Но мысля что будет работать.
Сработает если после чтения регистров RESLO и RESHI они обнуляются, в UG про это ничего не написано. Так же не очень понятно по какому принципу будет определяться 1й операнд. Если по последней записи, то должно работать.
зы: и да, на умножение нужно 3 такта. Не стоит забывать про это, особенно на асе.