PIC中档单片机的无符号长整型数除以无符号字符型的除法程序

合集下载

PIC单片机考试题目及答案

PIC单片机考试题目及答案

PIC单片机考试题目及答案一、选择题(每题2分,共20分)1. PIC单片机属于哪种类型的微控制器?A. 8位B. 16位C. 32位D. 64位答案:A2. PIC单片机的内部时钟频率通常由什么决定?A. 外部晶振B. 内部RC振荡器C. 外部时钟信号D. 外部计数器答案:B3. 在PIC单片机中,哪个寄存器用于存储程序计数器的值?A. PCLB. PCHC. FSRD. INDF答案:A4. PIC单片机的I/O端口可以配置为以下哪种模式?A. 数字输入B. 数字输出C. 模拟输入D. 所有以上答案:D5. PIC单片机中,哪个指令用于跳转到指定的地址执行程序?A. GOTOB. CALLC. RETD. MOV答案:A6. 在PIC单片机编程中,哪个指令用于将立即数传送到寄存器?A. MOVFB. MOVFFC. CLRFD. BSF答案:D7. PIC单片机的看门狗定时器(WDT)的主要功能是什么?A. 系统复位B. 定时中断C. 串行通信D. 模数转换答案:A8. PIC单片机的EEPROM数据存储区的大小通常是多少?A. 128字节B. 256字节C. 512字节D. 1024字节答案:B9. 在PIC单片机中,哪个指令用于将一个寄存器的内容与另一个寄存器的内容进行逻辑或操作?A. ANDWFB. XORWFC. ORWFD. IORWF答案:C10. PIC单片机的睡眠模式中,哪种模式可以快速唤醒?A. SLEEPB. IDLEC. DOZED. PCON答案:B二、填空题(每空1分,共10分)1. PIC单片机的_______指令用于将程序状态字寄存器(STATUS)的内容传送到W寄存器。

答案:STATUS2. 在PIC单片机中,_______指令用于将累加器(ACC)的内容与直接地址的数据进行逻辑与操作。

答案:ANDLW3. PIC单片机的_______指令用于将寄存器的内容与立即数进行逻辑异或操作。

PIC单片机_C编程技巧

PIC单片机_C编程技巧

PIC单片机C编程技巧PIC单片机C编程技巧1、PICC 和MPLAE 集成PICC 和MPLAE 集成:PICC有自己的文本编辑器,不过是DOS风格的,看来P ICC的工程师要专业冷到酷底了 ...大家大可不必用它,如果你没什么癖好的话,你不会不用UltraEdit 吧?1:建立你的工作目录:建议在C盘根目录下建立一个以A开头的文件夹做为工作目录.因为你会发现它总是在你查找文件时候第一个跳入你眼中.2:MPLAB 调用PICC.(以MPLAE5.7 版本为例子)启动MPLAB. 在Project--〉Install Language Tool:Lan guage Suite——>hi-tech piccTool Name ---->PICC CompilerExecutable ---->c:hi-picinpicc.exe (假如你的PICC 是默认安装的)选Command-line最后OK.上面这步只需要设定一次,除非你重新安装了MPLAE.3:创建你的项目文件:(假如你实现用EDIT编辑好了一个叫AA.C的C 代码文件)Project-->New Project-->File Name--->myc (假如我们把项目文件取名字叫MYC.PJT)右边窗口当然要选择中你的工作目录.然后OK.4:设定你的PICC工作参数:Project-->Edit Project上面4个栏目就用默认的,空的也就让它空着,无所谓的.需要修改的是:Development Mode----> 选择你的PIC型号.当然要选择Mplab SIM Simulator让你可以用软件仿真.Lan guage Tool Suite--->HI-TECH PICC上面的步骤,你可能会遇见多个提示条,不要管它,一路确下面是PICC编译器的选择项:双击Project Files 窗口里面的MYC.HEX, 出现一个选择栏目.命令很多,大家可以看PICC文本编辑器里面的HEL P,里面有详细说明.下面就推荐几个常用也是建议用的:Gen erate debug info 以及下面的2 项.Produce assembler list file就在它们后面打勾即可,其它的不要管,除非你有特殊要求.5:添加你的C代码文件:当进行了前面几步后,按Add Node 找到AA.C文件就OK 了.6:编译C代码:最简单的一步:直接按下F10.编译完后,会出现各种调试信息.C代码对应的汇编代码就是工作目录里面的AA.IST, 用EDIT打开可以看见详细的对比.7:其它,要是一切都没问题,那么你就可以调试和烧片了,和以往操作无异.2、如何从汇编转向PICC首先要求你要有C语言的基础。

c51单片机变量类型

c51单片机变量类型

c51单片机变量类型C51单片机是一种非常常见的嵌入式系统开发平台,它广泛应用于各种电子设备和自动化控制系统中。

在C51单片机的编程中,变量类型是一个非常重要的概念,它决定了变量所占用的内存空间和能够表示的数值范围。

C51单片机提供了多种变量类型,包括整型、字符型和浮点型。

下面将详细介绍这些变量类型及其使用方法。

1. 整型变量整型变量用于表示整数值,C51单片机提供了多种整型变量类型,包括有符号和无符号的。

有符号整型变量可以表示正负整数,而无符号整型变量只能表示非负整数。

C51单片机的整型变量类型包括:- signed char:有符号字符型变量,占用1个字节,表示范围为-128到127。

- unsigned char:无符号字符型变量,占用1个字节,表示范围为0到255。

- signed int:有符号整型变量,占用2个字节,表示范围为-32768到32767。

- unsigned int:无符号整型变量,占用2个字节,表示范围为0到65535。

- signed long:有符号长整型变量,占用4个字节,表示范围为-2147483648到2147483647。

- unsigned long:无符号长整型变量,占用4个字节,表示范围为0到4294967295。

