因为在寄存器里的数都是二进制的,所以乘以2:左移一位;乘以4左移两位;乘以8左移三位……依此类推(但要注意寄存器总共有多少位,防止溢出),除法用右移。

直接移位只能计算乘数(或除数)为2的n次方的乘(除)运算,对于一般的乘除法,还要配合加(减)法运算,比如a?9=a??3a
实际上二进制数的基本运算即加,取反,移位等,通过变换来计算减,乘,除。
可以验证,用单片机C语言编程计算乘数为2的n次方的乘法运算比乘数为一般数的乘法运算要快得多,就是因为前者只需直接移位,后者还需配合加法或经多步运算
单片机乘除法要用到ACC与B寄存器
所以在中断程序中:
最后的两个除法把ACC的值改变了。把变量ACC改为一个其它的全局变量就好了。(比如定义一个全局变量unsigned
指令C语言编程中,变量最好让编译器自己处理,不要直接用某一个寄存器。
关于MUL的用法书上有应该,我就不说了。说几点:
一、单片机的乘法运算只是进制不同,跟我们常用的十进制是一样的。例如:12×10=120
不要简单想成在后边加个0,学了单片机应该学会用*移位*思考,因为单片机不会在后边加 0减0,应该想成12向左移一位,同样二进制的11B×10B=110B,十六进制11H×10H=110H,八进制也一样。
二、想不通,还可换算成十进制去算,然后再转换成相应进制。因为他们数量是一样的只是进 制不同。十进制要满是个进一位,八进制要满8个进一位。十进制的10和八进制的12是一 样的。
啰嗦了半天希望能理解其中的意思。
PIC单片机的时钟经过内部分频,实际的工作频率为晶振频率的四分之一,同时指令的执行采用流水线方式,大部分的指令的执行时间是一个周期,所以在用4MHz的晶振时,指令执行的最大速度为1MIPS,即指令周期为1微秒。\r\n\r\n你可以参考PIC16F84单片机的资料。
原理很简单,但程序很复杂,最原始也是最准确的方法,二进制移位乘法和除法运算,还要特别注意,一般人不会考虑,除数永远大于相同位数值。
可用移位、比较的方法实现任意位除法。右移一次相当于除于2,前提条件是原数必须是偶数。