单片机乘法运算
- 格式:doc
- 大小:37.00 KB
- 文档页数:12
单⽚机浮点数计算在单⽚机应⽤系统的数据处理过程中,经常会遇到⼩数的运算问题,如求解BCD的增量算式、线性化处理等。
因此,需要⽤⼆进制数来表⽰⼩数。
表⽰⼩数的⽅法⼀般有两种,定点数和浮点数。
定点数结构简单,与整数的运算过程相同,运算速度快。
但随着所表⽰数的范围的扩⼤,其位数成倍增加,给运算和存储带来不便,⽽且也不能保证相对精度不变。
浮点数的结构相对复杂,但它能够以固定的字节长度保持相对精度不变,⽤较少的字节表⽰很⼤的数的范围,便于存储和运算,在处理的数据范围较⼤和要求精度较⾼时,采⽤浮点数。
浮点数的概念常⽤的科学计数法来表⽰⼀个⼗进制数如l234.75=1.23475E3=1.23475×103在数据很⼤或很⼩时,采⽤科学计数避免了在有效数字前加0来确定⼩数点的位置,突出了数据的有效数字的位数,简化了数据的表⽰。
可以认为,科学计数法就是⼗进制数的浮点数表⽰⽅法。
在⼆进制效中,也可以⽤类似的⽅法来表⽰⼀个数,如1234.75=0.11(⼆进制)=0.1×211⼀般表达式为N=S×2p在这种表⽰⽅法中,数值由四个部分组成,即尾数S及符号,阶码P及符号。
在⼆进制中,通过定义相应字节或位来表⽰这四部分,就形成了⼆进制浮点数。
⼆进制浮点数可以有多种不同的表⽰⽅法,下⾯是⼀种常见的三字节浮点数的格式:其中尾数占16位,阶码占6位,阶符占1位,数符占1位。
阶码通常⽤补码来表⽰。
在这种表⽰⽅法中,⼩数点的实际位置要由阶码来确定,⽽阶码⼜是可变的,因此称为浮点数。
1234.75⽤这种格式的浮点数表⽰就是:00 1011 1001 10 01 1000⽤⼗六进制表⽰为1234.75=0B9A58H-1234.75=4B9A58H0.171875=043B00H-0.171875=443B00H三字节浮点数所能表⽰的最⼤值为1×263=9.22×1018能表⽰的最⼩数的绝对值为0.5×2-63=5.42×10-20其所表⽰的数的绝对值范围=(5.42×10-20~9.22×1018),由此可以看到,⽐三字节定点数表⽰的数的范围⼤得多。
单片机的简易计算器单片机简易计算器的设计与实现一、引言计算器是一种用于计算数学运算的工具,现在已经成为人们日常生活中必不可少的设备之一、在这个数字化的时代,我们经常需要进行简单的数学运算,如加、减、乘、除等。
为了满足人们的需求,我们可以使用单片机来设计和实现一个简易的计算器。
二、设计目标我们的设计目标是实现一个能够进行基本的加减乘除四则运算的简易计算器。
具体来说,我们希望计算器能够实现以下功能:1.输入两个数字进行计算,并显示结果。
2.支持加法、减法、乘法和除法运算。
3.具备简单的误操作处理能力,如输入错误提示等。
三、设计思路我们将使用8051系列单片机来设计和实现计算器。
具体的设计思路如下:1.使用矩阵键盘作为输入设备,通过扫描矩阵键盘来获取输入的数字和运算符。
2.通过数码管来显示计算结果。
3.使用中断处理器来处理键盘输入和计算结果的显示。
4.根据输入的运算符进行相应的运算,然后将结果显示在数码管上。
四、硬件设计1.选择合适的单片机,如STC89C52,AT89S52等,它们都是基于8051核心的单片机。
2.连接矩阵键盘到单片机的IO口,通过矩阵键盘的扫描来获取输入的数字和运算符。
3.连接数码管到单片机的IO口,用于显示计算结果。
五、软件设计1.在主程序中初始化单片机的IO端口和中断向量。
2.编写中断服务程序,用于处理键盘输入和计算结果的显示。
3.设计一个状态机来处理键盘输入和计算结果的显示。
4.根据状态机的状态来进行相应的运算和显示。
六、实现步骤1.编写主程序,包括对IO口和中断向量的初始化。
2.编写中断服务程序,用于处理键盘输入和计算结果的显示。
3.设计一个状态机,并实现状态机的状态转换和运算结果的计算。
4.测试并调试系统,确保计算结果的准确性。
七、总结通过使用单片机,我们成功地设计并实现了一个简易的计算器。
这个计算器不仅能够进行基本的加减乘除四则运算,还具备了简单的误操作处理能力。
在实际使用中,我们可以通过添加更多的功能和改进设计来进一步完善这个简易计算器。
C51单片机位操作方法[日期:2010-10-21 ] [来源:本站原创作者:佚名] [字体:大中小] (投递新闻)C51对位的操控能力是非常强大的。
从这一点上,就可以看出C不光具有高级语言的灵活性,又有低级语言贴近硬件的特点。
这也是在各个领域中都可以看到C的重要原因。
在这一节中将详细讲解C51中的位操作及其应用。
1、位运算符C51提供了几种位操作符,如下表所示:运算符含义运算符含义&按位与~取反|按位或<<左移^按位异或>>右移1)“按位与”运算符(&)参加运算的两个数据,按二进位进行“与”运算。
原则是全1为1,有0为0,即:0&0=0; 0&1=0; 1&0=0; 1&1=1;如下例:a=5&3; //a=(0b 0101) & (0b 0011) =0b 0001 =1那么如果参加运算的两个数为负数,又该如何算呢?会以其补码形式表示的二进制数来进行与运算。
a=-5&-3; //a=(0b 1011) & (0b1101) =0b 1001 =-7在实际的应用中与操作经常被用于实现特定的功能:1.清零“按位与”通常被用来使变量中的某一位清零。
如下例:a=0xfe; //a=0b 11111110a=a&0x55;//使变量a的第1位、第3位、第5位、第7位清零a= 0b 01010100 2.检测位要知道一个变量中某一位是‘1’还是‘0’,可以使用与操作来实现。
a=0xf5; //a=0b 11110101result=a&0x08; //检测a的第三位,result=03.保留变量的某一位要屏蔽某一个变量的其它位,而保留某些位,也可以使用与操作来实现。
a=0x55; //a=0b 01010101a=a&0x0f; //将高四位清零,而保留低四位a=0x052)“按位或”运算符(|)参与或操作的两个位,只要有一个为‘1’,则结果为‘1’。
单片机实践简易计算器实验报告本次实验的目的是通过单片机实现一个简易计算器,实现加减乘除四则运算。
在实验过程中,我们使用了STC89C52单片机,通过编写程序实现计算器的功能。
实验步骤:1. 确定硬件电路连接我们需要确定硬件电路连接。
本次实验使用的是STC89C52单片机,需要将其与LCD1602液晶屏、4x4矩阵键盘、蜂鸣器等硬件连接。
具体连接方式如下:STC89C52单片机:P0口:连接LCD1602液晶屏的数据线D0-D7P1口:连接LCD1602液晶屏的控制线RS、RW、EP2口:连接4x4矩阵键盘的行线R1-R4P3口:连接4x4矩阵键盘的列线C1-C4P4口:连接蜂鸣器2. 编写程序接下来,我们需要编写程序实现计算器的功能。
程序主要分为以下几个部分:(1)LCD1602液晶屏初始化(2)4x4矩阵键盘扫描(3)计算器功能实现(4)LCD1602液晶屏显示结果3. 调试程序编写完程序后,我们需要进行调试。
在调试过程中,我们需要注意以下几点:(1)检查硬件连接是否正确(2)检查程序是否有语法错误(3)检查程序是否能够正常运行4. 实验结果经过调试,我们成功实现了一个简易计算器。
在使用过程中,用户可以通过4x4矩阵键盘输入数字和运算符,计算器会自动进行计算,并在LCD1602液晶屏上显示结果。
同时,计算器还具有清零、退格等功能,方便用户进行操作。
总结:通过本次实验,我们学习了单片机的基本原理和编程方法,掌握了如何使用单片机实现一个简易计算器。
同时,我们还学习了如何进行硬件电路连接和程序调试,提高了我们的实践能力和动手能力。
单片机中的浮点乘法运算方法
段国丽;张晓东
【期刊名称】《江汉大学学报(社会科学版)》
【年(卷),期】2001(018)006
【摘要】以MCS-96系列单片机为例,介绍了浮点乘法运算原理,详细阐述了8098单片机三字节浮点乘法运算的设计方法及编程要领.
【总页数】5页(P78-82)
【作者】段国丽;张晓东
【作者单位】江汉大学,数学及计算机系,武汉,430019;江汉大学,数学及计算机系,武汉,430019
【正文语种】中文
【中图分类】TP342.22
【相关文献】
1.双字长浮点乘法运算算法设计与分析 [J], 骆志刚;黄旭慧
2.浮点多字节重叠扫描乘法运算方法 [J], 陈宇;王遵立
3.利用重叠扫描方法改进单片机乘法运算 [J], 王遵立;蔡泉;陈宇;毕淑艳;金圣经
4.单片机中的浮点乘法运算方法 [J], 段国丽; 张晓东
5.MCS-51单片微型机上实现的快速扫描浮点乘法运算 [J], 陈宇;王遵立
因版权原因,仅展示原文概要,查看原文内容请购买。
单片机多字节加减乘除法程序文章长度[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时判为不够减,其余情况均视为够减。
引言概述:单片机指令是嵌入式系统设计中至关重要的一部分,它们定义了单片机的功能和操作。
本文是单片机指令大全系列的第二部分,旨在提供更多全面的单片机指令信息,帮助读者更好地理解和应用单片机指令。
正文内容:一、移位指令1.逻辑左移指令:将操作数的每一位向左移动一位,并且最低位填充0。
2.逻辑右移指令:将操作数的每一位向右移动一位,并且最高位填充0。
3.算术右移指令:将操作数的每一位向右移动一位,并且最高位保持不变。
4.循环左移指令:将操作数的每一位向左循环移动一位,即最高位移动到最低位。
5.循环右移指令:将操作数的每一位向右循环移动一位,即最低位移动到最高位。
二、逻辑运算指令1.逻辑与指令:对操作数进行逻辑与运算,将两个二进制数对应位上的值进行逻辑与操作。
2.逻辑或指令:对操作数进行逻辑或运算,将两个二进制数对应位上的值进行逻辑或操作。
3.逻辑非指令:对操作数进行逻辑非运算,将二进制数的每一位取反。
4.逻辑异或指令:对操作数进行逻辑异或运算,将两个二进制数对应位上的值进行逻辑异或操作。
5.逻辑移位指令:将操作数进行逻辑左移或右移。
三、算术运算指令1.加法指令:对操作数进行加法运算,并将运算结果保存到指定的寄存器或存储器中。
2.减法指令:对操作数进行减法运算,并将运算结果保存到指定的寄存器或存储器中。
3.乘法指令:对操作数进行乘法运算,并将运算结果保存到指定的寄存器或存储器中。
4.除法指令:对操作数进行除法运算,并将运算结果保存到指定的寄存器或存储器中。
5.移位指令:对操作数进行移位运算,包括算术左移、算术右移、循环左移和循环右移。
四、输入输出指令1.读取输入指令:从指定的输入设备读取数据,并将数据保存到指定的寄存器或存储器中。
2.输出显示指令:将指定的数据从寄存器或存储器中读取,并显示到指定的输出设备上。
3.端口输入指令:从指定的端口读取数据,并将数据保存到指定的寄存器或存储器中。
4.端口输出指令:将指定的数据从寄存器或存储器中读取,并输出到指定的端口上。
51单片机汇编指令总结数据传输指令一.片内ram数据传输指令1.以累加器a为目的操作数的指令:mova,rnmova,directmova,@rimova,#data2.以寄存器rn为目的操作数的指令:movrn,amovrn,directmovrn,data3.以轻易地址为目的操作数的指令:movdirect,amovdirect,rnmovdirect1,derect2movdirect,@rimovdirect,#data4.间接地址为目的操作数的指令:mov@ri,amov@ri,directmov@ri,#data5.十六位数据传送指令:movdptr,#data16二.累加器a与片外ram数据传输指令:movxa,@rimovxa,@dptrmovx@ri,amovx@dptr,a三.换算串行:movca,@a+dptr(先pc←(pc)+1,后a←((a)+(dptr)))+movca,@a+pc(先pc←(pc)+1,后a←((a)+(pc)))四.互换指令:1.字节交换指令:xcha,rnxcha,directxcha,@ri2.半字节交换指令:xchda,@ri3.累加器半字节交换指令:swapa五.栈操作指令:1.push(入栈指令)pushdirect2.pop(出栈指令)popdirect算术运算指令:一.乘法加法指令:1.加法指令:adda,rnadda,directadda,@riadda,#data2.拎位次乘法指令:addca,rna←(a)+(rn)+cyaddca,directa←(a)+(direct)+cyaddca,@ria←(a)+((ri))+cyaddca,#dataa←(a)+(data)+cy3.带借位减法指令:subba,rna←(a)-cy-(rn)subba,directa←(a)-cy-(direct)subba,@ria←(a)-cy-((ri))subba,#dataa←(a)-cy-#data二.乘法乘法指令:1.乘法指令:mulabba←(a)×(b)高字节放到b中,低字节放到a中2.乘法指令:divaba←(a)÷(b)的商,(b)←(a)÷(b)的余数三.加1减1指令:1.提1指令:incaa←(a)+1incrnrn←(rn)+1incdirectdirect←(direct)+1inc@ri(ri)←((ri))+1incdptrdptr←(dptr)+12.减至1指令:decadecrndecdirectdec@ri四.十进制调制指令:daa调整累加器a的内容为bcd码逻辑操作方式指令:一.逻辑与、或、异或指令:1.逻辑与指令:anla,rnanla,directanla,@rianla,#data2.逻辑或这而令:orla,rnorla,directorla,@riorla,#dataorldirect,aorldirect,#data3.逻辑异或指令:xrla,rnxrla,directxrla,@rixrla,#dataxrldirect,axrldirect,#data二.清零、row指令:1.累加器a清零指令:crla2.累加器arow指令:cpla三.循环位移指令:1.累加器a循环左移指令:rla2.累加器a循环右移指令:rra3.累加器a连同进位位循环左移指令:rlca4.累加器a连同进位位循环右移指令:rrca控制转移指令:一.无条件迁移指令:1.绝对转移指令:ajmpaddr11(先pc+2,然后将addr11的高十位托付给pc,pc的高六位维持不变)2.长转移指令:ljmpaddr16(用addr16的值替代pc的值)3.相对迁移(长迁移)指令:sjmprel(带符号的偏移字节数)(pc+2,再加rel赋值给pc)4.间接转移指令:jmp@a+dptr(a)+(dptr)→(pc)二.条件转移指令:1.累加器判零迁移指令:jzrel先pc+2;后判断,a为0时转移,pc+rel赋值给pc;否则顺序继续执行jnzrel先pc+2,后判断,a不为0时转移,pc+rel赋值给pc;否则顺序执行2.比较转移指令:cjne目的操作数,源操作数,relcjnea,direct,rel先pc+3传回pc,再比较目的操作数和原操作数cjnea,#data,rel目>源时,程序转移,pc+rel传回pc且cy=0cjnern,#data,rel目=源时,程序顺序执行cjne@ri,#data,rel目djnzrn,rel先pc\\+2,rn-1,当rn为0时程序顺序继续执行,否则pc+rel传到pcdjnzdirect,rel先pc+3,direct-1,direct为0时程序顺序继续执行,否则pc+rel传到pc二.子程序调用、返回指令:1.绝对调用指令acall:acalladdr11先pc+2,sp+1将pc的低八位存入sp;sp+1,将pc的高八位取走sp。
clp单片机指令
CLP单片机指令是单片机(Microcontroller Unit,MCU)指令集中的一种,用于执行特定的操作和控制单片机的工作流程。
单片机是一种集成电路,通常用于控制各种电子设备和系统。
CLP指令是单片机指令集中的一部分,用于实现各种逻辑和算术运算、数据传输、位操作等功能。
CLP指令通常包括多种类型,如数据传输指令、算术指令、逻辑指令和位操作指令等。
数据传输指令用于将数据从一个寄存器传输到另一个寄存器或内存单元中。
算术指令用于执行加、减、乘、除等算术运算,通常包括加法、减法、乘法、除法等指令。
逻辑指令用于执行与、或、非等逻辑运算,例如与指令(AND)、或指令(OR)和非指令(NOT)等。
位操作指令则用于对二进制位进行操作,例如设置位(SETB)、清除位(CLRB)和取反位(CPL)等。
CLP指令的特点是操作灵活、功能强大、执行速度快。
通过组合不同的指令和操作数,可以实现各种复杂的控制逻辑和数据处理任务。
此外,CLP指令还具有低功耗、高可靠性等优点,适用于各种嵌入式系统和智能设备的控制。
在实际应用中,CLP指令需要根据具体的单片机型号和指令集进行选择和使用。
不同的单片机型号可能具有不同的指令集和指令功能,因此需要根据实际需求进行选择。
同时,在使用CLP指令时,还需要注意指令的语法和操作数的类型,以确保程序的正确性和可靠性。
总之,CLP单片机指令是单片机指令集中的重要组成部分,具有广泛的应用前景和重要的实际应用价值。
通过掌握CLP指令的使用方法和技巧,可以更好地实现单片机控制和数据处理任务,推动嵌入式系统和智能设备的发展。
mcu硬件乘除法
摘要:
1.mcu 硬件乘除法简介
2.mcu 硬件乘除法的应用场景
3.mcu 硬件乘除法的实现原理
4.mcu 硬件乘除法的优缺点分析
5.mcu 硬件乘除法的发展趋势
正文:
mcu 硬件乘除法是一种基于单片机(mcu) 的乘除法运算方法,它通过硬件电路实现乘除法运算,具有较高的运算速度和精度。
mcu 硬件乘除法主要应用于需要进行大量数学运算的场景,例如数字信号处理、图像处理、通信等领域。
mcu 硬件乘除法的实现原理是通过专用电路实现乘除法运算。
乘法运算通常采用数字乘法器,将两个二进制数相乘,得到一个二进制乘积。
除法运算则采用数字除法器,将被除数不断减去除数,得到商和余数。
这些运算可以通过硬件电路实现,从而提高运算速度和精度。
mcu 硬件乘除法的优点是运算速度快、精度高,可以满足对运算速度和精度要求较高的应用场景。
此外,mcu 硬件乘除法可以与其他硬件电路集成在一起,实现更加复杂的数字信号处理功能。
但是,mcu 硬件乘除法的缺点是成本较高,需要占用较多的硬件资源,因此在一些简单的应用场景中可能不划算。
随着mcu 技术的不断发展,mcu 硬件乘除法的性能也在不断提高。
单片机乘法运算
1. 操作数在寄存器中,R0--R7
2. 操作数在内RAM中
3. 操作数在外RAM中
不过都大同小异,以2例,是个乘法子程序。
入口:乘数R0,被乘数R1,字节数R7,结果在R0 MULN: LCALL N2N ;多字节十六进制乘法
RLC A
RLC A
MOV R3,A
MULN1: MOV A,R5
MOV R0,A
CLR C
LCALL RLCN
JNC MULN2
LCALL ADDN
MULN2: DJNZ R3,MULN1
N1N: MOV A,R1
ADD A,R7
MOV R0,A
MOV A,R7
CLR C
RRC A
MOV R7,A
MOV R2,A
ADD A,R1
MOV R1,A
MULN3: DEC R0
DEC R1
MOV A,@R0
MOV @R1,A
DJNZ R2,MULN3
MOV A,R5
MOV R0,A
RET
;
RLCN: MOV A,R7 ;多字节二进制无符号数左移一位
RLCN1: MOV R2,A
PUSH PSW
ADD A,R0
MOV R0,A
POP PSW RLCN2: DEC R0
MOV A,@R0
RLC A
MOV @R0,A
DJNZ R2,RLCN2
RET
;
N2N: MOV A,R7 MOV R2,A
ADD A,R0
MOV R6,A
MOV A,R0
MOV R5,A
MOV A,R1
MOV R4,A
ADD A,R7
MOV R0,A
N2N1: MOV A,@R1 MOV @R0,A
INC R0
INC R1
DJNZ R2,N2N1 MOV A,R6
MOV R0,A
LCALL CLRN
MOV A,R4
MOV R0,A
LCALL CLRN
MOV A,R4
MOV R1,A
MOV A,R5
MOV R0,A
MOV A,R7
ADD A,R7
MOV R7,A
RET
;
ADDN: MOV A,R7
MOV R2,A
ADD A,R0
MOV R0,A
MOV A,R7
ADD A,R1
MOV R1,A
CLR C
ADN1: DEC R0
DEC R1
MOV A,@R1
ADDC A,@R0
MOV @R0,A
DJNZ R2,ADN1
RET
;
CLRN: MOV A,R7
MOV R2,A
ADD A,R0
MOV R0,A
CLR A
CLRN1: DEC R0
MOV @R0,A
DJNZ R2,CLRN1
RET
比如你要把12345678H这个十六进制数乘以87654321H,那么你可以这样调用:
MOV R0,#30H ;被乘数区
MOV R1,#40H ;乘数区
MOV R7,#04H ;字节数
MOV 30H,#12H ;填充被乘数
MOV 31H,#34H
MOV 32H,#56H
MOV 33H,#78H
MOV 40H,#87H ;填充乘数
MOV 41H,#65H
MOV 42H,#43H
MOV 43H,#21H
CALL MULN ;调用
这时的结果在R0所指的数据区,即30H-37H共八个字节。
当然你是3字节乘法的话,把R7改成03H就可以了,
结果为6个字节,高字节在前,低字节在后。
一定要注意把R0所指的区留出存放结果的空间。
比如3字节乘
法,你要留出6个字节空间,5字节乘法要留出10个字节的空间。
反正很灵活的。
想做多少字节乘法都可以。
这是除法子程序,入口、字节数、出口和乘法一样,不过有个限制:只限于被除数小于除数,结果为纯小
数。
不知老兄是否适用。
DIVN: LCALL DIV0 ;多字节16进制除法子程序
SETB OV
RET
DIVN1: MOV A, R0
MOV R4, A
ADD A, R7
MOV R5, A
MOV A, R7
MOV B, #08H
MUL AB
MOV R3, A DIVN4: LCALL DIVN8
JC DIVN5
LCALL ADDN
CLR C
DIVN5: MOV A, R5
MOV R0, A
LCALL RLCN
DJNZ R3,DIVN4
LCALL DIVN8
JNC DIVN6
MOV A, R5
LCALL INCN DIVN6: MOV A, R1
PUSH ACC
MOV A, R7
MOV R2, A
ADD A, R4
MOV R0, A
ADD A, R7
MOV R1, A DIVN7: DEC R0
DEC R1
MOV A, @R1
MOV @R0, A
DJNZ R2,DIVN7
POP ACC
MOV R1, A
CLR OV
RET
;
DIVN8: MOV A,R4 MOV R0,A
CLR C
LCALL RLCN MOV 2FH.4,C LCALL SUBN ANL C,/2FH.4 CPL C
RET
;
DIV0: MOV A,R7 MOV R2,A ADD A,R1 MOV R1,A MOV A,R7 ADD A,R0 MOV R0,A
CLR C
DIV01: DEC R0 DEC R1
MOV A,@R0 SUBB A,@R1 DJNZ R2,DIV01 RET
;
ADDN: MOV A,R7 MOV R2,A
ADD A,R0
MOV R0,A
MOV A,R7
ADD A,R1
MOV R1,A
CLR C
ADN1: DEC R0 DEC R1
MOV A,@R1 ADDC A,@R0 MOV @R0,A DJNZ R2,ADN1 RET
;
INCN: MOV A,R7 INCN1: MOV R2,A ADD A,R0
MOV R0,A
SETB C
INCN2: DEC R0 CLR A
ADDC A,@R0 MOV @R0,A DJNZ R2,INCN2 RET
;
RLCN: MOV A,R7 RLCN1: MOV R2,A PUSH PSW
ADD A,R0
MOV R0,A
POP PSW
RLCN2: DEC R0 MOV A,@R0
RLC A
MOV @R0,A DJNZ R2,RLCN2 RET
;
SUBN: MOV A,R7 MOV R2,A
ADD A,R0 MOV R0,A MOV A,R7 ADD A,R1 MOV R1,A CLR C
SUB1: DEC R0 DEC R1
MOV A,@R0 SUBB A,@R1 MOV @R0,A DJNZ R2,SUB1 RET。