一种实用的单片机多字节除法程序

合集下载

单片机移位实现的乘除法

单片机移位实现的乘除法

单片机移位实现的乘除法一、乘法运算:乘法运算是指两个数相乘的操作。

在单片机中,可以通过移位运算和累加运算来实现乘法运算。

1.乘法基本原理:乘法运算的基本原理是将一个数转换为二进制表示,然后按位相乘再相加。

单片机中的乘法移位算法是指通过移位运算来实现乘法的操作。

2.移位运算:在计算机中,移位运算可以分为左移和右移两种操作。

左移是将数的二进制表示向左移动指定位数,右边空出的位用0补齐。

右移是将数的二进制表示向右移动指定位数,左边空出的位用0或1补齐,取决于原始数的符号位。

3.移位实现乘法的步骤:以下是使用移位实现乘法运算的步骤:-将第一个数转换为二进制表示。

-将第二个数转换为二进制表示,然后从低位开始逐位遍历。

-如果当前位为1,则将第一个数左移对应的位数,然后累加到结果中。

-继续遍历第二个数的下一位,重复上述操作。

-最后得到的结果就是两个数相乘的结果。

4.乘法示例程序:下面是一个使用移位实现乘法的示例程序:```c#include <stdio.h>int multiply(int num1, int num2)int result = 0;while (num2 != 0)if (num2 & 1)result += num1;}num1 <<= 1;num2 >>= 1;}return result;int maiint num1 = 5;int num2 = 6;int result = multiply(num1, num2);printf("Result: %d\n", result);return 0;```该程序中,multiply函数使用了移位运算和累加运算来实现两个数的乘法。

通过调用multiply函数,可以得到5和6相乘的结果,并输出到屏幕上。

二、除法运算:除法运算是指一个数除以另一个数的操作。

在单片机中,可以通过移位运算和减法运算来实现除法运算。

多字节二进制除法

多字节二进制除法

多字节二进制除法被除数为3 个字节,在0x20、0x21、0x22 单元中,0x22.7 为最高位,0x20.0 为最低位。

除数为2 个字节,在0x30、0x31 中。

算法:EM78 单片机没有除法指令,而且本例中除法为多字节除法,可采用如下算法。

将被除数扩充一个字节0X23,0X23 清0。

被除数左移1 位,0X23、0X22 中数据减去0X31、0X30 中数据,够减则减且0X20.0 置1,减出结果存入0X23、0X22;不够减则0X23、0X22 保持不变,0X20.0 清0。

然后被除数再左移1 位,重复上述过程。

共循环16 次,最后0X23、0X22 中得相减余数,0X21、0X20 中得商。

注意,若被除数左移后C 标志为1,则不比较0X23、0X22 与0X31、0X30 数据大小关系而直接相减。

main:MOV a,@0x55 ;被除数赋值MOV 0x20,aMOV 0x21,aMOV 0x22,aMOV a,@0x0 ;被除数扩充1 字节并清0MOV 0x23,aMOV a,@0x12 ;除数赋值MOV 0x30,aMOV 0x31,aMOV a,@0x10 ;循环次数为16MOV 0x32,aagain: call rt_sub ;调移位除法子程djz 0x32 ;16 次循环完成则结束jmp again ;未完成则继续self: jmp selfrt_sub:bc 0x03,0 ;c 标志清0rlc 0x20 ;被除数左移1 位rlc 0x21jmp rt3 ;c标志为1 则直接相减MOV a,0x23 ;c 标志为0 则先比较大小MOV 0x25,aMOV a,0x22MOV 0x24,aMOV a,0x31 ;先比较高位sub 0x25,ajbc 0x03,2jmp rt1 ;高位相等跳rt1 比较低位jmp rt2 ;高位不等跳rt2rt1: MOV a,0x30 ;比较低位sub 0x24,ajbc 0x03,2jmp rt3 ;低位也相等则跳rt3,相减,上1 rt2: jbs 0x03,0ret ;减数大则返回,减数小则相减,上1 rt3: bs 0x20,0 ;上1call sub_2b ;调2 字节减法子程retsub_2b:MOV a,0x31 ;高字节相减sub 0x23,aret ;低字节相等,无借位,返回jbc 0x03,0ret ;无借位,返回dec 0x23 ;低字节相减有借位,高字节结果减1reteop二多字节二进制加法0X20,0X21 中的二进制无符号数与0X22,0X23 中的二进制无符号数相加,结果放在0X24,0X25,0X26 中,低地址中放低字节数据。

SONIX单片机除法程序

SONIX单片机除法程序

