实现六位简单计算器课程设计报告_第1页
实现六位简单计算器课程设计报告_第2页
实现六位简单计算器课程设计报告_第3页
实现六位简单计算器课程设计报告_第4页
实现六位简单计算器课程设计报告_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上 课程设计报告( 2013 - 2014 年度第 1 学期)名 称:微机原理及应用 题 目:8255/273实现六位简单计算器院 系:控制与计算机工程学院班 级:创新自1101学 号:学生姓名:苏晴指导教师:杨国田设计周数:一周同 组 人:庄登祥成 绩: 日期: 2014年 1 月 4日专心-专注-专业微机原理及应用课程设计任 务 书一、 目的与要求1 通过对微机系统分析和具体设计,使学生加深对所学课程的理解。2 培养学生分析问题、解决问题的能力。3 培养学生对微型计算机应用系统的基本设计能力。4 要求学生掌握汇编语言程序设计的基本方法,学会典型接口的基本设计方法。二

2、、 主要内容1 选定课程设计参考题目及分工负责部分2 对要求的微机应用系统进行设计,画出系统结构框图、系统接线图。3 用所设计的微机系统进行典型程序的设计并上机进行调试。4 写出设计报告,要求文字整洁、语言通顺、制图规范、程序完整正确。三、 进度计划序号设计内容完成时间备注1选择课程设计题目,查阅相关资料201312.302进行软硬件设计 201312.313上机调试 201412、34撰写设计报告 2014145演示及答辩 201414四、 设计成果要求1 系统硬件设计合理,软件编程达到设计要求。2 系统硬件结构图和软件流程图绘制清楚规范。3 设计报告完整规范。五、 考核方式根据课程设计报告

3、书撰写情况及答辩情况采用五级记分制评定成绩。 学生姓名:苏晴 指导教师:杨国田 2014年1月4日一、课程设计的目的与要求目的:在微机原理及应用课程中分别学过了微机原理各个基本组成模块的原理和编程技术的基础上,综合应用各部分知识,在实验室现有设备的情况下,设计一个具有一定功能的应用系统,达到对各部分知识加深理解、融会贯通的目的,并进一步锻炼学生的动手能力和综合分析能力,同时培养学生的团队精神。要求每个同学独立完成自己分担的部分,整体方案可以组内同学讨论确定。要求:能完成六位十进制数的加、减、乘、除运算,操作过程与普通计算器相同,即先输入一个操作数,然后按下“+”“”“×”“÷

4、;”键,再输入下一个操作数,按等号键开始运算并显示结果,若结果超过六位,则显示“E”。二、分工及任务: 庄登祥负责硬件架构、算法架构,苏晴负责显示管理按键管理,庄登祥、苏晴共同负责主程序编写三、设计正文 将可编程外围接口芯片8255A 与键盘和七段LED 连接,通过对8255A 编程及对键盘的操作实现计算功能:键盘码包括数字09、运算符号+-*/=和清零“CL”键,通过键盘依次输入第一个运算数字、运算符号、第二个运算数字、“=”,在七段LED 灯上显示运算结果,期间数字输入有误可按“CL”键之后重新输入。 四、设计流程图加号?减号?乘号?除号?等号?清零?设加标志设减标志设乘标志设除标志进行加

5、减乘除运算,保存结果清零显示器是否溢出?出?结果为E放键?有标志?清零显示器,清标志保存数据显示扫描开始8255初始化有无按键?显示扫描是数字键?N键入文档的引述或关注点的摘要。您可将文本框放置在文档中的任何位置。可使用“文本框工具”选项卡更改重要引述文本框的格式。Y键入文档的引述或关注点的摘要。您可将文本框放置在文档中的任何位置。可使用“文本框工具”选项卡更改重要引述文本框的格式。N键入文档的引述或关注点的摘要。您可将文本框放置在文档中的任何位置。可使用“文本框工具”选项卡更改重要引述文本框的格式。N键入文档的引述或关注点的摘要。您可将文本框放置在文档中的任何位置。可使用“文本框工具”选项卡

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

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

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

