微机原理简易计算器课程设计.
微机原理课程设计

微机原理课程设计一、引言微机原理课程设计是计算机科学与技术专业的一门重要课程,旨在通过实践项目的设计与实现,匡助学生巩固和应用所学的微机原理知识,提高他们的计算机系统设计和编程能力。
本文将详细介绍微机原理课程设计的标准格式,包括任务背景、设计目标、设计内容、设计步骤、设计结果和总结等部份。
二、任务背景本次微机原理课程设计的任务背景是设计一个简单的计算器程序,该程序能够实现基本的四则运算功能,并具备一定的错误处理能力。
通过该设计任务,学生将深入理解微机原理中的指令系统、寄存器和存储器等相关知识,并能够将其应用于实际的程序设计中。
三、设计目标本次微机原理课程设计的设计目标如下:1. 熟悉并理解微机原理中的指令系统、寄存器和存储器等基本概念;2. 能够使用汇编语言编写简单的计算器程序,并实现基本的四则运算功能;3. 具备一定的错误处理能力,能够对非法输入进行合理的处理和提示。
四、设计内容本次微机原理课程设计的设计内容包括以下几个方面:1. 硬件平台的选择:根据实际需求选择合适的硬件平台,如Intel 8086微处理器;2. 开辟环境的搭建:选择合适的开辟工具和汇编语言编译器,如MASM;3. 程序设计:根据设计目标,编写汇编语言程序,实现计算器的基本功能;4. 错误处理:设计合理的错误处理机制,对非法输入进行处理和提示。
五、设计步骤本次微机原理课程设计的设计步骤如下:1. 硬件平台的选择:根据实际需求选择合适的硬件平台,如Intel 8086微处理器,并搭建相应的开辟环境;2. 学习和理解指令系统:深入学习和理解所选择硬件平台的指令系统,包括指令的格式、寻址方式和功能等;3. 程序设计:根据设计目标,编写汇编语言程序,实现计算器的基本功能,包括输入数字、选择运算符、进行运算和输出结果等;4. 错误处理:设计合理的错误处理机制,对非法输入进行处理和提示,如输入非数字字符或者除数为零等;5. 调试和测试:对设计的程序进行调试和测试,确保其能够正确运行并满足设计要求。
微机原理课程设计(用8255A实现4位十进制计算器)

1 思考与练习题课程设计报告( 2012-- 2013年度第 1 学期)名称:微型计算机原理及应用题目:用8255A实现四位十进制数简单计算器院系:控制与计算机工程学院班级:自动化1003班学号:1101190302学生姓名:范昌指导教师:王震宇设计周数:一周成绩:同组人:贾旭郭欢刘玉婷日期:2013 年 1 月 5 日一、课程设计的目的与要求课程设计是培养和锻炼学生在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力的重要教学环节。
它具有动手、动脑和理论联系实际的特点,是培养在校工科大学生理论联系实际、敢于动手、善于动手和独立自主解决设计实践中遇到的各种问题能力的一个重要教学环节。
通过课程设计,要求学生熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,使学生得到微机开发应用方面的初步训练。
让学生独立或集体讨论设计题目的总体设计方案、编程、软件硬件调试、编写设计报告等问题,真正做到理论联系实际,提高动手能力和分析问题、解决问题的能力,实现由学习知识到应用知识的初步过渡。
通过本次课程设计使学生熟练掌握微机系统与接口扩展电路的设计方法,熟练应用8086汇编语言编写应用程序和实际设计中的硬软件调试方法和步骤,熟悉微机系统的硬软件开发工具的使用方法。
我组根据微机原理课程所学相关知识及实验教程相关内容,在基于proteus平台,使用汇编语言,以8086为核心的情况下,配合可编程并行接口器件8255A,LED数码管等器件实现可进行简单四位数加减乘除法功能的十进制计算器。
在课程设计实践中,我们不仅锻炼了实际动手能力,培养了团队精神和严肃认真的工作态度,更增强了自己在实际的工程设计中查阅资料,撰写设计报告表达设计思想和结果的能力。
二、课程设计进度及任务分工课设进度:1.选择课程设计题目,查阅相关资料。
(全体组员)2.需求分析及总体设计。
(全体组员)3.软硬件设计。
(范昌负责主程序的框架与整体调试、LED数码显示部分及硬件构架,贾旭负责键盘管理部分,郭欢、刘玉婷负责算法及相关程序)4.仿真调试。
微机原理课程设计