SONIX单片机除法程序单片机移位除法原理描述:扩充一个字节,并清0作“余数”,列“余数”到“被除数”高位,把“被除数”及“高位余数”左移1位(带“C”标),此时C标为1则直接用“余数”减“除数”(结果返回余数)C标为0则比较“余数”和“除数”的大小“余数”小,则“商”带C左移1位,循环计数减1进入下一次循环移位。

“余数”大于等于“除数”则,“余数”减“除数”(结果返回余数)再商带C左移1位,循环计数减1进入下一次循环移位。

循环计数为0时,结束运算。

;Name ivisionSub by 540;Function :除法子程序DIVIDEND/ DIVISOR = QUOTIENT ..... REMAIN;QUOTIENT,商;DIVIDEND,被除数;DIVISOR,除数;REMAIN,余数;***********************************************DivisionSub: CLR REMAIN ;清余数CLR QUOTIENT_L;商清零CLR QUOTIENT_HMOV A,#16 ;设置为8位除法MOV SUB_TIMES,A ;LOOP_DIVI: RLCM DIVIDEND_L ;被除数左移RLCM DIVIDEND_H ;RLCM REMAIN ;B0BTS0 FC ;JMP DEC_SUB ;C为1则直接减MOV A,REMAIN ;SUB A,DIVISOR ;除数B0BTS0 FC ;B0MOV REMAIN,A ;JMP LOOP ;DEC_SUB: B0MOV A,REMAIN ;SUB A,DIVISOR ;B0MOV REMAIN,A ;B0BSET FC ;恢复C标为1LOOP: RLCM QUOTIENT_L ;RLCM QUOTIENT_H ;DECMS SUB_TIMES ;JMP LOOP_DIVI ;RET ;子程序名称:双字节除以单字节除法;被除数:R1,R2; 除数:R3; 商:R1,R2; 余数:R0; 另外占用:R;DIV: CLR R0B0MOV R,#10HLOP_SUB: BCLR FCRLCM R2RLCM R1RLCM R0BTS0 FCJMP SAMEMOV A,R0SUB A,R3BTS1 FCJMP N_SAME SAME: MOV A,R0SUB A,R3MOV R0,ABSET R2.0N_SAME: DECMS RJMP LOP_SUBRET。

一种实用的单片机多字节除法程序

一种实用的单片机多字节除法程序

一种实用的单片机多字节除法程序一种实用的单片机多字节除法程序在单片机的实际应用中,除法运算是以比较常见的运算。

以MCS-51 单片机为例,虽然提供了除法指令,但只能进行单字节的运算。

如果要进行多字节的除法运算,就得自己设计算法。

目前,许多资料上都介绍了四字节除以二字节的算法,但它们主要有以下几点不足:1.只能求出商,不能求出余数;2.在被除数高二字节大于除数时,不能进行运算;3.商只有两个字节。

例如,被除数是0FFFFFFFFH,除数是0004H 时,商数应该是3FFFFFFFH,余数是0003H。

但是,用以前的算法是无法进行运算的。

在实际运用中,参与运算的数是任意的,有时需要求出余数,有时商数要求有四个字节,因此,以前的算法在实际应用中受到了很大的限制。

为了满足实际运用中的需要,有一套新的四字节除以二字节的算法,克服了上述算法中的缺点,可以适合广泛的实际需要。

下面以MCS-51 汇编语言为例进行说明。

该算法增加了两字节的余数单元,并把被除数单元用来存放商数。

运算时,首先判断除数是否为零,若为零时,则设溢出标志为1,然后退出。

若除数不为零,则采用移位相减法进行运算。

首先,把进位位和余数单元清零。

再将进位位、余数单元和被除数单元按顺序首尾相连,逐位进行向左循环移位,共移位32 次。

每移位一次,余数单元都和除数作一次减法运算,若够减,余数单元内容更新为两者之差,并且将被除数最末一位置为1;若不够减,则余数单元内容保持不变,且将被除数最末一位置为0。

判断是否够减的方法是:在作减法之前,先保存进位位,再看作完减法后的进位位。

仅在作减法之前进位位为0,并且作减法之后进位位为1 时判为不够减,其余情况均视为够减。

这样,等到全部运算结束时,商数为四个字节,存放在被除数单元中;余数为两个字节,存放在余数单元中。

例如,被除数是0FFFFFFFFH,除数是0004H 时,运行新的算。

单片机多字节加减乘除法程序

单片机多字节加减乘除法程序

单片机多字节加减乘除法程序文章长度[6790]加入时间[2007-8-14]更新时间[2012-6-12 18:04:14]级别[0][评论][收藏]一种实用的单片机多字节除法算法一种实用的单片机多字节除法算法在单片机的实际应用中,除法运算是比较常见的一种运算。

以MCS-51单片机为例,虽然它提供了除法指令,但只能进行单字节除以单字节的运算,如果要进行多字节的除法运算,就得自己设计算法。

