实现六位简单计算器课程设计报告.doc

上传人:李司机 文档编号:1180441 上传时间:2022-07-14 格式:DOC 页数:37 大小:1.12MB
返回 下载 相关 举报
实现六位简单计算器课程设计报告.doc_第1页
第1页 / 共37页
实现六位简单计算器课程设计报告.doc_第2页
第2页 / 共37页
实现六位简单计算器课程设计报告.doc_第3页
第3页 / 共37页
实现六位简单计算器课程设计报告.doc_第4页
第4页 / 共37页
实现六位简单计算器课程设计报告.doc_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《实现六位简单计算器课程设计报告.doc》由会员分享,可在线阅读,更多相关《实现六位简单计算器课程设计报告.doc(37页珍藏版)》请在三一办公上搜索。

1、 题 目:8255/273实现六位简单计算器任 务 书一、 目的与要求1 通过对微机系统分析和具体设计,使学生加深对所学课程的理解。2 培养学生分析问题、解决问题的能力。3 培养学生对微型计算机应用系统的根本设计能力。4 要求学生掌握汇编语言程序设计的根本方法,学会典型接口的根本设计方法。二、 主要内容1 选定课程设计参考题目及分工负责局部2 对要求的微机应用系统进展设计,画出系统构造框图、系统接线图。3 用所设计的微机系统进展典型程序的设计并上机进展调试。4 写出设计报告,要求文字整洁、语言通顺、制图规*、程序完整正确。三、 进度方案序号设计内容完成时间备注1选择课程设计题目,查阅相关资料2

2、01312.302进展软硬件设计 201312.313上机调试 201412、34撰写设计报告 2014145演示及辩论 201414四、 设计成果要求1 系统硬件设计合理,软件编程到达设计要求。2 系统硬件构造图和软件流程图绘制清楚规*。3 设计报告完整规*。五、 考核方式根据课程设计报告书撰写情况及辩论情况采用五级记分制评定成绩。一、课程设计的目的与要求目的:在微机原理及应用课程中分别学过了微机原理各个根本组成模块的原理和编程技术的根底上,综合应用各局部知识,在实验室现有设备的情况下,设计一个具有一定功能的应用系统,到达对各局部知识加深理解、融会贯穿的目的,并进一步锻炼学生的动手能力和综合

3、分析能力,同时培养学生的团队精神。要求每个同学独立完成自己分担的局部,整体方案可以组内同学讨论确定。要求:能完成六位十进制数的加、减、乘、除运算,操作过程与普通计算器一样,即先输入一个操作数,然后按下“+“键,再输入下一个操作数,按等号键开场运算并显示结果,假设结果超过六位,则显示“E。二、分工及任务: 庄登祥负责硬件架构、算法架构,苏晴负责显示管理按键管理,庄登祥、苏晴共同负责主程序编写三、设计正文 将可编程外围接口芯片8255A 与键盘和七段LED 连接,通过对8255A 编程及对键盘的操作实现计算功能:键盘码包括数字09、运算符号+-*/=和清零“CL键,通过键盘依次输入第一个运算数字、

4、运算符号、第二个运算数字、“=,在七段LED 灯上显示运算结果,期间数字输入有误可按“CL键之后重新输入。四、设计流程图加号?减号?乘号?除号?等号?清零?设加标志设减标志设乘标志设除标志进展加减乘除运算,保存结果清零显示器是否溢出?出??结果为E放键?有标志?清零显示器,清标志保存数据显示扫描开场8255初始化有无按键?显示扫描是数字键?N键入文档的引述或关注点的摘要。您可将文本框放置在文档中的任何位置。可使用“文本框工具选项卡更改重要引述文本框的格式。Y键入文档的引述或关注点的摘要。您可将文本框放置在文档中的任何位置。可使用“文本框工具选项卡更改重要引述文本框的格式。N键入文档的引述或关注

5、点的摘要。您可将文本框放置在文档中的任何位置。可使用“文本框工具选项卡更改重要引述文本框的格式。N键入文档的引述或关注点的摘要。您可将文本框放置在文档中的任何位置。可使用“文本框工具选项卡更改重要引述文本框的格式。N键入文档的引述或关注点的摘要。您可将文本框放置在文档中的任何位置。可使用“文本框工具选项卡更改重要引述文本框的格式。N键入文档的引述或关注点的摘要。您可将文本框放置在文档中的任何位置。可使用“文本框工具选项卡更改重要引述文本框的格式。N键入文档的引述或关注点的摘要。您可将文本框放置在文档中的任何位置。可使用“文本框工具选项卡更改重要引述文本框的格式。Y键入文档的引述或关注点的摘要。

