pic单片机汇编怎么实现乘除运算汇编乘除指令

2023-08-17 05:11:33 浏览

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

pic单片机汇编怎么实现乘除汇编乘除指令

直接移位只能计算乘数(或除数)为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,前提条件是原数必须是偶数。

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。