在8位机中,C语言下乘法基本都是8位的,即8位*8位=16位。若结果超了,就截断16位的结果。在实现16位乘法时,需要将乘数分解为8位*8位的基本运算,实现16位*16位=32位。
STM8的实现例程
uint8_t R00,R01,R02,R03,R04,R05,R06,R07;
union
{
uint32_t L32Data;
struct
{
unsigned char Byte0;
unsigned char Byte1;
unsigned char Byte2;
unsigned char Byte3;
}Byte_union;
}Data_union;
/* word*word */
void Mul_16X16(void)
{
__asm( "CLR R04 \n"
"CLR R05 \n"
"CLR R06 \n"
"CLR R07 \n"
"ld A,R01 \n"
"ld Xl,A \n"
"ld A,R03 \n"
"MUL X , A \n"
"LDW R06,X \n"
"ld A,R00 \n"
"ld Xl,A \n"
"ld A,R03 \n"
"MUL X , A \n"
"ADDW X , R05 \n"
&#