6、您可将文本框放置在文档中的任何位置。可使用“文本框工具选项卡更改重要引述文本框的格式。Y键入文档的引述或关注点的摘要。您可将文本框放置在文档中的任何位置。可使用“文本框工具选项卡更改重要引述文本框的格式。Y键入文档的引述或关注点的摘要。您可将文本框放置在文档中的任何位置。可使用“文本框工具选项卡更改重要引述文本框的格式。Y键入文档的引述或关注点的摘要。您可将文本框放置在文档中的任何位置。可使用“文本框工具选项卡更改重要引述文本框的格式。Y键入文档的引述或关注点的摘要。您可将文本框放置在文档中的任何位置。可使用“文本框工具选项卡更改重要引述文本框的格式。Y键入文档的引述或关注点的摘要。您可将文本

7、框放置在文档中的任何位置。可使用“文本框工具选项卡更改重要引述文本框的格式。Y键入文档的引述或关注点的摘要。您可将文本框放置在文档中的任何位置。可使用“文本框工具选项卡更改重要引述文本框的格式。Y键入文档的引述或关注点的摘要。您可将文本框放置在文档中的任何位置。可使用“文本框工具选项卡更改重要引述文本框的格式。Y键入文档的引述或关注点的摘要。您可将文本框放置在文档中的任何位置。可使用“文本框工具选项卡更改重要引述文本框的格式。N键入文档的引述或关注点的摘要。您可将文本框放置在文档中的任何位置。可使用“文本框工具选项卡更改重要引述文本框的格式。N键入文档的引述或关注点的摘要。您可将文本框放置在文

8、档中的任何位置。可使用“文本框工具选项卡更改重要引述文本框的格式。N键入文档的引述或关注点的摘要。您可将文本框放置在文档中的任何位置。可使用“文本框工具选项卡更改重要引述文本框的格式。N键入文档的引述或关注点的摘要。您可将文本框放置在文档中的任何位置。可使用“文本框工具选项卡更改重要引述文本框的格式。Y键入文档的引述或关注点的摘要。您可将文本框放置在文档中的任何位置。可使用“文本框工具选项卡更改重要引述文本框的格式。五、各局部原理1、6位数码管原理及其功能每位数码由八段发光二极管构成,这八个发光段分别称为a,b,c,d,e,f,g,dp;数码管分为共阳和共阴两种,共阳数码管的所有二极管的正极相

9、连,负极引线,输入0时有效;共阴数码管的所有二极管负极相连,正极引线,输入1时有效;通过控制不同段的点亮和熄灭,以显示所要得到的数字七段LED 的输出功能也是通过8255的并行输出实现;仿真时我们采用的是共阳数码管。2、8255 引脚功能说明:RESET:复位输入线,当该输入端外于高电平时,所有内部存放器包括控制存放器均被去除,所有I/O 口均被置成输入方式。PA0PA7:端口A 输入输出线,一个8 位的数据输出锁存器/缓冲器,一个8 位的数据输入锁存器。PB0PB7:端口B 输入输出线,一个8 位的I/O 锁存器,一个8 位的输入输出缓冲器。PC0PC7:端口C 输入输出线,一个8 位的数据

10、输出锁存器/缓冲器,一个8 位的数据输入缓冲器。端口C 可以通过工作方式设定而分成2 个4位的端口,每个4 位的端口包含一个4 位的锁存器,分别与端口A 和端口B 配合使用,可作为控制信号输出或状态信号输入端口。CS:片选信号线,当这个输入引脚为低电平时,表示芯片被选中,允许8255 与CPU 进展通讯。RD:读信号线,当这个输入引脚为低电平时,允许8255 通过数据总线向CPU 发送数据或状态信息,即CPU 从8255 读取信息或数据。WR:写入信号,当这个输入引脚为低电平时,允许CPU 将数据或控制字写8255。D0D7:三态双向数据总线,8255 与CPU 数据传送的通道,当CPU 执行