目前,许多资料上都介绍了四字节除以二字节的算法,但它们主要有以下几点不足:1.只能求出商,不能求出余数;2.在被除数高二位大于除数时,不能进行运算;3.商只有两个字节。

例如,被除数是0FFFFFFFFH,除数是0004H时,商数应该是3FFFFFFFH,余数是0003H。

但是,用以前的算法是无法进行运算的。

在实际运用中,参与运算的数是任意的,有时需要求出余数,有时商数要求有四个字节,因此,以前的算法在实际应用中受到了很大的限制。

为了满足实际运用中的需要,我设计了一套新的四字节除以二字节的算法,克服了上述算法中的缺点,可以适合广泛的实际需要。

下面以MCS-51汇编语言为例进行说明。

该算法增加了两字节的余数单元,并把被除数单元用来存放商数。

运算时,首先判断除数是否为零,若为零时,则设溢出标志为1,然后退出。

若除数不为零,则采用移位相减法进行运算。

首先,把进位位和余数单元清零。

再将进位位、余数单元和被除数单元按顺序首尾相连,逐位进行向左循环移位(如图示),共移位32次。

每移位一次,余数单元都 C (H L)(HH HL LH LL) 进位位余数单元被除数单元和除数作一次减法运算,若够减,余数单元内容更新为两者之差,并且将被除数最末一位置为1;若不够减,则余数单元内容保持不变,且将被除数最末一位置为0。

判断是否够减的方法是:在作减法之前,先保存进位位,再看作完减法后的进位位。

仅在作减法之前进位位为0,并且作减法之后进位位为1时判为不够减,其余情况均视为够减。

单片机多字节乘除法

单片机多字节乘除法

二,用减法做除法: 用减法做除法:
例2 如何用减法做除法计算十六进制89/2=44,余1。 如何用减法做除法计算十六进制89/2=44,余1 用一个空RAM0,RAM0位与除数最多用位数相同, 用一个空RAM0,RAM0位与除数最多用位数相同, 如除数2最多用4位,如除数是88最多用8 如除数2最多用4位,如除数是88最多用8位。 有下式: RAM1=1000 1001,RAM0=0000。和为一体为 1001,RAM0=0000。和为一体为 RAM= RAM=1000 1001 0000, RAM0最后保存的数为余数, RAM0最后保存的数为余数, 8位除以8位,多字节以此类推。 位除以8
直观如下:89( 直观如下:89(1000 1001)/2。结果为44,余1。 1001)/2。结果为44,余 RAM1 RAM0,RAM0为保存余数用。 RAM0,RAM0为保存余数用。 1000 1001 0000 1,0001 0010 0001 2,0010 0100 0010 0010 0101 0000 RAM0>=2,RAM0-2,RAM1+1。 RAM0>=2,RAM0RAM1+1。 3,0100 1010 0000 4,1001 0100 0000 5,0010 1000 0001 6,0101 0000 0010 0101 0001 0000 RAM0>=2,RAM0-2,RAM1+1。 RAM0>=2,RAM0RAM1+1。 7,1010 0010 0000 8,0100 0100 0001
步骤如下:
1,左移一位到C,结果 C=1,RAM= 0110 0000 1,左移一位到C 1,RAM= 2,C=1,则RAM0+2,RAM=0110 0010 2,C=1,则RAM0+2,RAM= 3,左移一位到C,结果 C=0,RAM=1100 0100 3,左移一位到C 0,RAM= 4,C=0,则RAM不加。 4,C=0,则RAM不加。 5,左移一位到C,结果 C=1,RAM= 1000 1000 5,左移一位到C 1,RAM= 6,C=1,则RAM0+2,RAM=1000 1010 6,C=1,则RAM0+2,RAM= 7,左移一位到C,结果 C=1,RAM= 0001 0100 7,左移一位到C 1,RAM= 8,C=1,则RAM0+2,RAM=0001 0110 8,C=1,则RAM0+2,RAM=

单片机除法指令

单片机除法指令

单片机是一种微型计算机,它集成了处理器核心、内存和可编程输入输出端口在一个芯片上。

在单片机编程中,除法指令是用于执行两个数相除的算术操作。

不同的单片机架构可能有不同的除法指令集,但大多数都提供了基本的整数除法功能。

以下是一些常见的单片机架构及其对应的除法指令:1.8051单片机: 8051单片机使用8位微控制器,其指令集中包含了除法指令。

例如,DIV AB指令用于将累加器A中的值除以寄存器B中的值,商存放回累加器A,余数存放在累加器B。

2.PIC单片机:在PIC单片机(如PIC16系列)中,除法操作通常通过库函数来实现,而不是直接的硬件指令。

