Using Atmel Studio Assembler, Write a subroutine to multiply two
unsigned 16-bit integers 0x3732 and 0x4148 passed in r16:r17 and
r18:r19, and return the product in r22, r23, r24, and r25. r17 and
r19 hold the upper bytes of two numbers to be multiplied, and r25
down to r22 hold the most significant to the least significant
bytes of the product.
ANSWER :
;* DESCRIPTION ;*Signed fractional multiply of two 16-bit numbers with 32-bit result. ;* USAGE ;*r19:r18:r17:r16 = ( r23:r22 * r21:r20 ) << 1 ;****************************************************************************** fmuls16x16_32: clr r2 fmuls r23, r21 ;((signed)ah * (signed)bh) << 1 movw r19:r18, r1:r0 fmul r22, r20 ;(al * bl) << 1 adc r18, r2 movw r17:r16, r1:r0 fmulsu r23, r20 ;((signed)ah * bl) << 1 sbc r19, r2 add r17, r0 adc r18, r1 adc r19, r2 fmulsu r21, r22;((signed)bh * al) << 1 sbc r19, r2 add r17, r0 adc r18, r1 adc r19, r2
Using Atmel Studio Assembler, Write a subroutine to multiply two unsigned 16-bit integers 0x3732 and 0x4148...