11、输入输出指令时,通过它实现8 位数据的读/写操作,控制字和状态信息也通过数据总线传送。8255 的读写控制:8255 的读/写控制逻辑电路承受CPU 发来的控制口号RD、WR、RESET 和地址信号A1A0。然后根据命令端口,控制信号的要求,将端口的数据读出选信CPU 或者将CPU送来的数据写入端口,各端口的工作状态。通过用输出指令对8255A 的控制字存放器编程,写入设定工作方式的控制字,可以让3个数据口以不同的方式工作,端口A 可工作于3 种方式的任一种,端口B 只能工作于方式0 和方式1,端口C 除了用于输入输出端口外,还能配合A 口和B 口工作,为这两个端口的输入输出操作提供联系信号3

12、、8086处理器当引脚接高电平时,CPU工作于最小方式(单处理器系统方式,适合于较小规模的应用)。此时,引脚功能如下:(1)AD15AD0:分时复用的存储器或端口的地址和数据总线。传送地址时为单向的三态输出,而传送数据时为双向三态输入/输出。2IO/M存储器/输入、输出控制信号输出、三态:它用于区分CPU当前是访问存储器还是访问输入/输出端口。高电表示访问存储器,说明当前要进展CPU与存储器之间的数据传送。低电平表示访问输入/输出设备。表示当前要进展CPU与I/O端口之间的数据传送。在时,它被置为浮空。3WRLOCK(输出,低电平有效,三态):信号有效,即为低电平时,表示CPU正在执行存储器或

13、I/O写操作,在写周期中,在、期间都有效。在时,被置为浮空。4INTA:可屏蔽中断响应信号,输出,低电平有效。 CPU通过信号对外设提出的可屏蔽中断请求做出响应。为低电平时,表示CPU已经响应外设的中断请求,即将执行中断效劳程序。5ALE:地址锁存允许信号,输出,高电平有效。 CPU利用ALE信号可以把AD15 AD0地址/数据、A19/S6A16/S3地址/状态线上的地址信息锁存在地址锁存器中。5DT:数据发送/接收信号,输出,三态。 DT/信号用来控制数据传送的方向。DT/为高电平时,CPU发送数据到存储器或I/O端口;DT/为低电平时,CPU接收来自存储器或I/O端口的数据。6DEN:数

14、据允许控制信号,输出,三态,低电平有效。信号用作总线收发器的选通控制信号。当为低电平时,说明CPU进展数据的读/写操作。7HOLD:总线保持请求信号,输入,高电平有效。在DMA数据传送方式中,由总线控制器8237A发出一个高电平有效的总线请求信号,通过HOLD引脚输入到CPU,请求CPU让出总线控制权。8HLDA:总线保持响应信号,输出,高电平有效。HLDA是与HOLD配合使用的联络信号。在HLDA有效期间,HLDA引脚输出一个高电平有效的响应信号,同时总线将处于浮空状态,CPU让出对总线的控制权,将其交付给申请使用总线的8237A控制器使用,总线使用完后,会使HOLD信号变为低电平,CPU又

15、重新获得对总线的控制权。9RD:读控制信号,三态,输出。当RD=0时,表示执行存储器或端口的读操作。是对内存单元还是对端口读取数据,取决于信号。在执行DMA操作时,RD被浮空。10READY:“准备好信号线,输入。该引脚承受被寻址的内存或端口发给CPU的响应信号,高电平时表示内存或端口已准备就绪,CPU可以进展数据传输。CPU在T3状态开场对READY信号采样。假设检测到READY为低电平,表示内存或端口尚未准备就绪,则在状态之后自动插入等待状态,直到READY信号变为高电平,内存或端口已准备就绪,才可以进展数据传输。4.74LS138译码器1中选通端S1、S2、S3为有效时,可将地址端A0、

16、A1、A2的二进制编码在Y0至Y7对应的输出端以低电平译出。比方:A2A1A0=110时,则Y6输出端输出低电平信号。 2假设将选通端中的一个作为数据输入端时,74LS138还可作数据分配器。 3可用在8086的译码电路中,扩展内存。74LS273锁存器(1) MR为使能端,为低电平时,可传送数据(2) D0-D7是数据输入端,Q0-Q7是锁存数据输出端(3) CLK是时钟输入端,在一个信号的上升沿,锁存数据在使用74LS273时,应注意由于8086的数据是下降沿有效的,应在CLK输入端加一个反相器5、键盘原理键盘使用来获取用户按键操作的,采用矩阵键盘,假设为行列数为n,则行列组合可获取n*n