9、更改重要引述文本框的格式。N键入文档的引述或关注点的摘要。您可将文本框放置在文档中的任何位置。可使用“文本框工具”选项卡更改重要引述文本框的格式。Y键入文档的引述或关注点的摘要。您可将文本框放置在文档中的任何位置。可使用“文本框工具”选项卡更改重要引述文本框的格式。五、各部分原理1、6位数码管原理及其功能每位数码由八段发光二极管构成,这八个发光段分别称为a,b,c,d,e,f,g,dp;数码管分为共阳和共阴两种,共阳数码管的所有二极管的正极相连,负极引线,输入0时有效;共阴数码管的所有二极管负极相连,正极引线,输入1时有效;通过控制不同段的点亮和熄灭,以显示所要得到的数字七段LED 的输出功能

10、也是通过8255的并行输出实现;仿真时我们采用的是共阳数码管。2、8255 引脚功能说明:RESET:复位输入线,当该输入端外于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O 口均被置成输入方式。PA0PA7:端口A 输入输出线,一个8 位的数据输出锁存器/缓冲器, 一个 8 位的数据输入锁存器。PB0PB7:端口B 输入输出线,一个8 位的I/O 锁存器, 一个 8 位的输入输出缓冲器。PC0PC7:端口C 输入输出线,一个8 位的数据输出锁存器/缓冲器, 一个 8 位的数据输入缓冲器。端口C 可以通过工作方式设定而分成2 个4 位的端口, 每个 4 位的端口包含一个4 位的

11、锁存器,分别与端口A 和端口B 配合使用,可作为控制信号输出或状态信号输入端口。CS:片选信号线,当这个输入引脚为低电平时,表示芯片被选中,允许8255 与CPU 进行通讯。RD:读信号线,当这个输入引脚为低电平时,允许8255 通过数据总线向CPU 发送数据或状态信息,即CPU 从8255 读取信息或数据。WR:写入信号,当这个输入引脚为低电平时,允许CPU 将数据或控制字写8255。D0D7:三态双向数据总线,8255 与CPU 数据传送的通道,当CPU 执行输入输出指令时,通过它实现8 位数据的读/写操作,控制字和状态信息也通过数据总线传送。8255 的读写控制:8255 的读/写控制逻

12、辑电路接受CPU 发来的控制口号RD、WR、RESET 和地址信号A1A0。然后根据命令端口,控制信号的要求,将端口的数据读出选信CPU 或者将CPU送来的数据写入端口,各端口的工作状态。通过用输出指令对8255A 的控制字寄存器编程,写入设定工作方式的控制字,可以让3个数据口以不同的方式工作,端口A 可工作于3 种方式的任一种,端口B 只能工作于方式0 和方式1,端口C 除了用于输入输出端口外,还能配合A 口和B 口工作,为这两个端口的输入输出操作提供联系信号3、8086处理器当引脚接高电平时,CPU工作于最小方式(单处理器系统方式,适合于较小规模的应用)。此时,引脚功能如下: (1)AD1

13、5AD0:分时复用的存储器或端口的地址和数据总线。传送地址时为单向的三态输出,而传送数据时为双向三态输入/输出。(2)IO/M存储器/输入、输出控制信号(输出、三态):它用于区分CPU当前是访问存储器还是访问输入/输出端口。高电表示访问存储器,说明当前要进行CPU与存储器之间的数据传送。低电平表示访问输入/输出设备。表示当前要进行CPU与I/O端口之间的数据传送。在时,它被置为浮空。 (3)WRLOCK(输出,低电平有效,三态): 信号有效,即为低电平时,表示CPU正在执行存储器或I/O写操作,在写周期中,在、期间都有效。在时,被置为浮空。(4)INTA:可屏蔽中断响应信号,输出,低电平有效。

14、 CPU通过信号对外设提出的可屏蔽中断请求做出响应。为低电平时,表示CPU已经响应外设的中断请求,即将执行。 (5)ALE:地址锁存允许信号,输出,高电平有效。 CPU利用ALE信号可以把AD15 AD0地址/数据、A19/S6A16/S3地址/状态线上的地址信息锁存在中。 (5)DT:数据发送/接收信号,输出,三态。 DT/信号用来控制数据传送的方向。DT/为高电平时,CPU发送数据到存储器或I/O端口;DT/为低电平时,CPU接收来自存储器或I/O端口的数据。 (6)DEN:数据允许控制信号,输出,三态,低电平有效。信号用作总线收发器的选通控制信号。当为低电平时,表明CPU进行数据的读/写