课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目:计算器初始条件:设计一个简单的计算器程序。
用汇编语言(8086/DOS)编计算器程序,所设计的计算器能实现加、减、乘、除的计算。
该程序接受的是10进制数。
执行时,直接用键盘输入数字和运算符,按等号键即可完成运算。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1. 具备计算器的界面,在屏幕上显示出来。
2. 实现按键的输入,能实现一位数的四则运算并能连续计算,以及实现有符号数的计算及清屏功能。
3.撰写符合学校要求的课程设计说明书,内容包括:摘要、目录、正文、参考文献、附录(程序清单)。
正文部分包括:设计任务及要求、方案比较及论证、软件设计说明(软件思想,流程,源程序设计及说明等)、程序调试说明和结果分析、课程设计收获及心得体会。
时间安排:1. 1月08日----1月10日查阅资料及方案设计2.1月11日----6月13日编程3.1月14日----6月16日调试程序4.1月17日----1月18日撰写课程设计报告5.1月19日上午准备答辩,下午正式答辩指导教师签名:年月日系主任(或责任教师)签名:年月日目录1 设计任务及要求 (1)2 总体方案论证 (1)3 程序流程图及其说明 (2)3.1 流程图 (2)3.2 流程图说明 (4)4 软件设计说明 (5)4.1 软件设计思想 (5)4.2主要功能程序段设计 (5)4.2.1 界面显示程序设计 (5)4.2.2 字符的输入存储和高亮显示设计 (6)4.2.3 加减乘除计算段程序设计 (11)5 程序调试 (13)6 心得体会 (14)参考文献 (16)附录(程序代码) (16)摘要汇编语言(AssemblyLanguage)是面向机器的程序设计语言,是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。
在汇编语言中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。
微机课设简易计算器

微机课程设计报告题目简易计算器仿真学院(部)信息学院专业通信工程班级2011240401学生姓名张静学号3312 月14 日至12 月27 日共2 周指导教师(签字)吴向东宋蓓蓓单片机十进制加法计算器设计摘要本设计是基于51系列的单片机进行的十进制计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除3位无符号数字的简单四则运算,并在LED上相应的显示结果。
软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。
编程语言方面从程序总体设计以及高效性和功能性对C语言和汇编语言进行比较分析,针对计算器四则运算算法特别是乘法和除法运算的实现,最终选用全球编译效率最高的KEIL公司的μVision3软件,采用汇编语言进行编程,并用proteus仿真。
引言十进制加法计算器的原理与设计是单片机课程设计课题中的一个。
在完成理论学习和必要的实验后,我们掌握了单片机的基本原理以及编程和各种基本功能的应用,但对单片机的硬件实际应用设计和单片机完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。
单片机课程设计既要让学生巩固课本学到的理论,还要让学生学习单片机硬件电路设计和用户程序设计,使所学的知识更深一层的理解,十进制加法计算器原理与硬软件的课程设计主要是通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试,最后仿真用户程序,来加深对单片机的认识,充分发挥学生的个人创新能力,并提高学生对单片机的兴趣,同时学习查阅资料、参考资料的方法。
关键词:单片机、计算器、AT89C52芯片、汇编语言、数码管、加减乘除目录摘要 (01)引言 (01)一、设计任务和要求.............................1、1 设计要求1、2 性能指标1、3 设计方案的确定二、单片机简要原理.............................2、1 AT89C51的介绍2、2 单片机最小系统2、3 七段共阳极数码管三、软件设计...................................4、1 系统设计四、调试与仿真.................................5、1 Keil C51单片机软件开发系统5、2proteus的操作五、心得体会....................................参考文献......................................... 附录1 系统硬件电路图............................ 附录2 程序清单..................................一、设计任务和要求1.1 设计要求本次课程设计,我选择的课题是单片机十进制加法计算器软硬件设计,设计任务为:设计一键盘显示装置,键盘上除需定义10个十进制数字键外还要相应的功能键,其它键不定义无响应。
微机技术原理课程设计报告