例如,可以使用div函数来执行除法操作。

3.ARM单片机: ARM架构的单片机(如基于Cortex-M系列)提供了更为复杂的除法指令。

例如,SDiv指令用于有符号整数除法,而UDiv 用于无符号整数除法。

这些指令可以处理32位或64位的操作数。

4.AVR单片机: AVR单片机(如Atmega系列)使用ATmega指令集,其中包括DIV指令,用于无符号整数除法。

这个指令将寄存器r0和r1的内容除以r24和r25的内容,结果存放回r0和r1。

5.MSP430单片机: MSP430单片机使用的是MSP430指令集,其中包括16位和32位的除法指令。

例如,div.w #num指令用于将工作寄存器W的内容除以立即数num,结果存放回工作寄存器W。

在使用除法指令时,需要注意以下几点:•数据大小:确保操作数的大小与指令匹配。

例如,如果指令是为8位操作数设计的,那么确保你的数据不会溢出8位的范围。

•除数为零:在执行除法操作前,检查除数是否为零,以避免运行时错误。

•符号:如果你的单片机支持有符号除法,确保正确处理正负号。

•精度:根据需要选择合适的数据类型和精度。

在某些情况下,可能需要使用浮点除法。

单片机的除法指令是编程中的基本操作之一,它们使得单片机能够进行各种数学计算和数据处理任务。

单片机除法

单片机除法

不再麻烦的单片机除法
单片机除法是嵌入式系统设计中经常使用的数学运算,但它的处
理相对比其他数学运算有些麻烦。

今天,我们分享一种简单易用且高
效的单片机除法方法,让您的单片机除法不再麻烦!
首先让我们了解一下单片机的特性。

单片机除法一般都需要使用
到硬件除法器,这种除法器会占用单片机的大量资源,包括内存和时
间等。

因此,我们需要寻找一种更加简单高效的方式来进行除法运算。

接下来,让我们来介绍一种基于二分法的简单除法运算。

这种除
法运算方法将除数和被除数都转换成整形数,然后进行二分运算,最
后获得正确的结果。

具体实现方法如下:
1.将被除数和除数转换成整形数
2.对取绝对值后的被除数和除数进行二分运算
3.判断商的符号
4.返回商的整型值
使用这种方法,不仅能够实现快速高效的单片机除法,而且还能
节约单片机资源,提高系统响应速度。

此外,这种方法还可以应用于
一些其他的数值计算中。

综上所述,除法是单片机设计中不可避免的数学运算之一。

但是,通过本文所介绍的简单易用的单片机除法方法,您可以避免一些不必
要的麻烦并大大提高代码的运行效率。

希望这种方法对您在嵌入式系统设计中的工作有所启发。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一种实用的单片机多字节除法程序
在单片机的实际应用中,除法运算是以比较常见的运算。

以MCS-51 单片机为例,虽然提供了除法指令,但只能进行单字节的运算。

如果要进行多字节的除法运算,就得自己设计算法。

目前,许多资料上都介绍了四字节除以二字节的算法,但它们主要有以下几点不足:1.只能求出商,不能求出余数;2.在被除数高二字节大于除数时,不能进行运算;3.商只有两个字节。

例如,被除数是0FFFFFFFFH,除数是0004H 时,商数应该是3FFFFFFFH,余数是0003H。

但是,用以前的算法是无法进行运算的。

在实际运用中,参与运算的数是任意的,有时需要求出余数,有时商数要求有四个字节,因此,以前的算法在实际应用中受到了很大的限制。

为了满足实际运用中的需要,有一套新的四字节除以二字节的算法,克服了上述算法中的缺点,可以适合广泛的实际需要。

下面以MCS-51 汇编语言为例进行说明。

该算法增加了两字节的余数单元,并把被除数单元用来存放商数。

运算时,首先判断除数是否为零,若为零时,则设溢出标志为1,然后退出。

若除数不为零,则
采用移位相减法进行运算。

首先,把进位位和余数单元清零。

再将进位位、余数单元和被除数单元按顺序首尾相连,逐位进行向左循环移位,共移位32 次。

每移位一次,余数单元都和除数作一次减法运算,若够减,余数单元内容更新为两者之差,并且将被除数最末一位置为1;若不够减,则余数单元内容保持
不变,且将被除数最末一位置为0。

判断是否够减的方法是:在作减法之前,
先保存进位位,再看作完减法后的进位位。

仅在作减法之前进位位为0,并且
作减法之后进位位为1 时判为不够减,其余情况均视为够减。

这样,等到全部运算结束时,商数为四个字节,存放在被除数单元中;余数为两个字节,存放在余数单元中。

例如,被除数是0FFFFFFFFH,除数是0004H 时,运行新的算。

相关文档
最新文档