15、操作。 (7)HOLD:总线保持请求信号,输入,高电平有效。在DMA数据传送方式中,由总线控制器8237A发出一个高电平有效的总线请求信号,通过HOLD引脚输入到CPU,请求CPU让出总线控制权。 (8)HLDA:总线保持响应信号,输出,高电平有效。HLDA是与HOLD配合使用的联络信号。在HLDA有效期间,HLDA引脚输出一个高电平有效的响应信号,同时总线将处于浮空状态,CPU让出对总线的控制权,将其交付给申请使用总线的8237A控制器使用,总线使用完后,会使HOLD信号变为低电平,CPU又重新获得对总线的控制权。(9)RD:读控制信号,三态,输出。当RD=0时,表示执行存储器或端口的读操作

16、。是对内存单元还是对端口读取数据,取决于信号。在执行DMA操作时,RD被浮空。(10)READY:“准备好”信号线,输入。该引脚接受被寻址的内存或端口发给CPU的响应信号,高电平时表示内存或端口已准备就绪,CPU可以进行数据传输。CPU在T3状态开始对READY信号采样。若检测到READY为低电平,表示内存或 端口尚未准备就绪,则在状态之后自动插入等待状态,直到READY信号变为高电平,内存或端口已准备就绪,才可以进行数据传输。4.74LS138译码器(1)当选通端S1、S2、S3为有效时,可将地址端(A0、A1、A2)的二进制编码在Y0至Y7对应的输出端以低电平译出。比如:A2A1A0=11

17、0时,则Y6输出端输出低电平信号。 (2)若将选通端中的一个作为数据输入端时,74LS138还可作数据分配器。 (3)可用在8086的译码电路中,扩展内存。74LS273锁存器(1) MR为使能端,为低电平时,可传送数据(2) D0-D7是数据输入端,Q0-Q7是锁存数据输出端(3) CLK是时钟输入端,在一个信号的上升沿,锁存数据在使用74LS273时,应注意由于8086的数据是下降沿有效的,应在CLK输入端加一个反相器5、键盘原理键盘使用来获取用户按键操作的,采用矩阵键盘,假设为行列数为n,则行列组合可获取n*n不同的键值。通过行列扫描来获取键值,扫描原理分为3种,以4*4矩阵键盘为例,0

18、输入有效,分别如下:1. 行(列)输入0000,检测列(行),若出现0,记下列(行)数;然后列(行)输入000,检测行(列),若出 现0,记下行(列)数;则通过行列数可得出矩阵键盘上对应的键被按下;2. 行输入0111,检测列,若出现0记下列数,则可得出,第一行上相应的列的按键被按下;然后行依次输入1101,检测列,与上同3. 列输入0111,检测行,过程与2类似在实际扫描矩阵键盘中,具体扫描步骤如下:1.行输入0000,检测行,若有按键按下,进行2,否则循环执行12.采用3种方法中的一种进行键盘扫描3.有键按下,延时几十毫秒左右,重读结果4.若按键信号还在,则此次按键非抖动,计算键值储存结果

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

20、出来,并能显示;其次,是正负号,正负号便是加减号,比如我们按下+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(错误),6*6(错误)容易得出以下规则:1. 无符号的数默认为正;2. 算符先出现且之前无数,则

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

22、(错误),/6=(错误),+6+=(错误),+6-(错误),-6+=(错误),-6-=(错误),+6*(或 / )=(错误),*(或 / )6=(错误),*(或 / )6*(或 / )=(错误),6+=(错误),6*=(错误)综上,等于号出错规则如下:在已有算符的情况下,不满足运算条件(此类错误计为第二类错误)不出错情况如下:1. 若无算符,但有一个有正负号的运算数,则显示此运算数2. 运算条件一个都不满足的条件下,我们默认显示0(此处与智能计算器不同)3. 等于号不出错条件包含第二处的讨论然后设计清零的的规则,清零键设计从简,不考虑其撤销功能,在任何情况下,按下清零键,计算器恢复初始状态最终

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

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