微机技术原理课程设计报告设计背景和目的:微机技术原理课程设计的主要目的是培养学生的计算机系统综合能力,通过设计和实现一个完整的微机系统,来加深学生对微机技术原理的理解,提高他们的动手能力和解决问题的能力。
本次课程设计的主题是设计一个简单的计算器程序,要求能够实现基本的四则运算功能以及其它一些扩展功能。
设计方案和流程:1. 确定系统需求:根据题目要求,确定计算器的基本功能为加减乘除四则运算,同时考虑到用户体验,还要加入其他一些功能,如开平方、取余等。
2. 确定系统架构:根据需求,确定使用的软件开发平台和工具,如C++编程语言和Visual Studio集成开发环境(IDE)。
3. 分解系统模块:根据计算器的功能,将系统分解为多个模块,如界面模块、算法模块和控制模块等。
4. 设计界面模块:根据用户交互需求,设计并实现计算器的用户界面,包括数字按钮、运算符按钮和结果显示区域等。
5. 设计算法模块:根据需求,设计并实现计算器的算法模块,包括加、减、乘除等基本运算算法,以及开平方、取余等扩展算法。
6. 设计控制模块:根据系统架构,设计并实现计算器的控制模块,用于协调界面模块和算法模块之间的交互,处理用户输入和计算结果的显示。
7. 调试和测试:在开发过程中,及时调试和测试各个模块的功能,确保各模块之间的协调正常,并对程序进行全面测试,保证程序的正确性和稳定性。
实施计划和进度安排:本次课程设计将分为多个阶段进行,每个阶段都有具体的任务和时间安排。
以下是整个设计的大致计划和进度安排:1. 第一周:确定系统需求,设计系统架构,完成界面模块的设计和实现。
2. 第二周:完成算法模块的设计和实现,完成控制模块的设计和实现。
3. 第三周:进行系统的集成测试和调试,解决存在的问题和bug。
4. 第四周:进行功能测试和性能测试,优化程序,准备最终的系统交付。
设计结果和实施效果:经过设计和实施,计算器程序可以实现基本的四则运算功能,并且还加入了一些扩展功能,如开平方、取余等。
简易计算器的课程设计

课程设计报告课程名称:单片机原理及应用课程设计题目:简易计算器设计学院:系:专业:班级:学号:学生姓名:起讫日期:指导教师:摘要单片机,全称单片微型计算机(英语:Single-Chip Microcomputer),又称微控制器(Microcontroller),是把中央处理器、存储器、定时/计数器(Timer/Counter)、各种输入输出接口等都集成在一块集成电路芯片上的微型计算机。
与应用在个人电脑中的通用型微处理器相比,它更强调自供应(不用外接硬件)和节约成本。
单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,但存储量小,输入输出接口简单,功能较低,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、电流、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。
采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。
本设计是基于STC89C52单片机进行的简易计算器系统设计,P1口作为输入端,外接4*4矩阵式键盘,通过在4*4矩阵式键盘输入,进行加、减、乘、除简单运算,实现-2147483647到+2147483647的结果运算,并且在P0口上的LCD1602液晶显示器显示相应的计算结果。
计算器是一种在日常生活中应用广泛的电子产品,无论是在超市商店,还是在办公室,或是家庭都有着它的身影。
如何使计算器变得越来越智能化已经成为电子领域研究的重要课题之一。
关键词:STC89C52、4*4矩阵式键盘、LCD1602 、计算器目录摘要 (1)一、设计任务、要求 (2)1.1、设计任务: (2)1.2、设计要求: (2)二、方案总体设计 (2)2.1、单片机的选择方案与论证: (2)2.2、按键输入的选择方案与论证 (2)2.3、显示模块的选择方案与论证 (3)2.4、按键音电路的选择方案与与论证 (3)2.5、总体设计,整体框架如图1 (3)3.1、单片机最小系统 (4)3.1.1、STC89C52 (4)3.1.2、复位电路 (5)3.1.3、时钟电路 (6)3.2、LCD液晶显示模块 (7)3.2.1、LCD1602基本介绍 (7)3.2.2、LCD1602基本参数及引脚功能 (8)3.2.3、LCD1602的指令说明及时序 (9)3.3、矩阵键盘 (9)3.3.1矩阵式键盘的结构与工作原理 (9)3.3.2、矩阵键盘识别方法 (10)3.3.3、本设计的矩阵键盘布局 (11)3.4、无源蜂鸣器电路 (11)3.5、整体电路 (12)四、软件设计 (13)4.1、程序设计方案和流程 (13)4.2、编程软件Keil (14)五、系统仿真与调试 (14)5.1、Proteus仿真原理图 (14)5.2、实物图 (16)六、设计总结、心得体会等 (18)七、参考文献 (19)附录 (20)元器件清单 (20)一、设计任务、要求1.1、设计任务:利用STC89C51、矩阵键盘、无源蜂鸣器、LCD1602实现具有简单“加、减、乘、除”的计算功能。
基于51单片机简易计算器课程设计报告