17、不同的键值。通过行列扫描来获取键值,扫描原理分为3种,以4*4矩阵键盘为例,0输入有效,分别如下:1. 行(列)输入0000,检测列(行),假设出现0,记以下(行)数;然后列(行)输入000,检测行(列),假设出 现0,记下行(列)数;则通过行列数可得出矩阵键盘上对应的键被按下;2. 行输入0111,检测列,假设出现0记以下数,则可得出,第一行上相应的列的按键被按下;然后行依次输入1101,检测列,与上同3. 列输入0111,检测行,过程与2类似在实际扫描矩阵键盘中,具体扫描步骤如下:1.行输入0000,检测行,假设有按键按下,进展2,否则循环执行12.采用3种方法中的一种进展键盘扫描3.有键

18、按下,延时几十毫秒左右,重读结果4.假设按键信号还在,则此次按键非抖动,计算键值储存结果5.循环检测,等到按键信号消除,则此次按键操作完成本设计中,没有考虑多个按键同时按下的可能,这是待完善之处6.仿真电路图六、算法架构讨论:本设计完成的计算器中,还有许多不完美之处,一个比较好的计算器应该更加智能化,因此,我们找一个学生用的智能计算器进展实验。下面讨论中,算符特指实际运算的符号;加减乘除指从键盘获得的按键,可能是算符,也可能是一个数的正负号;满足运算条件指有一个算符和两个参与运算的当前数以及能触发运算的按键操作首先,是连续计算,当然智能计算器是能区分运算符号优先级别的,在4*4矩阵键盘计算器中

19、,计算的连续性应该表达在按下出现下一个算符,在满足运算的条件下,应立即能将之前的式子计算出来,并能显示;其次,是正负号,正负号便是加减号,比方我们按下+6+-6,智能计算器给出的结果是0,在进展其他含正负符号的运算,得出以下实验结果:对于加减法:6+6=12,6+6=12,6+-6=0,6+-6=12,6+-6=0,+6+6=12,+6+6=12,+6+-6=0,+6+-6=12,+6+-6=0,6-+6=0,6-+6=0,6-6=12,6-12=0,-6-+6=-12,-6-+6=-12,对于乘除法:+6*-6=-36,+6*+6=36,-6*-6=36,-6/-6=1,+6-*6(错误),

20、6*6(错误)容易得出以下规则:1. 无符号的数默认为正;2. 算符先出现且之前无数,则被认为是下一个数的正负号;3. 算符先出现(被认为是正负号的不算)且之前有数,则被认为是算符,4. 在算符已经出现的情况下,出现加减号,被认为是下一个数的正负号,出现乘除则认为运算数正负号错误此类错误计为第一类错误5. 无论一个数有多少个正号这个数都为正;一个数有奇数个负号认为是负,有偶数个负号认为是正6. 以上运算规则应不仅遵循等于号计算结果,还应遵循连续运算规则,即出现下一个算符时立即计算之前的式子,且保存此运算符再次,我们考虑等于号的计算规则,对于等号,应能计算上面所提到的所有式子,包括连续运算后的按

21、下等于号,对于一些特殊的,进展以下实验,得出以下结果:+6=+6,-6=-6,*6=(错误),/6=(错误),+6+=(错误),+6-(错误),-6+=(错误),-6-=(错误),+6*或 / =(错误),*(或 / )6=(错误),*(或 / )6*(或 / )=(错误),6+=(错误),6*=(错误)综上,等于号出错规则如下:在已有算符的情况下,不满足运算条件(此类错误计为第二类错误)不出错情况如下:1. 假设无算符,但有一个有正负号的运算数,则显示此运算数2. 运算条件一个都不满足的条件下,我们默认显示0此处与智能计算器不同3. 等于号不出错条件包含第二处的讨论然后设计清零的的规则,清零