25、成加号,被运算数数值为空,符号为正号,如此,完美的解决了第二类错误问题。下面是我们最终的算法架构,如图所示:四、课程设计总结或结论1.通过这次课程设计,进一步了解了可编程并行I/O接口芯片8255的特性和引脚功能以及基本知识点,了解了该芯片的应用。同时了解了汇编语言对学习其他计算机起到一个比较、对照、参考的促进作用。学习事物总是从最简单基础的开始。那么学习高级语言也当然应当从汇编开始。学习汇编语言实际上是培养了学习计算机语言的能力和素养。个人认为,学习汇编语言对学习其他语言很有促进作用。2.通过编程实现,熟悉了8255方式控制字,了解了三种工作方式和基本工作原理。3.通过查阅资料,对于可编程接

26、口芯片有了更深的认识,掌握了基本的微机接口方法。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 ;存放运算数据位数CC0 DB 0HDB0 ;存放按键行号LDB0 ;存放按键列号DISCOD

27、EDB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0FFH,0FFH,0FFH,0FFH,86H;段码表DATA ENDSCODE SEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,90H ;设置为A口输入,B口输出,C口输出OUT46H,ALKKK:CALLKEY ;扫描按键JMPKKK;以下为按键扫描子程序,程序返回后,在变量H和L中存放当前按键的行列号KEY PROCCHECK:CMP PD,0JZ DISP1 DISP2: CALL DISP0 ;当按下的是运算符

28、时 要用另一个显示 JMP ANJIANDISP1: CALLDISP ;等待按键按下的同时进行显示 ANJIAN: MOVAL,0F0H ;所有行输出低电平OUT44H,ALINAL,40HCMPAL,0FFH ;读列值JZ CHECK ;若都为高电平则无键按下,等待MOVCX,50LOOP $ ;延时消抖INAL,40H ;重读列值CMPAL,0FFHJZCHECK ;无键按下一直等待MOVH,0 ;有键按下,先把行列号变量清0MOVL,0MOVBL,01HMOVBH,0FEH ;扫描法读键值:从第一行开始测试,即PC0输出低电平NEXT:MOVAL,BHOUT 44H,ALNEXTH:I

29、NAL,40H ;读列值,判断是第几列有键按下TESTAL,BL ;从第一列开始判断JZWAIT0ROLBL,1CMPBL,10H ;当前行状态下没有列有键按下,则转为对下一行的测试JZNEXTLINCH ;每判断一列,列号加1JMPNEXTH ;再对下一列进行判断NEXTL:MOVH,0MOVBL,01HROLBH,1 ;对下一行测试,让下一个PC口输出低电平CMPBH,0EFHJZEXITINCLJMPNEXTWAIT0:INAL,40H ;若有键按下,则等该按键松开后再计算键值CMPAL,0FFHJNZWAIT0MOVCX,50LOOP $ ;延时消抖INAL,40HCMPAL,0FFH

30、JNZWAIT0CALLKEYVALUE ;调计算键值子程序EXIT:RETKEY ENDP;以下为计算键值子程序,通过行列号计算键值(键值=行号*4+列号)键值存放在DL寄存器中KEYVALUE PROCPUSHBXPUSHAXMOVDL,LMOVDH,HSHLDL,1SHLDL,1 ;列号乘4ADDDL,DHCMPDL,9 ;按下的是数字键JNGNUM_CALLCMPDL,14JLCONT_CALL ;按下的是运算键CMPDL,14JZOUTP_CALL ;按下的是等于键CMPDL,15JZCLR_CALL ;按下的是清除键NUM_CALL: ;按下的是数字键的程序MOV PD,0CALL

31、NUMBER ;调数字键处理子程序JMPEXIT1CONT_CALL: ;按下的是运算建的程序MOVS,DL ;存放运算键的键值MOV PD,1 ;因为存放的是运算建,所以判断符号变一下MOVE,0MOV CX,6LEASI,NUMB0LEA DI,NUMB1MOV BX,0 LL:MOV AL,DIMOV SI,AL ;把number1中的值赋给number0 MOV AL,DI ; 当输入的是运算符时把number1中的数放到number2中,用于这时候的显示MOV NUMB2BX,AL ;这里BX对不对啊INC BXMOV AL,0MOVDI,AL ;对number1清零INCDIINC