基于51单片机简易计算器课程设计报告
基于51单片机简易计算器课程设计报告
1. 研究背景
•计算器是人们日常生活和工作中常用的工具之一。
•通过设计简易计算器,可以加深学生对51单片机的理解和应用。
2. 目标和需求
•设计一个基于51单片机的简易计算器,能够进行基本的四则运算和开方运算。
•要求计算器能够显示输入和计算结果。
•要求计算器具备简单的界面和操作。
3. 设计方案
•使用51单片机作为计算器的控制核心。
•通过键盘输入数字和运算符,并显示在液晶屏上。
•根据输入的运算符,进行相应的计算,并将结果显示在液晶屏上。
4. 硬件设计
•使用51单片机作为主控芯片。
•连接液晶屏模块,用于显示输入和计算结果。
•连接键盘模块,用于输入数字和运算符。
5. 软件设计
•使用C语言进行编程。
•设计主程序,包括初始化、输入处理和计算输出等功能。
•设计函数,实现基本的四则运算和开方运算。
6. 实验结果
•成功设计并实现了基于51单片机的简易计算器。
•可以正常进行基本的四则运算和开方运算。
•输入和计算结果能够准确显示在液晶屏上。
7. 总结与展望
•通过设计这个简易计算器,学生对51单片机的理解和应用能力有了提高。
•下一步可以考虑增加更多的功能,如科学计算和数据存储等。
以上是本次基于51单片机简易计算器课程设计的报告。
通过这个实验,学生对51单片机的应用能力得到了提升,进一步增强了对计算器的理解。
在未来的课程设计中,可以进一步拓展功能,提升计算器的实用性和功能性。
简单计算机的设计

