ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
20 июля
688932 Топик полностью
Ксения (25.07.2016 09:34 - 09:49, просмотров: 84) ответил AU08 на Ксения, простите если сможете! Как неожиданно выяснил, в ATTINY команда умножения отсутствует :)
А я и не знала, что у вас 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