32、 SILOOP LLJMPEXIT1OUTP_CALL: ;按下的是等号的子程序MOV PD,0CALLOUTP ;调等号键处理子程序JMPEXIT1CLR_CALL: ;按下的是复位的子程序MOV PD,0CALLCLEAR ;调清除键处理子程序EXIT1: ;最后都会到这里的,哈哈POPAXPOPBXRETKEYVALUE ENDP;以下为清除键处理子程序,按下清除键后,变量全部清0CLEAR PROCMOVCX,6MOV SI,0AA:MOV NUMB0SI,0 MOV NUMB1SI,0 MOV NUMB2SI,0MOVRESULTSI,0MOVRESULTSI+6,0INCSILOO

33、P AAMOVCC,0RETCLEAR ENDP;以下为等号键处理子程序,根据运算符号,调用相应的运算子程序;OUTP PROCPUSHAXPUSHDXPUSHBXINCECMPS,10JZADD_CALL ;运算符为加号,则调用加法子程序CMPS,11JZSUB_CALL ;运算符为减号,则调用减法子程序CMPS,12JZMUL_CALL ;运算符为乘号,则调用乘法子程序CMPS,13JZDIV_CALL;运算符为除号,则调用除法子程序ADD_CALL:CALLADDPJMPSTORE1SUB_CALL:CALLSUBPJMPSTORE1MUL_CALL:CALLMULPJMPSTORE1D

34、IV_CALL:CALLDIVPSTORE1:MOV SI,0MOV CX,6BB:MOVAL,RESULTSIMOV NUMB1SI,ALINCSILOOP BB MOV SI,0 ;对number0进行清零MOV CX,6BB1:MOV AL,0MOV NUMB0SI,ALINC SILOOP BB1POPBXPOPDXPOPAXRETOUTP ENDP;以下为数字键处理子程序;该程序,将输入的数据按位存放在NUMB1变量中,并由CC记录数据的位数NUMBER PROCPUSHBXPUSHAXCMPE,1JNZCONTINUEMOVE,0CALLCLEARCONTINUE:CALLBITP

35、CMPCC,0 ;目前数据为0位,即没有数据,则转到SSSJZSSSMOV SI,5EE:MOV AL,NUMB1SI-1MOVNUMB1SI,ALDECSICMPSI,0JNZEESSS:MOV NUMB10,DL ;将当前键入的数据存放到NUMB1的最低位INCCC ;数据位数加1CMPCC,6 ;判断数据位数JNGEXIT2MOVCC,0 ;如果数据超过6位,重新从最低位开始存放MOVNUMB15,0MOVNUMB14,0MOVNUMB13,0MOVNUMB12,0MOVNUMB11,0MOVNUMB10,0EXIT2: POPAXPOPBXRETNUMBER ENDP;加法程序ADDP

36、 PROCPUSHDXPUSHCXPUSHBXPUSHAXMOVBX,0MOVCX,6MOVDX,0;初始化ADD2:MOVAX,0 MOVAL,NUMB0BXADDAL,NUMB1BX; 先两数相加AAA;十进制转换MOVDH,AHMOVAH,0ADDAL,DL;再加低位进位AAAADDDH,AHMOVDL,DH;保护进位MOVRESULTBX,ALINCBXLOOPADD2CMPDL,1JZYC;溢出JMPGGYC: MOV CX,5MOV SI,5PP1:MOV RESULTSI,0HDEC SILOOP PP1MOV RESULT0,0FHGG:POPAXPOPBXPOPCXPOPDX

37、RETADDPENDP;减法程序SUBP PROCPUSHDXPUSHCXPUSHBXPUSHAXLEASI,NUMB0+5LEADI,NUMB1+5MOVCX,6AP:MOVAL,SICMPAL,DIJNZXPDECSIDECDILOOPAP;从高位找出第一位不相同的数的下标XP:MOVAL,SICMPAL,DIJAFUZHIJBCHGFUZHI:;正常赋值LEASI,NUMB0LEADI,NUMB1JMPSUB2CHG:;交换赋值LEASI,NUMB1LEADI,NUMB0SUB2:;减法开始MOVBX,0MOVCX,6MOVDX,0 MOV AH,0;初始化SUB1: MOV AH,0