在使用整型变量时,可以使用赋值运算符将数值赋给变量,并且可以使用算术运算符对变量进行加减乘除等操作。

2. 字符型变量字符型变量用于表示字符,C51单片机的字符型变量类型为char,占用1个字节。

字符型变量可以用于存储ASCII码值,也可以用于表示字符常量。

在使用字符型变量时,可以使用赋值运算符将字符值赋给变量,并且可以使用算术运算符对变量进行加减等操作。

3. 浮点型变量浮点型变量用于表示浮点数,C51单片机的浮点型变量类型为float,占用4个字节。

浮点型变量可以表示较大范围的数值,并且可以进行浮点数的运算。

在使用浮点型变量时,可以使用赋值运算符将浮点数赋给变量,并且可以使用算术运算符对变量进行加减乘除等操作。

PIC单片机的C语言程序设计

PIC单片机的C语言程序设计

4、函数声明、调用以及传参 unsigned int test(unsigned int t); unsigned char test(unsigned char*)
5、中断函数的实现 关键字:interrupt 对应地址:0x0004 函数形式: void interrupt fouc_name(void) {//无需现场保护和现场恢复 ; } 中断函数的原则
6、局部变量与全局变量 (1)定义 (2)声明位置 (3)注意保护全局变量
7、页管理 每个bank中有128个字节,其中一部分被 特殊功能寄存器占用。 错误信息: Error[000]:can’t find 0x12C words for psect rbss_1 in segment bank1 为了避免ห้องสมุดไป่ตู้繁的bank切换,提高代码的效 率,尽量把实现同一任务的变量定义在一 个bank内。
PIC单片机的C语言程序设计
——胡耀航
主要内容
1、C语言语法基础(基于PIC单片机) 2、开发环境的安装及程序的编写和调试 3、实例演示
一、C语言基础
1、数据类型
类型 bit char unsigned char short unsigned short int unsigned int long unsigned long float double 长度(位数) 1 8 8 16 16 16 16 32 32 24 24或32 数学表达式 布尔值 有符号字符型变量 无符号字符型变量 有符号整型数 无符号整型数 有符号整型数 无符号整型数 有符号长整型 无符号长整型 浮点型 浮点型,缺省为24
8、绝对定位 bit RA0 PORTA*8+0;//定义PORTA第0位为RA0 9、const关键字 作用:将一些固定不变的数据放到ROM中, 节约数据存储空间

MCS-51单片机技术项目驱动教程C语言第二版牛军课后参考答案

MCS-51单片机技术项目驱动教程C语言第二版牛军课后参考答案

MCS-51单片机技术项目驱动教程C语言第二版习题答案第1章思考与练习1. 什么是单片机?最早的单片机是什么时间推出的?答:单片机是单片微型计算机的简称,它将中央处理器(CPU)、随机存储器(RAM)、只读存储器(ROM)、中断系统、定时器/计数器、串行口和I/O接口等主要计算机部件集成在一块大规模集成电路芯片上,具有了微型计算机的组成结构和功能。

最早的单片机是在20世纪70年代初推出的。

2. 简述单片机的特点。

答:单片机具有种类众多、性价比高、集成度和可靠性高、存储器ROM和RAM严格区分、采用面向控制的指令系统、I/O引脚通常是多功能的、外部扩展能力强等特点。

3. 什么是MCS-51单片机?最早是哪家公司推出的?答:MCS-51单片机是所有兼容Intel 8051指令系统单片机的统称,最早由Intel 公司推出。

4. 说出4种以上常用的单片机类型。

答:(1)MCS-51单片机;(2)AVR单片机;(3)PIC单片机;(4)MSP430单片机;(5)Motorola单片机。

5. 什么是总线?单片机中的总线有哪几种?答:总线是指从任意一个源点到任意一个终点的一组传输数字信息的公共通道。

单片机中总线包括地址总线、数据总线和控制总线三种。

6. 简述单片机中位和字节的概念。

答:一个二进制数叫1位,相邻的8位二进制数构成一个字节。

7.存储地址的作用是什么?答:存储地址用来定义每个存储单元,以供CPU寻址、操作。

第2章思考与练习1. AT89C51单片机的内部ROM 和RAM分别是多大空间?最多可扩展多少空间?答:分别是4KB和128B,ROM最多可扩展60KB,RAM最多可扩展64KB。

2. AT89C51单片机有哪几个中断源?答:有3个内部中断源和2个外部中断源。

3. 画出MCS-51单片机的复位电路原理图,包括上电复位和手动复位功能,并根据参数计算上电复位时高电平的持续时间。

答:复位电路原理图如下图所示。

单片机除法指令

单片机除法指令

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

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

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

以下是一些常见的单片机架构及其对应的除法指令: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位的范围。

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

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

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

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

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

对dsPIC系列单片机C语言编程中乘除法计算的编程感悟

对dsPIC系列单片机C语言编程中乘除法计算的编程感悟

对dsPIC系列单⽚机C语⾔编程中乘除法计算的编程感悟个⼈使⽤单⽚机有些时间了,尤其是在这个快速变化的时代,数字编程已经是⼯科⽣必备的素养了。

虽然说单⽚机现在也⽀持C语⾔编程了,但是和计算机的C语⾔编程也存在⼀些差异,尤其是在进⾏数据乘除法计算的时候。

有些单⽚机不⼀定使⽤的标准C语⾔编译器,请注意不同单⽚机的编程风格,具体请单⽚机从以前的汇编,逐渐⽀持C语⾔编译器,但是可能⽀持部分C语⾔,不⼀定是标准的C语⾔编译器。

以dsPIC单⽚机为例,以下有两种C语⾔除法编程风格:uint16_t a;uint16_t temp;uint16_t b;//example 1:标准C语⾔编译器的除法b = (a << 10)/1023;//example 2: dsPIC 单⽚机⽀持的乘法与除法temp = __builtin_muluu(a,1024);b = __builtini_divud(temp,1023);上⾯两种写法,第⼀种计算结果是正确的,只有第⼆种写法在dsPIC单⽚机上才能得到正常的结果。

根本的原因在于编译器对整形乘除数据,处理⽅式不⼀样。

以下有两种C语⾔乘法编程风格:uint16_t a;uint16_t b;long c;long d;a = 32676;b = 32676;//example 1: 标准C语⾔的⽆符号整数乘法c = a * b;//example 2: dsPIC内部⾃带的⽆符号整数乘法d = __builtin_muluu(a,b);uint16_t a;uint16_t b;long c;long d;a = 256;b = 256;//example 3: 标准C语⾔的⽆符号整数乘法c = a * b;//example 4: dsPIC内部⾃带的⽆符号整数乘法d = __builtin_muluu(a,b);上⾯两种写法,第⼀种计算的结果是错误的,第⼆种计算的结果是正确的。

PIC24F单片机CPU使用说明

PIC24F单片机CPU使用说明

© 2007 Microchip Technology Inc.超前信息DS39703A_CN 第2-1页CPU2第2章 CPU目录本章包括下列主题:2.1简介 ...............................................................................................................................2-22.2编程模型 ........................................................................................................................2-42.3软件堆栈指针 ................................................................................................................2-72.4CPU 寄存器说明 .........................................................................................................2-102.5算术逻辑单元(ALU ) ................................................................................................2-132.6乘法和除法支持 ...........................................................................................................2-142.7编译器友好架构 ...........................................................................................................2-172.8多位移位支持 ..............................................................................................................2-172.9指令流类型 ..................................................................................................................2-182.10程序流循环控制 ...........................................................................................................2-202.11地址寄存器相依性 .......................................................................................................2-222.12寄存器映射 ..................................................................................................................2-252.13相关应用笔记 ..............................................................................................................2-262.14版本历史 ......................................................................................................................2-27PIC24F系列参考手册2.1简介PIC24F CPU模块采用16位(数据)改良的哈佛架构,并带有增强型指令集。

pic单片机数学运算

pic单片机数学运算

pic单片机数学运算
PIC单片机是一种常见的微控制器,常用于嵌入式系统中。

在PIC单片机中进行数学运算通常涉及到整数运算和浮点数运算两种
情况。

对于整数运算,PIC单片机通常使用移位运算、加法、减法、
乘法和除法等基本运算来进行数学运算。

移位运算可以实现乘法和
除法的快速运算,加法和减法操作可以直接使用单片机的加法器和
减法器来完成。

对于大数乘法和除法运算,通常需要使用软件算法
来实现,因为PIC单片机的位宽有限,需要对数据进行分解和处理。

对于浮点数运算,PIC单片机通常需要借助软件库来实现,因
为PIC单片机本身并不直接支持浮点数运算。

软件库中通常包含了
浮点数的加减乘除、开方、对数、指数等数学函数,可以帮助程序
员在PIC单片机中进行复杂的浮点数运算。

除了基本的数学运算外,PIC单片机还可以通过外部扩展模块
来实现更复杂的数学运算,比如使用外部的数学协处理器或者FPGA
来加速数学运算的处理速度。

总的来说,PIC单片机可以进行基本的整数运算和借助软件库实现浮点数运算,同时也可以通过外部扩展模块来实现更复杂的数学运算。

在实际应用中,需要根据具体的需求和PIC单片机的性能来选择合适的数学运算方法和工具。

单片机无符号整形除法溢出

单片机无符号整形除法溢出

单片机无符号整形除法溢出单片机无符号整形除法溢出是一种常见的编程错误,它发生在执行除法操作时,当除数不能被被除数整除时。

在无符号整形数中,这种溢出会导致结果不正确,甚至可能导致程序崩溃。

下面将详细介绍单片机无符号整形除法溢出的原因、影响以及如何避免这种错误。

一、原因1. 除数溢出:当被除数过大,而除数过小,导致无法整除时,就会发生溢出。

例如,一个无符号整形数最大为65535,如果用一个较小的数去除它,就会发生溢出。

2. 除数和被除数不匹配:在执行除法操作时,如果被除数和除数的位数不匹配,也可能导致溢出。

例如,用一个16位无符号整形数去除一个32位无符号整形数,由于位数不匹配,可能会导致溢出。

二、影响1. 结果错误:由于溢出导致结果不正确,程序可能会产生错误的结果。

2. 程序崩溃:如果溢出严重,可能会导致程序崩溃,无法正常运行。

3. 系统稳定性:溢出问题可能会影响系统的稳定性,导致系统出现异常。

三、避免方法1. 检查除数和被除数:在执行除法操作之前,应该检查除数和被除数的位数是否匹配,以及是否有可能导致溢出。

2. 使用有符号整形数:在需要执行除法操作时,可以考虑使用有符号整形数代替无符号整形数。

有符号整形数的范围更大,可以避免因溢出而导致的问题。

3. 使用取模操作:在执行除法操作之前,可以先将被除数取模,以避免溢出。

例如,如果被除数是n,除数是m,可以先将n取模m,然后再进行除法操作。

这样可以确保结果在m的范围内,避免溢出。

4. 使用库函数:许多编程语言提供了库函数来执行除法操作,这些函数通常会处理溢出问题。

因此,在执行除法操作时,可以考虑使用这些库函数来避免溢出问题。

5. 增加溢出检测:在执行除法操作时,可以增加溢出检测机制。

如果检测到溢出,可以采取相应的措施来处理溢出问题,例如抛出异常或返回错误码等。

6. 调整数据类型:根据实际需求调整数据类型的大小和范围,以避免因数据类型不匹配而导致的问题。

单片机C语言快速精度除法方案

单片机C语言快速精度除法方案

单片机C语言快速精度除法方案目前的51单片机在进行带小数点结果的除法一般可以采用浮点数计算的方式,但是浮点数计算有一个缺点就是非常耗时,在对时间要求严格的工况就不太适用。

笔者的工作室长期承接单片机、电路、机电液、工控、自动化、计算机软件等项目,最近做了个单片机计算器的设计,在设计除法时利用长整形除法和取余运算,可以得到若干小数位的精度运算,与大家共享。

设计思路如下:假设长整形除数a, 长整形被数b,步骤如下:;得到除法的整数部分,c=a/b;;设d为a%b,e=10*d,得到除法的第一位小数,f=e/b;(要点:将a余b的余数乘以10倍,再和被除数b相除,就得到小数点后一位小数);设g为e%b,h=10*g,得到除法的第二位小数,i=h/b;以此类推,可以得到除法的任意小数&hellip;&hellip; /**********************************下面附上C语言程序**********************************************************/unsigned long result, result_p;//表示除法结果的整数和小数部分// result_p是小数部分,例如result_p=12345678,表示0.12345678Void chufa(unsigned long chushu, unsigned long beichushu, unsigned char wei)// wei表示精确到小数点后多少位{ unsigned char i;unsigned long tmp;result=result_p=0;if (beichushu!=0)//被除数必须不为0{if (wei==0){result=chushu/beichushu;//计算整数部分result_p=0;}else{result=chushu/beichushu;//计算整数部分tmp=chushu%beichushu;for (i=1;i<=wei;i++)//计算小数部分{tmp=tmp*10;result_p=result_p*10+tmp/beichushu; tmp=tmp%beichushu;}}}。

PIC单片机运算子程序(2)

PIC单片机运算子程序(2)

PIC单片机运算子程序(2)4.2 3字节浮点数转换为定点整数子程序的转换结果将采用补码表示。

其转换数值范围:-32768~32767,入口条件和出口条件如下:入口条件:ACCBHI、ACCBLO、EXPB出口条件:ACCBHI、ACCBLO以下为子程序的清单。

由于程序所需调用的子程序和所需通用寄存器单元地址和定点数转换为浮点数子程序相同,在此省略。

使用时,将前面介绍的子程序拷入此处即可。

FtoD CLRF SIGN ;清结果符号寄存器MOVF ACCBHI,0BTFSS ACCBHI,7 ;被转换数是否为负?GOTO D1BSF SIGN,7 ;是,SIGN.7置1CALL NEG_B ;被转换数取补D1 BTFSS EXPB,7 ;被转换数为正,再判阶码为负否?GOTO D2CLRF ACCBHI ;为负,被转换数小于1,无法用定点数表示CLRF ACCBLORETLW 0D2 MOVLW .16 ;被转换数阶码减16(十进制数)SUBWF EXPB,0BTFSS STATUS,C ;阶码小于16?GOTO D3MOVLW 0XFF ;阶码大于等于16,置ACCB为最大,返回MOVWF ACCBHIMOVWF ACCBLORETLW 01D3 CALL FTOW3 ;调用子程序将浮点数转换为定点数BTFSC SIGN,7 ;定点数为负?CALL NEG_B ;是,取补RETLW 0 ;否,返回;**************************************** FTOW3 MOVLW .15 ;EXPB=15(十进制数)?SUBWF EXPB,0BTFSC STATUS,ZRETLW 0 ;是,返回BCF STATUS,C ;否,ACCB继续右移,EXPB加1 RRF ACCBHIRRF ACCBLOINCF EXPBGOTO FTOW3 ;重新判断EXPB=15?【校验举例1】 19531(十进制)化为十六进制数:4C4B0FH结果:4C4BH【校验举例2】 2622(十进制)化为十六进制数:51F00CH结果:0A3EH【例程】MAIN MOVLW 0X4B ;被转换数4C4BH送ACCB MOVWF ACCBLOMOVLW 0X4CMOVWF ACCBHIMOVLW 0X0FMOVWF EXPBCALL FtoD ;调用定点数至浮点数转换子程序END5 码制转换程序设计5.1 双字节定点数至5位BCD码转换程序入口条件:ACCBHI、ACCBLO出口条件:ACCCHI低半字节、ACCCLO、ACCDHI 以下为双字节定点数至5位BCD码转换程序清单。

pic单片机32位除法

pic单片机32位除法

pic单片机32位除法pic单片机是一种常用的32位单片机,其具有高性能和强大的计算能力。

在pic单片机中,除法是一项常见的运算操作。

本文将探讨pic单片机32位除法的原理和实现方式。

我们需要了解32位除法的基本原理。

除法是一种数学运算,用于将一个数(被除数)除以另一个数(除数),得到商和余数。

在32位除法中,被除数和除数都是32位的二进制数。

在pic单片机中,除法操作可以通过软件算法或硬件模块来实现。

软件算法是通过编写程序来进行除法运算,而硬件模块则是通过专门的电路来实现除法运算。

对于软件算法来说,一种常见的方法是使用循环来逐位进行除法运算。

具体步骤如下:1. 将被除数和除数加载到寄存器中。

2. 将商寄存器清零。

3. 从高位开始,逐位进行除法运算,直到最低位。

4. 每次运算中,将被除数左移一位,并与除数进行比较。

5. 如果被除数大于或等于除数,则将商寄存器的对应位设置为1,并将被除数减去除数。

6. 如果被除数小于除数,则将商寄存器的对应位设置为0。

7. 重复步骤4至6,直到所有位都计算完毕。

8. 最后得到的商就是除法的结果。

这种软件算法的实现简单,但运算速度相对较慢。

如果需要进行大量的除法运算,可能会影响系统的性能。

因此,在一些对性能要求较高的应用中,可以使用硬件模块来实现32位除法运算。

pic单片机中的硬件模块通常是由专门的除法器实现的。

这种除法器可以通过硬件电路来进行除法运算,具有快速、高效的特点。

在进行除法运算时,只需要将被除数和除数输入到除法器中,然后通过特定的指令来触发除法运算。

除法器会自动完成除法运算,并将结果存储在指定的寄存器中。

pic单片机的32位除法器通常具有高精度和高速度的特点,可以满足各种应用的需求。

除法器的性能主要取决于硬件电路的设计和实现方式。

一些高端的pic单片机还可以支持并行计算和流水线技术,进一步提高除法运算的效率。

总结起来,pic单片机32位除法是一项常见的运算操作,可以通过软件算法或硬件模块来实现。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

单片机C语言快速精度除法方案

单片机C语言快速精度除法方案

单片机C语言快速精度除法方案单片机C语言快速精度除法方案目前的51单片机在进行带小数点结果的除法一般可以采用浮点数计算的方式,但是浮点数计算有一个缺点就是非常耗时,在对时间要求严格的工况就不太适用。

笔者的工作室长期承接单片机、电路、机电液、工控、自动化、计算机软件等项目,最近做了个单片机计算器的设计,在设计除法时利用长整形除法和取余运算,可以得到若干小数位的精度运算,与大家共享。

设计思路如下:假设长整形除数a, 长整形被数b,步骤如下:<1>得到除法的整数部分,c=a/b;<2>设d为a%b,e=10*d,得到除法的第一位小数,f=e/b;(要点:将a余b的余数乘以10倍,再和被除数b相除,就得到小数点后一位小数)<3>设g为e%b,h=10*g,得到除法的第二位小数,i=h/b;以此类推,可以得到除法的任意小数……/**********************************下面附上C语言程序**********************************************************/unsigned long result, result_p;//表示除法结果的整数和小数部分// result_p是小数部分,例如result_p=12345678,表示0.123 45678Void chufa(unsigned long chushu, unsigned long beichushu, unsigned char wei)// wei表示精确到小数点后多少位{ unsigned char i;unsigned long tmp;result=result_p=0;if (beichushu!=0)//被除数必须不为0 {if (wei==0){result=chushu/beichushu;//计算整数部分result_p=0;}else{result=chushu/beichushu;//计算整数部分tmp=chushu%beichushu;for (i=1;i<=wei;i++)//计算小数部分{tmp=tmp*10;result_p=result_p*10+tmp/beichushu; tmp=tmp%beichushu;}}}。

PIC中档单片机的无符号长整型数除以无符号字符型的除法程序

PIC中档单片机的无符号长整型数除以无符号字符型的除法程序
rlf _lc_div+1,f
rlf _lc_div+2,f
rlf _lc_div+3,f
rlf _lc_div+4,f
rlf _lc_div+5,f
rlf _lc_div+6,f
movf _lc_div+7,w//用TMP的低位和除数比较,结果先放在W中
subwf _lc_div+5,w
btfsc 0x3,0;//查看借位标志,有就跳。这里要注意,因为减法的进位标志是反的,所以为0就跳
#asm//使用汇编以提高效率
lcdiv0:
decfsz lcdiv@i,f//这句相当于while(--i)
goto lcdiv1
return
lcdiv1:
bcf 0x3,0//清空C寄存器
rlf _lc_div,f//把共用体的前7字节左移1位,目的是把被除数的最高位移到TMP中,顺便把商也左移
{
volatile unsigned char i;//循环次数,如果不加volatile关键字则会被编译器优化掉,造成后边的变量寻址找不到,导致编译失败
lc_div.sj.tmp=0;//变量初始化,主要是防止上一次计算的数据影响本次计算
i=33;//共循环32次,12F683有DECFSZ指令,所以赋值33
unsigned int tmp; //2字节,临时变量
unsigned char cs; //1字节,除数
}sj; //数据,在计算前使用,只用填写被除数BCS(无符号长整型)和除数CS(无符号字符型)
struct
{
unsigned long s;
unsigned char ;

PIC指令详解

PIC指令详解

中档PIC单片机汇编指令详解-----老罗整理NOP 空操作指令语法形式:NOP操作数:无执行时间:一个指令周期执行过程:除了消耗一个指令周期之外,无任何其他影响,所以通常被用来作为延时使用状态标志影响:无说明:指令操作没有任何操作数参与,也不影响任何寄存器的内容和状态,所以通常都是被作为延时使用的。

指令范例:BSF PORTB,0 ;PORTB的第0位输出高电平(1)NOP ;延时,使电平稳定MOVWF 将W寄存器的内容传送到数据寄存器语法形式:MOVWF f操作数:f为数据寄存器的低7位地址(0x00~0x7F)执行时间:一个指令周期执行过程:把W寄存器的内容传送到f数据寄存器,W寄存器的内容保持不变,类似于Copy状态标志影响:无说明:该指令是对数据寄存器赋值的主要方式指令范例:MOVLW 0x55 ;W寄存器赋值MOVWF Data ;W寄存器值传送给Data;此时Data=0x55CLRW W寄存器内容清0语法形式:CLRW操作数:无执行时间:一个指令周期执行过程:0x00→W1→Z状态标志影响:Z说明:该指令对W寄存器内容清零,并置位0标志Z另外使用MOVLW 0x00也可以使W寄存器内容为0,但是这条指令不影响0标志Z 指令范例:CLRW ;W=0,Z=1CLRF 数据寄存器内容清零语法形式:CLRF f操作数:f为数据寄存器的低7位地址(0x00~0x7F)执行时间:一个指令周期执行过程:0x00→f1→Z状态标志影响:Z说明:指令对数据寄存器清零,并置位0标志Z指令范例:CLRF TRISB ;端口B所有I/O引脚设为输出SUBWF 将数据寄存器的内容减去W寄存器内容语法形式:SUBWF f,d操作数:f为数据寄存器的低7位地址(0x00~0x7F)d为目的寄存器的低7位地址(0x00~0x7F)当d=f时,结果放在f数据寄存器,W寄存器内容不变当d=W时,结果放在W寄存器中,数据寄存器f内容不变执行时间:一个指令周期执行过程:【f】-【W】→d状态标志影响:Z DC C说明:要特别注意W寄存器在这条指令中是减数当【f】=【W】时,相减的结果为0,则Z=1当【f】>【W】时,没有借位发生,则C=1当【f】<【W】时,有借位发生,则C=0实际上在PIC单片机中这条指令是通过先对W寄存器的内容求补码,然后与被减数相加,所以在判断是否有借位时和其他单片机不同,请注意指令范例:MOVLW 0x23 ;W=0x23MOVWF tmp ;tmp=0x23MOVLW 0x32 ;W=0x32SUBWF tmp,W ;tmp-W将结果存入W中,W=0xF1,tmp=0x23;过程:tmp=0x23,W求补码为0xCD,所以0x23+0xCD=0xF1,又因tmp<W,所以C=0DECF 数据寄存器的内容递减1语法形式:DECF f,d操作数:f为数据寄存器的低7位地址(0x00~0x7F)d为目的寄存器的低7位地址(0x00~0x7F)当d=f时,结果放在f数据寄存器,f数据寄存器自减1当d=W时,结果放在W寄存器中,W寄存器内容自减1执行时间:一个指令周期执行过程:【f】-1→d状态标志影响:Z说明:该指令对数据寄存器的内容做减1运算。

单片机C语言快速精度除法方案

单片机C语言快速精度除法方案

单片机C语言快速精度除法方案单片机中进行除法操作时,可以采用多种方法来提高运算速度和精度。

下面介绍一种利用查表法来实现快速精度除法的方案。

在单片机中,由于乘法运算相对于除法来说速度更快,我们可以通过将除数乘以一些系数,将除法转换为乘法来实现快速运算。

假设要进行a/b的除法运算,其中a为被除数,b为除数。

首先确定一个系数k,将除数b乘以k,得到乘积c=k*b,然后再进行a/c的除法运算。

为了提高运算精度,我们可以利用查表法来获得除数的系数k。

假设查表法已经得到了一个包含n个元素的查找表,每个元素的索引值为i,对应的值为ki。

查找表中的元素可以通过预先计算或使用数学方法获得。

下面介绍利用查表法进行快速精度除法的步骤:1.根据所需精度选择或生成一个包含n个元素的查找表。

2. 将除数b拆分为整数部分和小数部分,例如b = b_int + b_frac。

3. 根据整数部分b_int在查找表中查找对应的系数ki,记为ki_int。

4. 将小数部分b_frac乘以系数ki_int得到乘积c_frac = b_frac* ki_int。

5. 将被除数a拆分为整数部分和小数部分,例如a = a_int +a_frac。

6. 将整数部分a_int进行正常除法运算,得到商q_int。

7. 将小数部分a_frac和c_frac进行除法运算,得到商q_frac。

8. 将商q_int和q_frac合并得到最终结果q。

通过将除法转换为乘法和查表操作,可以实现快速且精度较高的除法运算。

这种方法在处理对除法运算精度要求较高的场景中特别有效,可以大大提高单片机的计算效率。

需要注意的是,在选择或生成查找表时,应该根据具体的应用需求来确定表的大小和精度级别。

过小的查找表可能导致运算精度不够,而过大的查找表则会占用过多的存储空间。

因此,在设计中需要权衡计算速度和存储空间的使用。

此外,还可以通过并行计算、硬件加速等方法来进一步提高除法运算的速度和精度。

pic单片机应用开发典型模块第八章程序

pic单片机应用开发典型模块第八章程序

(1)16×16位定点数加、减法程序LISTp=16f877INCLUDE p16f877.incACCALO EQU 20 ;存放加数或减数低8位ACCAHI EQU 21 ;存放加数或减数高8位ACCBLO EQU 23 ;存放被加数或被减数低8位ACCBHI EQU 24 ;存放被加数或被减数高8位ORG 0X0000START GOTO MAIN;***双字节减法子程序,入口地址ACCB-ACCA,出口地址ACCB***D_sub CALL NEG_A ;求ACCA的补码;双字节加法子程序,入口地址ACCB+ACCA,出口地址ACCBD_add MOVF ACCALO,0 ;ACCB和ACCA低半字节相加ADDWF ACCBLOBTFSC STATUS, C ;有进位否?INCF ACCBHI ;有,ACCB高字节加1,再加ACCAHIMOVF ACCAHI,0 ;ACCA、ACCB高半字节相加ADDWF ACCBHIRETURN ;子程序返回;ACCA取补子程序NEG_A COMF ACCALO ;ACCALO取反加1INCF ACCALOBTFSC STATUS,Z ;低8位有进位吗?DECF ACCAHI ;有,ACCAHI减1,再取反COMF ACCAHI ;否则ACCAHI直接取反RETURN ;子程序返回(2)16×16位定点数乘法程序LIST p=16f877INCLUDE p16f877.incACCALO EQU 20 ;存放乘数低8位ACCAHI EQU 21 ;存放乘数高8位ACCBLO EQU 23 ;存放被乘数低8位和乘积第16~23位ACCBHI EQU 24 ;存放被乘数高8位和乘积第24~31位ACCCLO EQU 26 ;存放乘积低8位ACCCHI EQU 27 ;存放乘积高8位ACCDLO EQU 28 ;临时寄存器ACCDHI EQU 29 ;临时寄存器TEMP EQU 2A ;临时寄存器SIGN EQU 2B ;存放乘积的符号ORG 0X0000START GOTO MAINORG 0X0100D_mpy CALL S_SIGN ;求取乘积的符号,并对负数取补CALL SETUP ;调用子程序,将ACCB的值送ACCDINCF TEMPCLRF ACCCHI ;清ACCCCLRF ACCCLOMLOOP BCF STATUS,C ;清进位位RRF ACCDHI ;ACCD右移RRF ACCDLOBTFSC STATUS,C ;判断是否需要相加CALL D_add ;加乘数至ACCB,见加法程序BCF STATUS,C ;清进位位RRF ACCBHI ;右移部分乘积RRF ACCBLORRF ACCCHIRRF ACCCLODECFSZ TEMP ;乘法完成否?GOTO MLOOP ;否,继续求乘积BTFSS SIGN,7 ;是,确定乘积的符号GOTO OVER ;为正,乘法结束COMF ACCCLO ;为负,乘积取补INCF ACCCLOBTFSC STATUS,ZDECF ACCCHICOMF ACCCHIBTFSC STATUS,ZNEG_B DECF ACCBLOCOMF ACCBLOBTFSC STATUS,ZDECF ACCBHICOMF ACCBHIOVER RETURN ;子程序返回SETUP MOVLW 15 ;初始化TEMP寄存器MOVWF TEMPMOVF ACCBHI,0 ;ACCB送ACCDMOVWF ACCDHIMOVF ACCBLO,0MOVWF ACCDLOCLRF ACCBHI ;清ACCBCLRF ACCBLORETURN ;子程序返回S_SIGN MOVF ACCAHI,0 ;ACCAHI异或ACCBHI,结果送SIGN单元XORWF ACCBHI,0MOVWF SIGNBTFSS ACCBHI,7 ;ACCB为负吗?GOTO CHEK_A ;否,检查ACCACALL NEG_B ;是,求取ACCB绝对值CHEK_A BTFSC ACCAHI,7 ;ACCA为负吗?CALL NEG_A ;ACCA为负,求取ACCA绝对值,RETURN ;ACCA和ACCB均为正,返回(3)16×16位定点数除法程序LIST p=16f877INCLUDE p16f877.incACCALO EQU 20 ;存放除数低8位ACCAHI EQU 21 ;存放除数高8位ACCBLO EQU 22 ;存放被除数和商的低8位ACCBHI EQU 23 ;存放被除数和商的高8位ACCCLO EQU 24 ;存放余数低8位ACCCHI EQU 25 ;存放余数高8位ACCDLO EQU 26 ;临时寄存器ACCDHI EQU 27 ;临时寄存器TEMP EQU 28 ;临时寄存器SIGN EQU 29 ;存放商的符号ORG 0X0000START GOTO MAINORG 0X0100D_div CALL S_SIGN ;确定商的符号,并将负数取补CALL SETUP ;初始化TEMP,将被除数移至ACCD INCF TEMPCLRF ACCCHI ;清余数寄存器CLRF ACCCLODLOOP BCF STATUS,C ;清进位位RLF ACCDLO ;被除数、余数左移1位RLF ACCDHIRLF ACCCLORLF ACCCHIMOVF ACCAHI,0 ;ACCCHI-ACCAHISUBWF ACCCHI,0BTFSS STATUS,Z ;ACCCHI=ACCAHI?GOTO NOCHKMOVF ACCALO,0 ;是,ACCCLO-ACCALOSUBWF ACCCLO,0NOCHK BTFSS STATUS,C ;ACCC>ACCA?GOTO NOGOMOVF ACCALO,0 ;是,余数减除数SUBWF ACCCLOBTFSS STATUS,CDECF ACCCHISUBWF ACCCHIBSF STATUS,C ;置进位位NOGO RLF ACCBLO ;商左移1位RLF ACCBHIDECFSZ TEMP ;循环完毕?GOTO DLOOPBTFSS SIGN,7 ;是,确定商的符号GOTO DIVOVER ;为正,除法结束,跳转到结束行COMF ACCCLO ;为负,商和余数分别取补INCF ACCCLOBTFSC STATUS,ZDECF ACCCHICOMF ACCCHICALL NEG_B ;见乘法程序中间NEG_BDIVOVER RETURN ;子程序返回S_SIGN MOVF ACCAHI,0 ;ACCAHI异或ACCBHI,结果送SIGN单元XORWF ACCBHI,0MOVWF SIGNBTFSS ACCBHI,7 ;ACCB为负?GOTO CHEK_A ;否,检查ACCACOMF ACCBLO ;是,ACCB取补BTFSC STATUS,ZDECF ACCBHICOMF ACCBHICHEK_A BTFSC ACCAHI,7 ;ACCA为负?CALL NEG_A ;ACCA为负,取补(NEG_A子程序请参见;16×16位定点数乘法子程序NEG_A)RETURN ;ACCA和ACCB均为负,返回(4)浮点数加减法程序LIST p=16f877INCLUDE p16f877.incACCALO EQU 20 ;存放加数或减数的尾数ACCAHI EQU 21EXPA EQU 22 ;存放加数或减数阶码ACCBLO EQU 23 ;存放被加数或被减数尾数以及和或差ACCBHI EQU 24EXPB EQU 25 ;存放被加数或被减数阶码ACCCLO EQU 26 ;临时寄存器ACCCHI EQU 27 ;临时寄存器ACCDLO EQU 28 ;临时寄存器ACCDHI EQU 29 ;临时寄存器TEMP EQU 2A ;临时寄存器TEMP1 EQU 30 ;临时寄存器TIMES EQU 31 ;临时寄存器ORG 0X000START GOTO MAINORG 0X0100F_sub CALL NEG_A ;求ACCA的补码,将减法转换为补码加法F_add CALL SUBADJ ;调子程序判断EXPB和EXPA的大小BTFSC STATUS,Z ;参与运算的两个数阶码相等?GOTO PADD ;是,求尾数的和BTFSC STATUS,C ;EXPB>EXPA?CALL F_swap ;是,ACCB 与ACCA互换MOVF EXPA,0 ;否,求取两者的差值SUBWF EXPBSCLOOP CALL SHFTSR ;ACCB右移规格化INCFSZ EXPB ;EXPB=EXPA?GOTO SCLOOP ;否,继续右移MOVF EXPA,0 ;是,存和(差)的阶码MOVWF EXPBPADD MOVF ACCAHI,0 ;ACCAHI或ACCBHI IORWF ACCBHI,0MOVWF SIGN ;存于SIGN寄存器MOVF ACCBHI,0 ;暂存ACCBHIMOVWF EXPACALL D_add ;尾数相加BTFSS SIGN,7 ;ACCA和ACCB有负数?BTFSC ACCBHI,7 ;否,把和的最高位和次高位同时进位?GOTO ADD2 ;否,转ADD2BTFSS ACCAHI,7 ;ACCA为负吗?GOTO ADD3 ;ACCA和ACCB不同时为负,转ADD3BTFSS EXPA,7 ;是,ACCB为负吗?GOTO ADD3BSF STATUS,C ;ACCA和ACCB同为负,带负号右移RRF ACCBHIRRF ACCBLOINCF EXPBADD3 CLRF ACCCHI ;和(差)规格化CLRF ACCCLOCALL F_normRETURN ;子程序返回ADD2 BCF STATUS,C ;最高位次高位不同时进位,ACCB右移SHFTSR BCF STATUS,C ;ACCB带符号右移子程序BTFSC ACCBHI,7BSF STATUS,CSHFTR RRF ACCBHIRRF ACCBLORETURN ;子程序返回F_swap MOVF ACCAHI,0 ;ACCAHI、ACCBHI互换MOVWF TEMPMOVF ACCBHI,0MOVWF ACCAHIMOVF TEMP,0MOVWF ACCBHIMOVF ACCALO,0 ;ACCALO、ACCBLO互换MOVWF TEMPMOVF ACCBLO,0MOVWF ACCALOMOVF TEMP,0MOVWF ACCBLOMOVF EXPA,0 ;EXPA、EXPB互换MOVWF EXPAMOVF TEMP,0MOVWF EXPBRETURNSUBADJ MOVF EXPA,0 ;EXPA异或EXPB,结果送C_DIVXORWF EXPB,0MOVWF C_DIVMOVF EXPA,0 ;EXPB-EXPASUBWF EXPB,0BTFSS C_DIV,7 ;EXPA和EXPB同号?RETURN ;是,进位位的值真确反映两者的大小,返回BTFSS STATUS,C ;否,进位位的值取反GOTO CHANGECBCF STATUS,CRETURNCHANGEC BSF STATUS,CRETURNF_norm MOVF ACCBHI ;ACCB=0?GOTO C_normMOVF ACCBLOBTFSC STATUS,ZRETURN ;是,不需规格化,返回C_norm BTFSC ACCBHI,7;否。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
void lcdiv(void)//l-长整型,c-字符型,div-除法
{
volatile unsigned char i;//循环次数,如果不加volatile关键字则会被编译器优化掉,造成后边的变量寻址找不到,导致编译失败
lc_div.sj.tmp=0;//变量初始化,主要是防止上一次计算的数据影响本次计算
因为本人不懂英文,所以变量名很乱,请谅解。
源代码如下:
#include<pic.h>
union
{
struct
{
unsigned char sl; //1字节,商的低8位
unsigned long bcs;//4字节,被除数
unsigned int tmp; //2字节,临时变量
unsigned char cs; //1字节,除数
goto lcdiv2
btfss _lc_div+6,0 ;//有借位,那就看TMP的高位是否有借的,有说明TMP比CS大。如果只是做16进制到10进制的转换,这个可以优化掉
goto lcdiv0 ;//跳回去接着进行下一轮
lcdiv2:
movwf _lc_div+5,f//把之前比较的结果送到TMP的低8位
clrf _lc_div+6//清空TMP的高8位。16进制到10进制的转换,这个可以优化掉
incf _lc_div,f//商+1
goto lcdiv0
#endasm
}
void main (void)
{
lc_div.sj.cs=0x01;
while(lc_div.sj.cs++)
{
lc_div.sj.bcs=0x12345678;
}sj; //数据,在计算前使用,只用填写被除数BCS(无符号长整型)和除数CS(无符号字符型)
struct
{
unsigned long s;
unsigned char ;
unsigned char y;
}jg; //结果,计算后取返回值,商S(无符号长整型)和余Y(无符号字符型)
}lc_div;
//之所以用这个数据类型的原因有两个,一是使用全局变量,在运算后只要没有再次运行本//除法程序,结果就一直保存着。二是变量按顺序排列方便计算
i=33;//共循环32次,12F683有DECFSZ指令,所以赋值33
#asm//使用Hale Waihona Puke 编以提高效率lcdiv0:
decfsz lcdiv@i,f//这句相当于while(--i)
goto lcdiv1
return
lcdiv1:
bcf 0x3,0//清空C寄存器
rlf _lc_div,f//把共用体的前7字节左移1位,目的是把被除数的最高位移到TMP中,顺便把商也左移
lcdiv();
}
}
PIC中档单片机的无符号长整型数除以无符号字符型的除法程序
最近在用12F683做一个测量程序,用LCD显示,要用到16进制到10进制的转换。但是12F683没有硬件乘法器,用MPLAB IDE提供的除法程序来做则需要的时间过长,于是就想自己做个程序出来。
本程序占用26个字的ROM,8字节的RAM,占用一级堆栈,计算1次只要640个左右的时钟周期,比编译器提供的程序快一半左右。
rlf _lc_div+1,f
rlf _lc_div+2,f
rlf _lc_div+3,f
rlf _lc_div+4,f
rlf _lc_div+5,f
rlf _lc_div+6,f
movf _lc_div+7,w//用TMP的低位和除数比较,结果先放在W中
subwf _lc_div+5,w
btfsc 0x3,0;//查看借位标志,有就跳。这里要注意,因为减法的进位标志是反的,所以为0就跳
相关文档
最新文档