郑州航空工业管理学院微机原理课程设计说明书2007级电气工程及其自动化专业 1206972 班级题目简单计算机的设计指导教师职称学号1206972姓名二О一0 年六月十八日简易计算器的设计摘要: 1、课题:设计一个可以进行2位数的四则运算的计算器。
2、要求:(1)键输入数和运算符号;(2)LED显示运算过程和结果(十进制数);(3)表示出当前的运算类型;(4)具有清零和复位功能;(5)具有连续运算功能。
关键词:8279A芯片、74LS138译码器、74LS240芯片、小键盘、LED发光二极管。
一、简单计算器工作的基本原理:首先利用程序不断扫描键盘是不是有输入,如果没有就一直扫描,如果有就停止扫描,完成输入,利用汇编的程序核对输入键的数值,通过调用子程序进行2位数四则运算。
运算完成后将运算的结果储存并显示到LED显示器上。
通过键盘上的C键实现清零和复位功能。
在一次运算之后可以直接进行下一次运算无需复位。
二、设计方案1、硬件部分本次设计所选用的芯片为:8279A芯片、LED发光二极管、小键盘。
由于8279A 的输出电流与LED不匹配的问题,需要驱动电流,本实验中选择74LS240。
(1)、8279A芯片在本设计中用8279A芯片控制键盘输入和LED显示。
8279A芯片是一种通用的可编程序的键盘/显示接口器件,可与任何8位机接口,能完成键盘输入和LED显示控制两种功能。
采用8279作为键盘/显示器接口,则可以实现对键盘、显示器自动扫描,8279主要是管理键盘输入和显示器输出的。
8279可编程键盘显示器接口芯片具有动态显示驱动电路简单、不占用CPU 的时间、可自动进行键盘扫描、与计算机接口方便、编程容易、系统灵活等特点,是实时性较高的测控系统的首选器件之一。
(2)、74LS138译码器在本设计中74LS138译码器用来扫描计数器采用编码工作方式。
74LS138译码器的功能:74LS138是3/8译码器,即对3个输入信号进行译码,得到8个输出状态。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告课程设计名称:简易计算器系别:三系学生姓名:***班级:11通信1班学号:***********成绩:指导教师:袁静开课时间:2013-2014 学年 1 学期一.设计题目简易计算器二.主要内容1、采用模块化程序结构设计软件,可将整个软件分成若干功能模块。
2、画出程序流程图。
3、根据流程图,编写源程序。
4、上机调试程序。
三.具体要求1、利用BIOS和DOS的中断来设计一个计算器,要求在屏幕上显示一个主菜单,提示用户输入相应的数字键,分别执行加、减、乘、除四种计算功能和结束程序的功能。
2、利用BIOS中断的10号功能调用来设置显示方式。
3、利用DOS中断的01号和02号子功能来完成键盘接收,结果显示。
四.进度安排五.成绩评定考核方法:现场验收(占50%),课程设计报告(占50%)。
考核内容:学习态度(出勤情况,平时表现等)、方案合理性、程序编制质量、演示效果、设计报告质量。
成绩评定:优,良,中,及格,不及格。
特别说明:如发现抄袭,按照不及格处理。
目录前言 (4)1、设计题目 (5)2、设计内容 (5)2.1 基本内容 (5)2.2 主要功能 (5)3、设计原理及方案 (6)3.1 总体方案 (6)3.2 程序流程图 (7)3.2.1 主程序 (7)3.2.2 计算子程序 (8)3.3 系统模块详细设计 (9)3.3.1 界面设置 (9)3.3.2 算法选择设置 (10)3.3.3 数制转换设置 (11)4.汇编源程序代码 (13)5、调试运行结果 (20)5.1 操作说明 (20)5.2 调试运行结果 (20)6、心得体会 (23)7、参考文献 (24)前言课程设计是培养和锻炼学生在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力的重要教学环节。
它具有动手、动脑和理论联系实际的特点,是培养在校工科大学生理论联系实际、敢于动手、善于动手和独立自主解决设计实践中遇到的各种问题能力的一个重要教学环节。
计算器在我们日常生活中应用是相当普遍的,可以说它已经成为现代社会生活不可或缺的一部分。
本次课程设计就是根据微机原理与接口的相关知识,利用BIOS和DOS的中断来设计一个简易计算器,能够实现加减乘除四则运算,并在屏幕上显示一个主菜单,提示用户输入相应的数字键,分别执行加、减、乘、除四种计算功能和结束程序的功能。
同时利用BIOS中断的10号功能调用来设置显示方式,利用DOS中断的01号和02号子功能来完成键盘接收,结果显示。
通过本次课程设计,要求学生熟悉和掌握微机系统的软件的方法、设计步骤,使学生得到微机开发应用方面的初步训练,熟练应用8086汇编语言编写应用程序和实际设计中的软件调试方法和步骤,熟悉微机系统的软件开发工具的使用方法。
通过课程设计实践,不仅要培养学生事实求是和严肃认真的工作态度,培养学生的实际动手能力,检验学生对本门课学习的情况,更要培养学生在实际的工程设计中查阅资料,撰写设计报告表达设计思想和结果的能力。
1、设计题目简易计算器2、设计内容2.1 基本内容1、编写一个程序,能从键盘上读入数据,并完成加、减、乘、除的计算。
2、利用BIOS和DOS的中断来设计一个计算器,要求在屏幕上显示一个主菜单,提示用户输入相应的数字键,分别执行加、减、乘、除四种计算功能和结束程序的功能。
3、利用BIOS中断的10号功能调用来设置显示方式。
4、利用DOS中断的01号和02号子功能来完成键盘接收,结果显示。
2.2 主要功能一、显示主菜单功能主菜单如下:Please input a number to choose the arithmetic operation1—add 2—subtract 3—multiply4—divide q—return to DOS二、计算功能1、别按数字键“1”、“2”、“3”,则执行相应子模块1、2、3,进行两个字节与两个字节的加法、减法和乘法运算,并在屏幕上显示运算结果。
2、按数字键“4”,执行子模块4,进行两个字节除一个字节的除法运算,并显示结果。
3、按字母键“q”,执行子模块5,程序退出,返回DOS。
4、若按其它键则显示提示字符串:“Please Press Number 1、2、3、4、q:”,然后继续显示主菜单。
3、设计原理及方案3.1 总体方案利用BIOS中断的10号功能调用来设置显示方式。
利用DOS中断的01号、02号子功能来完成键盘接受、结果显示。
设置屏幕显示方式。
MOV AH,00HMOV AL,NUM (NUM为显示方式属性字)INT 10H接着从键盘上接受键值,并判别后转到相应的子模块进行运算,并显示结果。
MOV AH,01HINT 21H ;AL=键入字符的ASCII码从键盘上接收一串字符串命令:MOV AH,0AHMOV DX,OFFSET BUF ;BUF为数据段中定义的数据缓冲区INT 21H显示单个字符命令:MOV AH,02HINT 21H显示一串字符串的命令:MOV AH,09HMOV DX,OFFSET BUF ;BUF为被显示字符串的首地址INT 21H十进制数显示过程:将十进制数送到BX中,BX除以1000,余数送BX中,商在AL中,范围为0~9,显示AL中的内容。
BX除以100,余数送BX中,商在AL中,显示AL中的内容,依次类推,直到分出个位数字。
如最高位为0,则不应显示,而非最高位的0则显示。
可利用设标志位并结合商的方法来决定是否显示0。
3.2.1 主程序图3.1 主程序流程图图3.2 计算子程序流程图3.3 系统模块详细设计本次设计需要实现的模块图图如1所示图3.3 模块图(1)界面设置主要实现确定界面样式的功能,以菜单形式显示。
(2)算法选择设置用于选择加、减、乘、除来进行运算。
(3)数制转换设置应用十进制——二进制的转换算法来处理加、减、乘、除四则运算。
3.3.1 界面设置1、设置屏幕显示方式:MOV AH,00HMOV AL,2INT 10H通过调用BOIS的O2H号功能来设置屏幕显示方式。
此处AL=2,即设置屏幕显示方式为80*25黑白文本。
2、显示主菜单:DOS不仅为用户提供了许多指令,而且还有用户可以直接调用的上百个常用子程序。
这些子程序的功能主要是进行磁盘读/写、基本输入/输出管理等。
在使用时,用户只需要了解各个子程序的编号即可,这些编号成为DOS功能调用号。
其调用过程为:(1)DOS功能条用号送AH寄存器。
(2)如果需要,按要求给定输入参数(由得不需要输入参数)。
(3)写入中断指令“INT 21H”。
调用结束,按功能使用其输出参数。
本程序主菜单显示代码如下:MOV AH,09HMOV DX,OFFSET TOPINT 21H先在数据段中定义主菜单中要显示的字符串,再通过调用DOS系统的09H号功能——显示字符串(串尾字符为$,但不显示)来完成。
3.3.2 算法选择设置汇编语言中加减乘除运算指令分别为ADD、SUB、、MUL、DIV。
首先选择要进行的四则运算,规定:若选择1,则进行加法;选择2,则进行减法;选择3,则进行乘法;选择4,则进行除法。
具体计算过程分析如下:1、从键盘接收一个数字:MOV AH,01HINT 21H通过调用DOS系统的01H号功能——键入字符并回车来实现,其出口参数为键入字符的ASCII码,存在AL中。
2、接收键入用于计算的数:MOV AH,0AHMOV DX,OFFSET BUF1通过调用DOS系统的0AH号功能——键入字符串至内存缓冲区来实现,其入口参数如下:DS:DX=存放键入字符串的缓冲区的首地址;(DS:DX)=用户规定的缓冲区;(DS:DX+1)=实际键入的字符数;从(DS:DX+2)开始放键入的字符串。
因此,在下面的程序中运用所键入的数字时要注意字符串的首地址。
3、显示结果:MOV AH,09HMOV DX,OFFSET BUF3INT 21H将结果存入数据段中定义的缓冲区BUF3中,再通过调用DOS系统的09H号功能——显示字符串(串尾字符为$,但不显示)来完成。
3.3.3 数制转换设置1、子程序A2——将数的ASCII码转为二进制数:A2 PROC NEARMOV CL,BUF1+1 ;把BUF1+1中的实际键入的字符数放入CLMOV CH,0 ; CH清零MOV BX,OFFSET BUF1+2 ;把第一个数字的地址放在BX PUSH BX ;保存BX中的值PUSH CX ;保存CX中的值L1: MOV AL,[BX]AND AL,0FH ;把ASCII码转换为十进制MOV [BX],AL ;存放十进制INC BX ;下一个数字的地址LOOP L1POP CX ;恢复CXPOP BX ;恢复BXMOV AX,0 ;将累加和赋零MOV SI,10L2: MUL SIADD AL,[BX]ADC AH,0INC BXLOOP L2 ;累加乘10L3: RETA2 ENDP入口:十进制数的ASCII在BUF1内;出口:转换后的二进制数在AX内。
算法:先将其转换为十进制,再用累加和乘10加X的方法变为二进制,如将163转换为二进制数,可先将累加和赋0,再计算(((0*10+1)*10+6)*10+3)结果为二进制数。
2、将计算结果的二进制数转换为对应的十进制数ASCII码并输出显示(A3程序段):该模块的程序设计详见程序清单及说明中A3、BB程序段入口:二进制数在AX内;出口:转换后的ASCII码在BUF内。
算法:AX内的数范围在+32767到-32768之间,先检查AX符号位,决定输出‘+’‘-’,若为负,先求补码得到原码后可与正数统一处理。
方法:把将被转换的二进制数先除以10000,商为万位数,再将余数除以1000,商为千位数,以此类推,求出百十位数,剩下的为个位数。
最后各个数加上30H,即为对应字符。
4.汇编源程序代码DATA SEGMENTN=15TOP DB 5 DUP(0AH)DB N DUP(' '),' Please input a number to choose the arithmetic operation', 0DH,0AHDB N DUP(' '),' ', 0DH,0AHDB N DUP(' '),'1—add 2—subtract 3—multiply', 0DH,0AHDB N DUP(' '),'4—divide q—return to DOS', 0DH,0AHDB N DUP(' '),' ', 0DH,0AHDB N DUP(' '),'Choice (1.2.3.4.q):$'MESG1 DB 0DH,0AH,'Please press number: 1.2.3.4.q !$'MESG2 DB 0DH,0AH,'Please input the first number :$'MESG3 DB 0DH,0AH,'Please input the second number :$'MESG4 DB 0DH,0AH,'Play Add :$'MESG5 DB 0DH,0AH,'Play Subtract :$'MESG6 DB 0DH,0AH,'Play Multiply :$'MESG7 DB 0DH,0AH,'Play Divide :$'MESG8 DB 0DH,0AH,'The Result :$'MESG9 DB 0DH,0AH,'PRESS Q RETURN DOC,ANY PRESS RETURN START!$'BUF1 DB 6 ; 十进制数的缓冲区,可接收6个字符DB ? ; 保留,用于10号调用时DOC填入实际输入字符数DB 6 DUP(?) ; 一个符号位,四位数字ASCII码,加上一个回车符BUF2 DW ? ; 将第一个数转换为二进制后,放于这里BUF3 DB 6 DUP(?),'$' ; 将结果转换为ASCII码后,放在这里DATA ENDSSTACK SEGMENT STACK'STACK'CODE SEGMENTASSUME CS:CODE , DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AH,00H ; 设置屏幕显示方式MOV AL,2INT 10HMOV AH,09H ; 显示菜单MOV DX,OFFSET TOPINT 21HAA: MOV AH,01H ; 从键盘接收一个数字INT 21HCMP AL,'1' ; 与1比较JNE NEXT1 ; 不等于1就转到NEXT1 JMP JIA ; 等于1就转到加法程序NEXT1: CMP AL,'2' ; 与2比较JNE NEXT2 ; 不等于2就转到NEXT2 JMP JIAN ; 等于2就转到减法程序NEXT2: CMP AL,'3' ; 与3比较JNE NEXT3 ; 不等于3就转到NEXT3 JMP CHENG ; 等于3就转到乘法程序NEXT3: CMP AL,'4' ; 与4比较JNE NEXT4 ; 不等于4就转到NEXT4 JMP CHU ; 等于4就转到除法程序NEXT4: CMP AL,'q' ; 与q比较JNE NEXT5 ; 不等于q就转到NEXT5 MOV AH,4CH ; 回DOSINT 21HNEXT5: MOV AH,09H ; 显示MESG1MOV DX,OFFSET MESG1INT 21HJMP AA ; 跳到AAA1 PROC NEARMOV AH,09H ; 提示输入第一个数MOV DX,OFFSET MESG2INT 21HMOV AH,0AH ; 接收第一个数MOV DX,OFFSET BUF1INT 21HCALL A2 ; 调用A2进行ASCII-二进制的转换 MOV BUF2,AX ; 把第一个数转换的二进制放在BUF2MOV AH,09H ; 提示输入第二个数MOV DX,OFFSET MESG3INT 21HMOV AH,0AH ; 接收第二个数MOV DX,OFFSET BUF1INT 21HCALL A2 ; 调用A2把第二个数进行ASCII-二进制转换RETA1 ENDPA2 PROC NEARMOV CL,BUF1+1 ; 把BUF1+1中的实际键入的字符数放入CLMOV CH,0 ; CH清零MOV BX,OFFSET BUF1+2 ; 把第一个数字的地址放在BXPUSH BX ; 保存BX中的值PUSH CX ; 保存CX中的值L1: MOV AL,[BX]AND AL,0FH ; 把ASCII码转换为十进制MOV [BX],AL ; 存放十进制INC BX ; 下一个数字的地址LOOP L1POP CX ; 恢复CXPOP BX ; 恢复BXMOV AX,0 ; 将累加和赋零MOV SI,10L2: MUL SIADD AL,[BX]ADC AH,0INC BXLOOP L2 ; 累加乘10L3: RETA2 ENDPJIA: MOV AH,09H ; 加法程序MOV DX,OFFSET MESG4INT 21HCALL A1 ; 调用A1ADD AX,BUF2 ; 把转换后的放在BUF2中的第一个数和放在AXJMP A3 ; 的第二个数相加JIAN: MOV AH,09H ; 减法程序MOV DX,OFFSET MESG5INT 21HCALL A1MOV BX,AX ; 把转换后的放在AX的第二个数放到BXMOV AX,BUF2 ; 把转换后放在BUF2中的第一个数放到AXSBB AX,BX ; 两数相减JMP A3CHENG: MOV AH,09H ; 乘法程序MOV DX,OFFSET MESG6INT 21HCALL A1MOV BX,AX ; 把转换后的放在AX的第二个数放到BXMOV AX,BUF2 ; 把转换后的放在BUF2中第一个数放到AXMUL BX ; 两数相乘JMP A3CHU: MOV AH,09H ; 除法程序MOV DX,OFFSET MESG7INT 21HCALL A1MOV DX,AX ; 把转换后的放在AX的第二个数放到DXMOV AX,BUF2 ; 把转换后的放在BUF2中第一个数放到AXDIV DL ; 两数相除,商在AL里MOV AH,0H ; 使AH清零JMP A3A3: MOV BUF3,'+' ; 把BUF3放'+'CMP AX,0 ; 把结果于0比较JGE L4 ; AX>0转到 L4NEG AX ; AX<0将AX取反MOV BUF3,'-' ; 把BUF3放'-'L4: CWDMOV BX,10000DIV BX ; 商为第一位数字放在AL,余数放在DXCALL BBMOV BUF3+1,AL ; 把第一个数放在BUF3+1单元中MOV AX,DX ; 把放在DX中的余数放到AXCWDMOV BX,1000DIV BX ; 商为第二位数字放在AL,余数放在DXCALL BBMOV BUF3+2,AL ; 把第二个数放在BUF3+2单元中MOV AX,DX ; 把放在DX中的余数放到AXMOV BL,100DIV BL ; 商为第三位数字放在AL,余数放在AHCALL BBMOV BUF3+3,AL ; 把第三个数放在BUF3+3单元中MOV AL,AH ; 把放在AH 中的余数放到ALCBWMOV BL,10DIV BL ; 商为第四位数字放在AL,余数放在A CALL BBMOV BUF3+4,AL ; 把第四个数放在BUF3+4单元中ADD AH,30H ; 把个位转为ASSCII码MOV BUF3+5,AH ; 把第五个数放在BUF3+5单元中MOV AH,09H ; 提示结果MOV DX,OFFSET MESG8INT 21HMOV AH,09HMOV DX,OFFSET BUF3 ; 把放在BUF3缓冲区中的结果显示出来INT 21HMOV AH,09H ; 提示是返回DOS还是重新计算MOV DX,OFFSET TOPINT 21HJMP NEXT5 ; 其他数字重新计算BB PROC NEARCMP AL,0H ; 与零比较JE L5JMP L6L5: MOV AL,20H ; 等于零,赋AL空格JMP L7L6: ADD AL,30H ; 不等于零,把数转为ASSCII码L7: RETBB ENDPA4: MOV AH,4CH ; AL等于'Q'就返回DOSINT 21HCODE ENDSEND START5、调试运行结果5.1 操作说明(1)按提示输入1,2,3,4。