А я и не знала, что у вас ATtiny, думала ATxmega. Задним число ссылочку нашла - там на две команды короче, чем то, как я написала. => http://www.avr-asm-tutorial.net/avr_en/calc/HARDMULT.html
Поглядите, как коротко и красиво вышло:
// unsigned long mul16x16( unsigned int BA, unsigned int DC);
// HGFE = BA * DC
PUBLIC mul16x16
mul16x16:
// сохраняем аргументы
MOVW R21:R20, R17:R16 // R20 = A; R21 = B;
MOVW R23:R22, R19:R18 // R22 = C; R23 = D;
MUL R20, R22 // R1:R0 = R20 * R22 // A * C;
MOVW R17:R16, R1:R0 // R17:R16 = R1:R0 // FE = A * C
MUL R22, R23 // R1:R0 = R22 * R23 // B * D;
MOVW R19:R18, R1:R0 // R19:R18 = R1:R0 // HG = B * D
MUL R21, R22 // R1:R0 = R21 * R22 // B * C;
ADD R17, R0 // R18 += R1; R17 += R0; // GF += B * C
ADC R18, R1
MUL R20, R23 // R1:R0 = R20 * R23 // A * D;
ADD R17, R0 // R18 += R1; R17 += R0; // GF += A * D
ADC R18, R1
RET