㈠ 单片机乘法指令计算步骤求解
……4Eh×5Dh = 1C56h 啊,你在草稿纸手算一下,或者直接计算器按就行。
十六进制乘法你不熟的话,可以先都转成十进制,用十进制乘法得出乘积,再转成十六进制。
4Eh = 78d,5Dh = 93d
78×93 = 7254d
7254d = 1C56h
好好学习天天向上
㈡ 单片机双字节相乘
网上有这样的程序,直接复制过来,稍微改下就能用的。
/*---------------------------------------------------
义隆单片机
双字节的乘法
功能: (R22:R23)*(R24:R25)-->(R20:R21:R22:R23)
入口:
被乘数 :R22:R23 (R22高位)
乘数 :R24:R25 (R24高位)
出口:
积 :R20:R21:R22:R23(R20为高位)
局部变量 :
count
---------------------------------------------------*/
mul_sub:
clr r20 ; 清空寄存器和进位位
clr r21
mov a,@16 ; 循环16次
mov count,a
bc psw,c
rrc r22
rrc r23
mul_r1:
jbs psw,c ; 判断移出的一位为0还是1
jmp mul_r2 ; 0的话不做运算
mov a,r25 ; 1的话做运算 R20:R21 + R24R25 --> CR:R20:R21
add r21,a ; 低位相加
jbs psw,c
jmp mul_r0
mov a,@1 ; 如果低位进位则高位加1
add r20,a
jbs psw,c ; 判断高位加1后是否已经移出
jmp mul_r0
mov a,r24 ; 做高位运算
add r20,a
bs psw,c ; 需要手工补偿进位位
jmp mul_r2
mul_r0:
mov a,r24 ; 不需要补偿直接加高位的情况
add r20,a
mul_r2:
rrc r20
rrc r21
rrc r22
rrc r23
djz count
jmp mul_r1
ret
㈢ 单片机怎么计算16位数的乘法
加个强制转换行不行 (float)(0x2ab/1024)*500;
㈣ 单片机 怎么用位移的方法实现乘除法
因为在寄存器里的数都是二进制的,所以乘以2:左移一位;乘以4左移两位;乘以8左移三位……依此类推(但要注意寄存器总共有多少位,防止溢出),除法用右移。
直接移位只能计算乘数(或除数)为2的n次方的乘(除)运算,对于一般的乘除法,还要配合加(减)法运算,比如a?9=a??3+a
实际上二进制数的基本运算即加,取反,移位等,通过变换来计算减,乘,除。
可以验证,用单片机C语言编程计算乘数为2的n次方的乘法运算比乘数为一般数的乘法运算要快得多,就是因为前者只需直接移位,后者还需配合加法或经多步运算
㈤ 单片机乘除指令计算的具体步骤
关于MUL的用法书上有应该,我就不说了。说几点:
一、单片机的乘法运算只是进制不同,跟我们常用的十进制是一样的。例如:12×10=120
不要简单想成在后边加个0,学了单片机应该学会用*移位*思考,因为单片机不会在后边加 0减0,应该想成12向左移一位,同样二进制的11B×10B =110B ,十六进制11H×10H=110H,八进制也一样。
二、想不通 ,还可换算成十进制去算,然后再转换成相应进制。因为他们数量是一样的只是进 制不同。十进制要满是个进一位,八进制要满8个进一位。十进制的10和八进制的12是一 样的。
啰嗦了半天希望能理解其中的意思。
㈥ 一个单片机的乘法指令
单片机乘法指令是MUL AB,只能是累加器A和寄存器B相乘,结果低八位存入A,高八位存入B。
比如题中,A=4EH,B=5DH,A*B=1C56H,所以A=56H,B=1CH