38、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保护MOVRESULTBX,ALINCBXINCSIINCDILOOPSUB1;减法结束POPAXPOPBXPOPCXPOPDXRETSUBPENDP;乘法程序MULP PROCPUSHDXPUSHCXPUSHBXP

39、USHAXMOV CX,6 ;对RESULT清零。MOV DI,0CLL1:MOV RESULTDI,0 INC DILOOP CLL1MOVSI,0MUL2:;乘法开始,亦是大循环开始MOVAX,0;初始化MOVBX,0MOVCX,6MOVDX,0MOVDI,SIWP:MOVAH,0;小循环开始MOVAL,NUMB0BXMULNUMB1SIAAMMOVDH,AH;DH保护进位MOVAH,0ADDAL,DL;加上后一位的进位AAAADDDH,AH;DH保护进位MOVAH,0ADDAL,RESULTDI;加上结果里已有的数AAAMOVRESULTDI,ALADDDH,AH;DH保护进位MOVDL

40、,DH;DL保护进位INCBXINCDILOOPWP;小循环结束ADDRESULTDI,DL;小循环做完后,保护最高位INCSICMPSI,6JNEMUL2;大循环结束MOVSI,12DP:DECSI;判定溢出CMPRESULTSI,0JZDPCMPSI,5JAYC1;溢出JMPFFYC1:MOV CX,5;溢出赋值段MOV SI,5PP: MOV RESULTSI,0HDEC SILOOP PPMOV RESULT0,0FH;溢出赋值段结束FF:POPAXPOPBXPOPCXPOPDXRETMULPENDP;除法程序DIVPPROCPUSHDXPUSHCXPUSHBXPUSHAXMOV CX

41、,6 ;对RESULT清零。MOV DI,0CLL2:MOV RESULTDI,0 INC DILOOP CLL2MOV SI,5 MOV CX,6;初始化LP: CMP NUMB1SI,0 JNZ WT DEC SI LOOP LP;确定除数有几位WT: MOV DX,SI CMP DX,0FFFFH JZ YC2;除数位0,则溢出 CMP DX,5JZCMP1;当除数为6位时,不用移位,直接相减 MOV CX,5 SUB CX,DX PUSH DXLP1: MOV BX,DXLP2: MOV AL,NUMB1BX MOV NUMB1BX+1,AL DEC BX CMP BX,0FFFFH

42、JNZ LP2;移位 INC DX LOOP LP1 POP DX MOV CX,5 SUB CX,DX MOV BX,0LP3: MOV NUMB1BX,0 INC BX LOOP LP3;低位赋0CMP1: LEASI,NUMB0+5 LEA DI,NUMB1+5 MOV CX,6CMP2: MOV AL,SI CMP AL,DI;比较NUMB0与NUMB1的大小 JA JF;大于,相减 JB FZ;小于,往右移一位 DEC SI DEC DI DEC CX JNZ CMP2 JF: LEA SI,NUMB0;减法开始 LEA DI,NUMB1 PUSH DXMOVBX,0MOVCX,6M

43、OVDX,0 MOV AH,0DIV1: MOV AH,0 MOV DH,0MOVAL,SISUBAL,DIAAS CMP AH,0FFHJNZ JJMOV DH,1JJ:MOV AH,0SUB AL,DLAASCMP AH,0FFHJNZ MMMOV DH,1MM: MOV DL,DHMOVNUMB0BX,ALINCBXINCSIINCDILOOPDIV1POP DX MOV BX,5 SUB BX,DX INC RESULTBX;每减一次,对应RESULT的数加1 JMP CMP1;减法结束FZ: INC DX;移位过程的初始化 CMP DX,6 JZ ZT ;停止符号 MOV BX,1YW1: MOV AL,NUMB1BX;将除数向右移一位 MOV NUMB1BX-1,AL INC BX CMP BX,6 JNZ YW1 MOV NUMB15,0 JMP CMP1;移位结束 YC2:MOV CX,5MOV SI,5PP2:MOV RESULTSI,0HDEC SILOOP PP2MOV RESULT0,0FH ZT:POPAXPOPBXPOPCXP

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论