22、键设计从简,不考虑其撤销功能,在任何情况下,按下清零键,计算器恢复初始状态最终,由于我们的计算器是6位的,运算数和运算结果数超过6位时,也应出现错误此类错误计为第三类错误至此,我们对智能计算器运算规则的讨论完毕,下面进展算法架构讨论;架构算法时,应始终考虑这几点,能进展连续运算,能区分算符和正负号,能判别是否满足运算条件,以及最重要的能,能报错。从连续运算角度出发,很容易想到,要进展连续运算,得有一个循环机制,于是尝试将运算数分为被运算数和当前运算数。为到达连续运算的目的,被运算数必须始终记录运算的历史值,而且永远只考虑当前运算的正负号。似乎这样便完成连续运算功能了,然而,我们不能无视另外一条

23、规则,在第一次运算时满足运算条件是基于两个运算数的即两个当前数,假设按照连续运算设计算法,可能与满足运算条件相冲突;则,我们是否可以再设置一个当前运算数呢,假设如此,则需同时考虑两个运算数的正负号,且增加代码本钱,显然是不必要的。也可以设置一个标记,第一次运算时,被运算数是当前数的身份,在完成第一次运算后,恢复被运算数的身份,保存储存历史值的功能。这种方法比较可行,但还是防止不了需同时考虑两个运算数的正负号,也可取。我们重新审视这三类错误,第一类和第二类错误的本质区别在于,等号出错是基于两个运算数,而第一类错误是基于一个运算数,我们能不能把第二类错误归结到第一类错误呢?这是可以实现的,经过讨论

24、,我们确定了以下规则,采用被运算数和当前运算数,被运算数初始化成+0,算符置成加号,被运算数数值为空,符号为正号,如此,完美的解决了第二类错误问题。下面是我们最终的算法架构,如下列图:四、课程设计总结或结论1.通过这次课程设计,进一步了解了可编程并行I/O接口芯片8255的特性和引脚功能以及根本知识点,了解了该芯片的应用。同时了解了汇编语言对学习其他计算机起到一个比较、对照、参考的促进作用。学习事物总是从最简单根底的开场。则学习高级语言也当然应当从汇编开场。学习汇编语言实际上是培养了学习计算机语言的能力和素养。个人认为,学习汇编语言对学习其他语言很有促进作用。2.通过编程实现,熟悉了8255方

25、式控制字,了解了三种工作方式和根本工作原理。3.通过查阅资料,对于可编程接口芯片有了更深的认识,掌握了根本的微机接口方法。4.本次课程设计,自己认真地做了资料的查阅,过程中,认真思考,积极探索,之后,提炼总结。总的来说,根本完成了课程设计要求和任务。附录程序DATA SEGMENTNUMB0DB6 DUP(0);存放第一个数据值NUMB1 DB 6 DUP(0);存放第二个数据值NUMB2 DB 6 DUP(0) ;存放一个很怪的数据RESULTDB12 DUP(0);存放运算结果SDB0 ;存放运算符号值EDB0 ;按下等号键标记PD DB 0 ;判断S的值CC DB0 ;存放运算数据位数C

26、C0 DB 0HDB0 ;存放按键行号LDB0 ;存放按键列号DISCODEDB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0FFH,0FFH,0FFH,0FFH,86H;段码表DATA ENDSCODE SEGMENTASSUMECS:CODE,DS:DATASTART:MOVA*,DATAMOVDS,A*MOVAL,90H ;设置为A口输入,B口输出,C口输出OUT46H,ALKKK:CALLKEY ;扫描按键JMPKKK;以下为按键扫描子程序,程序返回后,在变量H和L中存放当前按键的行列号KEY PROCCHECK:CMP PD,

27、0JZ DISP1 DISP2: CALL DISP0 ;当按下的是运算符时 要用另一个显示 JMP ANJIANDISP1: CALLDISP ;等待按键按下的同时进展显示 ANJIAN: MOVAL,0F0H ;所有行输出低电平OUT44H,ALINAL,40HCMPAL,0FFH ;读列值JZ CHECK ;假设都为高电平则无键按下,等待MOVC*,50LOOP $ ;延时消抖INAL,40H ;重读列值CMPAL,0FFHJZCHECK ;无键按下一直等待MOVH,0 ;有键按下,先把行列号变量清0MOVL,0MOVBL,01HMOVBH,0FEH ;扫描法读键值:从第一行开场测试,即

28、PC0输出低电平NE*T:MOVAL,BHOUT 44H,ALNE*TH:INAL,40H ;读列值,判断是第几列有键按下TESTAL,BL ;从第一列开场判断JZWAIT0ROLBL,1CMPBL,10H ;当前行状态下没有列有键按下,则转为对下一行的测试JZNE*TLINCH ;每判断一列,列号加1JMPNE*TH ;再对下一列进展判断NE*TL:MOVH,0MOVBL,01HROLBH,1 ;对下一行测试,让下一个PC口输出低电平CMPBH,0EFHJZE*ITINCLJMPNE*TWAIT0:INAL,40H ;假设有键按下,则等该按键松开后再计算键值CMPAL,0FFHJNZWAIT

29、0MOVC*,50LOOP $ ;延时消抖INAL,40HCMPAL,0FFHJNZWAIT0CALLKEYVALUE ;调计算键值子程序E*IT:RETKEY ENDP;以下为计算键值子程序,通过行列号计算键值键值=行号*4+列号键值存放在DL存放器中KEYVALUE PROCPUSHB*PUSHA*MOVDL,LMOVDH,HSHLDL,1SHLDL,1 ;列号乘4ADDDL,DHCMPDL,9 ;按下的是数字键JNGNUM_CALLCMPDL,14JLCONT_CALL ;按下的是运算键CMPDL,14JZOUTP_CALL ;按下的是等于键CMPDL,15JZCLR_CALL ;按下的

30、是去除键NUM_CALL: ;按下的是数字键的程序MOV PD,0CALLNUMBER ;调数字键处理子程序JMPE*IT1CONT_CALL: ;按下的是运算建的程序MOVS,DL ;存放运算键的键值MOV PD,1 ;因为存放的是运算建,所以判断符号变一下MOVE,0MOV C*,6LEASI,NUMB0LEA DI,NUMB1MOV B*,0 LL:MOV AL,DIMOV SI,AL ;把number1中的值赋给number0MOV AL,DI ; 当输入的是运算符时把number1中的数放到number2中,用于这时候的显示MOV NUMB2B*,AL ;这里B*对不对啊INC B*

31、MOV AL,0MOVDI,AL ;对number1清零INCDIINC SILOOP LLJMPE*IT1OUTP_CALL: ;按下的是等号的子程序MOV PD,0CALLOUTP ;调等号键处理子程序JMPE*IT1CLR_CALL: ;按下的是复位的子程序MOV PD,0CALLCLEAR ;调去除键处理子程序E*IT1: ;最后都会到这里的,哈哈POPA*POPB*RETKEYVALUE ENDP;以下为去除键处理子程序,按下去除键后,变量全部清0CLEAR PROCMOVC*,6MOV SI,0AA:MOV NUMB0SI,0 MOV NUMB1SI,0 MOV NUMB2SI,0

32、MOVRESULTSI,0MOVRESULTSI+6,0INCSILOOP AAMOVCC,0RETCLEAR ENDP;以下为等号键处理子程序,根据运算符号,调用相应的运算子程序;OUTP PROCPUSHA*PUSHD*PUSHB*INCECMPS,10JZADD_CALL ;运算符为加号,则调用加法子程序CMPS,11JZSUB_CALL ;运算符为减号,则调用减法子程序CMPS,12JZMUL_CALL ;运算符为乘号,则调用乘法子程序CMPS,13JZDIV_CALL;运算符为除号,则调用除法子程序ADD_CALL:CALLADDPJMPSTORE1SUB_CALL:CALLSUBP

33、JMPSTORE1MUL_CALL:CALLMULPJMPSTORE1DIV_CALL:CALLDIVPSTORE1:MOV SI,0MOV C*,6BB:MOVAL,RESULTSIMOV NUMB1SI,ALINCSILOOP BB MOV SI,0 ;对number0进展清零MOV C*,6BB1:MOV AL,0MOV NUMB0SI,ALINC SILOOP BB1POPB*POPD*POPA*RETOUTP ENDP;以下为数字键处理子程序;该程序,将输入的数据按位存放在NUMB1变量中,并由CC记录数据的位数NUMBER PROCPUSHB*PUSHA*CMPE,1JNZCONT

34、INUEMOVE,0CALLCLEARCONTINUE:CALLBITPCMPCC,0 ;目前数据为0位,即没有数据,则转到SSSJZSSSMOV SI,5EE:MOV AL,NUMB1SI-1MOVNUMB1SI,ALDECSICMPSI,0JNZEESSS:MOV NUMB10,DL ;将当前键入的数据存放到NUMB1的最低位INCCC ;数据位数加1CMPCC,6 ;判断数据位数JNGE*IT2MOVCC,0 ;如果数据超过6位,重新从最低位开场存放MOVNUMB15,0MOVNUMB14,0MOVNUMB13,0MOVNUMB12,0MOVNUMB11,0MOVNUMB10,0E*IT

35、2: POPA*POPB*RETNUMBER ENDP;加法程序ADDP PROCPUSHD*PUSHC*PUSHB*PUSHA*MOVB*,0MOVC*,6MOVD*,0;初始化ADD2:MOVA*,0MOVAL,NUMB0B*ADDAL,NUMB1B*; 先两数相加AAA;十进制转换MOVDH,AHMOVAH,0ADDAL,DL;再加低位进位AAAADDDH,AHMOVDL,DH;保护进位MOVRESULTB*,ALINCB*LOOPADD2CMPDL,1JZYC;溢出JMPGGYC: MOV C*,5MOV SI,5PP1:MOV RESULTSI,0HDEC SILOOP PP1MOV

36、 RESULT0,0FHGG:POPA*POPB*POPC*POPD*RETADDPENDP;减法程序SUBP PROCPUSHD*PUSHC*PUSHB*PUSHA*LEASI,NUMB0+5LEADI,NUMB1+5MOVC*,6AP:MOVAL,SICMPAL,DIJNZ*PDECSIDECDILOOPAP;从高位找出第一位不一样的数的下标*P:MOVAL,SICMPAL,DIJAFUZHICHGFUZHI:;正常赋值LEASI,NUMB0LEADI,NUMB1JMPSUB2CHG:;交换赋值LEASI,NUMB1LEADI,NUMB0SUB2:;减法开场MOVB*,0MOVC*,6MO

37、VD*,0 MOV AH,0;初始化SUB1: MOV AH,0 MOV DH,0MOVAL,SISUBAL,DIAAS ;两数相减CMP AH,0FFH;判断是否有借位JNZ HH;无则跳转MOV DH,1;有则给DH赋1,即借位符HH:MOV AH,0SUB AL,DL;减去后一位的借位AASCMP AH,0FFH;判断此次运算是否有借位JNZ II;无则跳转MOV DH,1;有则给DH赋1,即借位符II: MOV DL,DH;将借位放入DL保护MOVRESULTB*,ALINCB*INCSIINCDILOOPSUB1;减法完毕POPA*POPB*POPC*POPD*RETSUBPENDP

38、;乘法程序MULP PROCPUSHD*PUSHC*PUSHB*PUSHA*MOV C*,6 ;对RESULT清零。MOV DI,0CLL1:MOV RESULTDI,0 INC DILOOP CLL1MOVSI,0MUL2:;乘法开场,亦是大循环开场MOVA*,0;初始化MOVB*,0MOVC*,6MOVD*,0MOVDI,SIWP:MOVAH,0;小循环开场MOVAL,NUMB0B*MULNUMB1SIAAMMOVDH,AH;DH保护进位MOVAH,0ADDAL,DL;加上后一位的进位AAAADDDH,AH;DH保护进位MOVAH,0ADDAL,RESULTDI;加上结果里已有的数AAAM

39、OVRESULTDI,ALADDDH,AH;DH保护进位MOVDL,DH;DL保护进位INCB*INCDILOOPWP;小循环完毕ADDRESULTDI,DL;小循环做完后,保护最高位INCSICMPSI,6JNEMUL2;大循环完毕MOVSI,12DP:DECSI;判定溢出CMPRESULTSI,0JZDPCMPSI,5JAYC1;溢出JMPFFYC1:MOV C*,5;溢出赋值段MOV SI,5PP: MOV RESULTSI,0HDEC SILOOP PPMOV RESULT0,0FH;溢出赋值段完毕FF:POPA*POPB*POPC*POPD*RETMULPENDP;除法程序DIVPPROCPUSHD*PUSHC*PUSHB*PUSHA*MOV C*,6 ;对RESULT清零。MOV DI,0CLL2:MOV RESULTDI,0 INC DILOOP CLL2MOV SI,5 MOV C*,6;初始化LP: CMP NUMB1SI,0 JNZ WT DEC SI LOOP

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号