汇编语言课程设计报告——实现加减乘除四则运算的计算器
汇编语言课程设计报告 ( 2011 -- 2012 年度第 2 学期)
实现加减乘除四则运算的计算器
专业 计算机科学与技术 学生姓名 班级 学号 指导教师 完成日期 实现加减乘除四则运算的计算器 目 录 目 录 ...................................................................................................................... 2 1 概 述 ................................................................................................................... 1 1.1 设计目的 ............................................................................................................ 1 1.2 设计内容 ............................................................................................................ 1 2 系统需求分析 ........................................................................................................... 1 2.1 系统目标 ............................................................................................................ 1 2.2 主体功能 ............................................................................................................ 1 2.3 开发环境 ............................................................................................................ 1 3 系统概要设计 ........................................................................................................... 2 3.1 系统的功能模块划分 ........................................................................................ 2 3.2 系统流程图 ........................................................................................................ 3 4系统详细设计 ......................................................................................................... 3 5 测试 ......................................................................................................................... 4 5.1 测试方案 ............................................................................................................ 4 5.2 测试结果 ............................................................................................................ 4 6 小结 ......................................................................................................................... 5 参考文献 .................................................................................................................... 6 附 录 ...................................................................................................................... 7 附录 源程序清单 ....................................................................................................... 7 汇编语言设计课程设计
1 实现加减乘除四则运算的计算器
1 概 述 1.1 设计目的 本课程设计是在学完教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的汇编语言课程基本知识,进一步掌握汇编语言程序设计方法,提高分析问题、解决问题的综合应用能力。
1.2 设计内容 能实现加、减、乘、除的计算;该程序接受的是16进制数;执行时,需要在文件名后直接跟上计算表达式,如在命令提示符下执行结果如下: c:\tasm>js 3+2 5
2 系统需求分析 2.1 系统目标 本次汇编语言课程设计的最终目的是要实现一个简单加减乘除四则运算的计算器,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则运算。比如,十进制数的加减乘除四则运算。我们曾经学习过两个具体数字进行加减法运算,但是对于简单计算器用汇编语言实现难点在于这两个要做运算的数是未知的,是由自己调用中断输入到屏幕上并要用程序存储起来的数,然后才能对这两个数进行运算,而且做的是加法运算、减法运算乘法运算还是除法运算也未可知,为此我们还要判断用户所输入的运算是四则运算中的哪一个运算。此外,运算过程中的进位或是借位,选择用什么样的方式进行输出,如何实现清屏等也是要解决的问题。
2.2 主体功能 系统分析主要包括设计的功能分析和系统的流程,功能分析放在首位,每一个软件都要能满足一定的功能才有使用价值。根据功能需求来创建应用程序。 本设计的功能如下: 1、输入2个数,先判断是加减运算还是乘除运算,再进行计算 2、判断符号是否为运算符 3、回车为换行符 4、用十进制或十六进制输出运算结果
2.3 开发环境 TASM5.0集成环境 实现加减乘除四则运算的计算器 2 3 系统概要设计
3.1 系统的功能模块划分 本题目实现的模块图如图3-1所示
图3-1 概要模块 (1) 界面设置 主要实现确定界面样式的功能,以菜单形式显示。 (2) 选择算法设置 用于选择加、减、乘、除法来进行运算。 (3) 十进制转换设置 应用十进制的转换算法来处理加、减、乘、除法四则运算。
四则运算计算器程序设计 界面设置
选择算法设置 十进制转换设置 汇编语言设计课程设计
3 3.2 系统流程图
图3.2.1四则运算计算器执行过程流程图 4系统详细设计
4.1 界面设置 通过定义数据段,利用09H显示出功能列表。通过定义数据段,以字符串的形式输入每个提示信息,利用09H键盘输入并回显命令显示每一个功能提示,是计算器的功能列表有序清晰的显示在屏幕上。
4.2 选择算法设置 首先选择要进行的四则运算,若选择1,则进行加法;若选择2,则进行减法;若选择3,则进行乘法;若选择4,则进行除法。加法:先输入第一个小于4位十六进制数存入SI中,在输入第二个小于4位十六进制数存入BX中,然后显示BX 和
输入选择键x X=1? X=2? X=3? X=4?
十六进制加法 十六进制减法 十六进制乘法 十六进制除法
提示出错! X=0?
是 是
是
否
是 否 否 否
否
X=Y/y ?
否
是
是
开 始
结 束 实现加减乘除四则运算的计算器
4 [SI]中的内容相加存在BX中。减法:先输入第一个小于4位十六进制数存入SI中,在输入第二个小于4位十六进制数存入BX中,然后显示BX 和[SI]中的内容相减存在BX中,然后用NEG来求反,即为第一个数减去第二个数的差,显示BX的内容即为差。乘法:先输入第一个小于4位十六进制数存入SI中,在输入第二个小于4位十六进制数存入BX中,把BX的值给AX,然后让AX乘以[SI],然后再分别将DX,AX中的内容赋给BX,接着依次显示DX,AX的内容,即为积。除法:先输入第一个小于4位十六进制数存入SI中,在输入第二个小于4位十六进制数存入BX中,将[SI]赋给AX作被除数,让BX作除数,得到的商存放在AX中,余数放在DX中,然后依次赋给BX,将其依次显示即为商。
4.3 十进制转换设置 要完成十进制转换成十六,一般采用除十六取余法来完成,其大致过程如下:将待转换的数除以16得到第一个商和余数,此第一个余数就是所求的十六进制数的各位,再用第一个商除以16,得到第二个商和余数,此第二个余数就是所求十六进制数的十位,重复这一过程直至商为0,此时的余数就是所求十六进制数的最高位。在内存中分配一缓冲区,用来存放以上分离出来的使十进制数的每一位,然后再逐个转换成ASCII码,转换成ASCII码的过程很简单,就是给每个十六进制位加上30H即可,最后送显示器输出。
5 测试 5.1 测试方案 对程序源代码进行功能调试和功能验证。程序代码运行成功后,分别检验测试其加、减、乘、除功能,并对结果进行分析。当用户选择0时,输入Y或N决定是否退出程序。
5.2 测试结果 输入数字进行加减乘除运算,计算结果如下图所示:
汇编语言简易计算机设计
摘要汇编语言是为克服机器语言的缺点而引入的,是一种将机器语言指令符号化的编程语言,也称符号语言。
汇编语言,作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。
高级的汇编器为我们写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象等。
在这样的环境中编写的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。
虽然现在的汇编环境已经如此高级,即使全部用汇编语言来编写WINDOWS的应用程序也是可行的,但这不是汇编语言的长处。
汇编语言的长处还在于编写高效且需要对机器硬件精确控制的程序,而本次设计的简单计算器程序设计可以支持简单的四则运算。
关键词:汇编语言四则运算简易计算器目录1.系统需求分析 (1)1.1设计要求与目的 (1)1.2系统目标 (1)1.3功能分析 (2)2.系统概要设计 (3)2.1总体分析 (3)2.2系统框图 (3)2.2.1功能结构图 (3)2.2.2系统流程图 (3)3.程序说明 (5)3.1程序说明 (5)3.2主模块 (5)3.2.1主模块流程图 (5)3.2.2主模块程序代码 (6)3.3子模块 (9)3.3.1子模块流程图 (9)3.3.2子模块程序代码 (9)4.运行结果 (13)4.1运行软件emu8086简介 (13)4.2运行结果 (14)4.3算法分析 (16)4.4调试过程及分析 (16)5.心得体会 (17)6.参考文献 (18)1.系统需求分析1.1设计要求与目的(1)编写一个程序实现十进制加减乘除运算;(2)在命令提示后输入算式,运算符号不超过四个;(3)回车后进行计算并以十进制显示结果;(4)程序采用汇编语言在PC机上完成;(5)写出系统需求分析、原理图和程序实现流程图;(6)对结果进行分析;(7)要求阅读相关参考文献不少于5篇;(8)根据课程设计有关规范,按时、独立完成课程设计说明书。
通过本次的课程设计,加深对汇编语言的了解,应用《汇编语言程序设计》等所学相关知识及查阅资料,完成简单计算器程序设计,以达到理论与实践更好的结合、进一步提高综合运用所学知识和设计的能里的目的。
汇编大作业(四则运算器含代码)
汇编程序大作业云南大学软件学院实验报告指导教师 (签名):实验内容:1.设计一个功能完善的四则运算器:①程序有友好的运行界面;②可以方便的输入输出2,10,16进制数据(要求可以处理4位的数据);③可以方便的对数据进行四则运算;④要求程序能够处理基本的错误信息;⑤程序要求菜单控制;⑥其他程序简介:该程序采用了主程序、子程序、宏相结合的编写方式,通过主程序调用了加、减、乘、除的子程序,在这四个子程序中有分别调用了二、十、十六进制输入输出、进制间转化的子程序。
在数值转化为ASCII码的部分,定义了宏进行调整输出。
程序实现了16位的二进制、4位的十进制、4位的十六进制的加、减、乘、除运算,并可以通过用户的选择将其转化为其他相应的进制。
其中乘法运算的进制转化功能尚不完善,当运算结果超过4位时不能正确的将结果进行输出并进行进制转化。
子过程:addition:加法部分subtraction:减法部分multiplication:乘法部分division:除法部分b_in:二进制输入hd_in:十六进制、十进制输入b_out:二进制输出btod:二进制转化十进制并输出both:二进制转化十六进制并输出宏:btth:将数值转化为ASCII码保存算法说明:二进制计算时,要求输入0和1,从高到低为输入,将先输进的数*2+后输入的数,保存到寄存器中,如 1011则按((1*2+0)*2+1)*2+1十进制计算时,要求输入0-9的整数,从高到低输入,将先输进的数*10+后输进的数,保存到寄存器中,如9817 则按((9*10+8)*10+1)*10+7十进制计算时,要求输入0-F的整数,从高到低输入,将先输进的数*10H+后输进的数,保存到寄存器中,如AD17 则按((A*10H+D)*10H+1)*10H+7通过add、sub、mul、div等汇编指令进行计算。
二进制输出,从高位到低位按位依次保存到dl中,加30h后输出十进制输出,将结果分别除以10000、(上一步余数除)1000、(上一步余数除)100、(上一步余数除)10将商分别加30h后输出,将最后的余数加上30h后输出十六进制输出,从高到低每四位依次输出与9比较,大于9加37h调整,小于9加30h 调整程序流程及实验结果:主程序部分:提示用户进行运算符号的选择,并进行子程序部分的调用四则运算部分流程:四则运算的加、减、乘、除四部分子程序的流程大致相同,此处采用同一个流程图表示,该部分提示用户进行进制选择,跳转的相应位置并进行相应的运算,调用输入输出子程序,对结果进行进制转化二进制输入流程:该部分进行二进制数的输入,通过移位将先输入的数保存到高位,后输入的数保存到低位,将最终结果保存到bx中二进制输出:该部分将运算结果以2进制的形式输出,通过加30h将数值转化为ASCII码输出十、十六进制数的输入该部分实现十及十六进制数的输入,将最终结果保存到bx中;二进制转十进制并输出该部分通过将得到的二进制数求商取余的方式将最高位的取到商中并输出;二进制转十六进制:该部分通过移位的方式将二进制数转化为16进制输出,其中判断了所输出值与9的大小关系,大于9则加37h调整,小于9则加30h调整加法部分:二进制加法,并将结果转化为10进制二进制加法,并将结果转化为16进制:十进制加法,并将结果转化为二进制:十进制加法,并将结果转化为16进制:十六进制加法,并将结果转化为二进制:十六进制加法,并将结果转化为十进制减法部分:二进制减法,并将结果转化为十进制输出:二进制减法并将结果转化为十六进制输出:十进制减法,并将结果转化为二进制输出:十进制减法,并将结果转化为十六进制输出:十六进制减法,并将结果转化为二进制输出:十六进制减法,并将结果转化为10进制输出:乘法部分:二进制乘法,并结果转化为10进制输出:二进制乘法并将结果转化为16进制输出:十进制乘法并将结果转化为二进制输出十进制乘法,并将结果转化为16进制输出:十六进制乘法,并将结果转化为二进制输出:十六进制乘法,并将结果转化为十进制输出:除法部分:二进制除法,并将结果转化为十进制输出:二进制除法,并将结果转化为16进制输出:十进制除法,并将结果转化为二进制输出:十进制除法,并将结果转化为16进制输出:十六进制除法,并将结果转化为二进制输出:十六进制除法,并将结果转化为10进制输出:代码:data segmentnote1 db 'Input a-->add,b-->sub,c-->mul,d--div',0ah,0dh,'$'note2 db 0ah,0dh,'Input a-->binary,b-->decimal,c--hexadecimal',0ah,0dh,'$' note3 db 0ah,0dh,'Input addend' ,0ah,0dh,'$'note4 db 0ah,0dh,'Input another addend', 0ah,0dh,'$'note5 db 0ah,0dh,'The answer is',0ah,0dh,'$'note6 db 0ah,0dh,'Change the answer to a-->decimal,b-->hexadecimal,any other key-->exit',0ah,0dh,'$'note7 db 0ah,0dh,'Change the answer to a-->binary,b-->hexadecimal,any other key-->exit',0ah,0dh,'$'note8 db 0ah,0dh,'Change the answer to a-->binary,b-->decimal,any other key-->exit',0ah,0dh,'$'note9 db 0ah,0dh,'Input minuend', 0ah,0dh,'$'note10 db 0ah,0dh,'Input subtrahend', 0ah,0dh,'$'note11 db 0ah,0dh,'Input multiplicand' ,0ah,0dh,'$'note12 db 0ah,0dh,'Input another multiplicand' ,0ah,0dh,'$'note13 db 0ah,0dh,'Input dividend', 0ah,0dh,'$'note14 db 0ah,0dh,'Input divisor', 0ah,0dh,'$'num dw 0num1 dw 0num2 dw 0sig db ?data endscode segmentassume ds:data,cs:codestart:mov ax,datamov ds,axlea dx,note1mov ah,09hint 21hm1:mov ah,01hint 21hcmp al,'a'je adcmp al,'b'je subtcmp al,'c'je multcmp al,'d'je divijmp m1ad:call additionjmp over计算机组成原理与汇编语言程序设计(2013)subt:call subtractionjmp overmult:call multiplicationjmp overdivi:call divisionover:mov ah,01hint 21hmov ah,4chint 21haddition proclea dx,note2mov ah,09hint 21hmov ah,01hint 21hmov sig,alcmp al,'a'je b_addcmp al,'b'je d_addcmp al,'c'je h_addjmp a_endb_add:lea dx,note3mov ah,09hint 21hcall b_inmov num,bxlea dx,note4mov ah,09hint 21hcall b_inlea dx,note5mov ah,09hint 21hmov ax,numadd bx,axcall b_out;此处存在bug,若产生进位不能进行输出,需提示用户只进行15位的运算lea dx,note6mov ah,09hint 21hmov ah,01h计算机组成原理与汇编语言程序设计(2013)int 21hcmp al,'a'je btdcmp al,'b'je bthjmp a_endbtd:lea dx,note5mov ah,09hint 21hcall btodjmp a_endbth:lea dx,note5mov ah,09hint 21hcall btohjmp a_endd_add:lea dx,note3mov ah,09hint 21hcall hd_inmov num,bxlea dx,note4mov ah,09hint 21hcall hd_inmov ax,numadd bx,axpush bxlea dx,note5mov ah,09hint 21hcall btodlea dx,note7mov ah,09hint 21hmov ah,01int 21hcmp al,'a'je dtbcmp al,'b'je dthjmp a_enddtb:lea dx,note5mov ah,09h计算机组成原理与汇编语言程序设计(2013)int 21hpop bxcall b_outjmp a_enddth:lea dx,note5mov ah,09hint 21hpop bxcall btohjmp a_endh_add:lea dx,note3mov ah,09hint 21hcall hd_inmov num,bxlea dx,note4mov ah,09hint 21hcall hd_inmov ax,numadd bx,axlea dx,note5mov ah,09hint 21hcall btoh;此处存在bug,当产生进位是,不能对进位进行输出lea dx,note8mov ah,09hint 21hmov ah,01hint 21hcmp al,'a'je htbcmp al,'b'je htdjmp a_endhtb:lea dx,note5mov ah,09hint 21hcall b_outjmp a_endhtd:lea dx,note5mov ah,09hint 21hcall btod计算机组成原理与汇编语言程序设计(2013)jmp a_enda_end:retaddition endpsubtraction proclea dx,note2mov ah,09hint 21hmov ah,01hint 21hmov sig,alcmp al,'a'je b_subcmp al,'b'je d_subcmp al,'c'je h_subjmp s_endb_sub:lea dx,note9mov ah,09hint 21hcall b_inmov num,bxlea dx,note10mov ah,09hint 21hcall b_inmov ax,numxchg ax,bxsub bx,axlea dx,note5mov ah,09hint 21hcall b_outlea dx,note6mov ah,09hint 21hmov ah,01hint 21hcmp al,'a'je btdcmp al,'b'je bthjmp s_end计算机组成原理与汇编语言程序设计(2013)d_sub:lea dx,note9mov ah,09hint 21hcall hd_inmov num,bxlea dx,note10mov ah,09hint 21hcall hd_inmov ax,numxchg ax,bxsub bx,axpush bxlea dx,note5mov ah,09hint 21hcall btodlea dx,note7mov ah,09hint 21hmov ah,01hint 21hcmp al,'a'je dtbcmp al,'b'je dthjmp s_endh_sub:lea dx,note9mov ah,09hint 21hcall hd_inmov num,bxlea dx,note10mov ah,09hint 21hcall hd_inmov ax,numxchg ax,bxsub bx,axlea dx,note5mov ah,09hint 21hcall btohlea dx,note8计算机组成原理与汇编语言程序设计(2013)mov ah,09hint 21hmov ah,01hint 21hcmp al,'a'je htbcmp al,'b'je htdjmp s_ends_end:retsubtraction endpmultiplication proclea dx,note2mov ah,09hint 21hmov ah,01hint 21hmov sig,alcmp al,'a'je b_mulcmp al,'b'je d_mulcmp al,'c'je h_mulb_mul:lea dx,note11mov ah,09hint 21hcall b_inmov num,bxlea dx,note12mov ah,09hint 21hcall b_inmov ax,nummul bxmov num1,dxmov num2,axlea dx,note5mov ah,09hint 21hmov num1,dxmov bx,dxcall b_out计算机组成原理与汇编语言程序设计(2013)mov ax,num2mov bx,axcall b_outlea dx,note6mov ah,09hint 21hmov ah,01hint 21hcmp al,'a'je m_btdcmp al,'b'je m_bthjmp m_endm_btd:lea dx,note5;此处错误,尚需修改mov ah,09hint 21hmov dx,num1mov bx,dxcall btodmov ax,num2mov bx,axcall btodjmp m_endm_bth:lea dx,note5mov ah,09hint 21hmov dx,num1mov bx,dxcall btohmov ax,num2mov bx,axcall btohd_mul:lea dx,note11mov ah,09hint 21hcall hd_inmov num,bxlea dx,note12mov ah,09hint 21hcall hd_inmov ax,nummul bxpush ax计算机组成原理与汇编语言程序设计(2013)lea dx,note5mov ah,09hint 21hpop axpush axmov bx,axcall btodlea dx,note7mov ah,09hint 21hmov ah,01hint 21hcmp al,'a'je m_dtbcmp al,'b'je m_dthm_dtb:lea dx,note5mov ah,09hint 21hpop axmov bx,axcall b_outjmp m_endm_dth:lea dx,note5mov ah,09hint 21hpop axmov bx,axcall btohh_mul:lea dx,note11mov ah,09hint 21hcall hd_inmov num,bxlea dx,note12mov ah,09hint 21hcall hd_inmov ax,nummul bxpush axlea dx,note5mov ah,09hint 21h计算机组成原理与汇编语言程序设计(2013)pop axpush axmov bx,axcall btohlea dx,note8mov ah,09hint 21hmov ah,01hint 21hcmp al,'a'je m_htbcmp al,'b'je m_htdm_htb:lea dx,note5mov ah,09hint 21hpop axmov bx,axcall b_outjmp m_endm_htd:lea dx,note5mov ah,09hint 21hpop axmov bx,axcall btodm_end:retmultiplication endpdivision proclea dx,note2mov ah,09hint 21hmov ah,01hint 21hmov sig,alcmp al,'a'je b_divcmp al,'b'je d_divcmp al,'c'je h_divjmp d_endb_div:lea dx,note13计算机组成原理与汇编语言程序设计(2013)mov ah,09hint 21hcall b_inmov num,bxlea dx,note14mov ah,09hint 21hcall b_inmov ax,numcwdxor dx,dxdiv bxmov num1,axmov num2,dxlea dx,note5mov ah,09hint 21hmov bx,num1call b_outmov cx,6l:mov dl,'.'mov ah,02hint 21hloop lmov bx,num2call b_outlea dx,note6mov ah,09hint 21hmov ah,01hint 21hcmp al,'a'je d_btdcmp al,'b'je d_bthjmp d_endd_btd:lea dx,note5mov ah,09hint 21hmov bx,num1call btodmov cx,6l4:mov dl,'.'mov ah,02hloop l4mov bx,num2 call btodjmp d_endd_bth:lea dx,note5 mov ah,09hint 21hmov bx,num1 call btohmov cx,6l5:mov dl,'.'mov ah,02hint 21hloop l5mov bx,num2 call btohjmp d_endd_div:lea dx,note13 mov ah,09hint 21hcall hd_inmov num,bxlea dx,note14 mov ah,09hint 21hcall hd_inmov ax,numcwdxor dx,dxdiv bxmov num1,ax mov num2,dx lea dx,note5 mov ah,09hint 21hmov bx,num1 call btodmov cx,6l2:mov dl,'.'mov ah,02hint 21hloop l2mov bx,num2lea dx,note7 mov ah,09hint 21hmov ah,01hint 21hcmp al,'a'je d_dtbcmp al,'b'je d_dthjmp d_endd_dtb:lea dx,note5 mov ah,09hint 21hmov bx,num1 call b_outmov cx,6l6:mov dl,'.'mov ah,02hint 21hloop l6mov bx,num2 call b_outjmp d_endd_dth:lea dx,note5 mov ah,09hint 21hmov bx,num1 call btohmov cx,6l7:mov dl,'.'mov ah,02hint 21hloop l7mov bx,num2 call btohjmp d_endh_div:lea dx,note13 mov ah,09hint 21hcall hd_inmov num,bxlea dx,note14 mov ah,09hcall hd_in mov ax,num cwdxor dx,dxdiv bxmov num1,ax mov num2,dx lea dx,note5 mov ah,09h int 21hmov bx,num1 call btohmov cx,6l3:mov dl,'.' mov ah,02h int 21hloop l3mov bx,num2 call btohlea dx,note8 mov ah,09h int 21hmov ah,01h int 21hcmp al,'a' je d_htbcmp al,'b' je d_htdjmp d_endd_htb:lea dx,note5 mov ah,09h int 21hmov bx,num1 call b_out mov cx,6l8:mov dl,'.' mov ah,02h int 21hloop l8mov bx,num2 call b_out jmp d_endd_htd:lea dx,note5计算机组成原理与汇编语言程序设计(2013)mov ah,09hint 21hmov bx,num1call btodmov cx,6l9:mov dl,'.'mov ah,02hint 21hloop l9mov bx,num2call btodjmp d_endd_end:retdivision endpb_in procxor dx,dxmov bx,2mov cx,16bin2:mov ah,1int 21hxor ah,ahsub al,30hadd dx,axmov ax,dxcmp cx,1je bin1mul bxbin1:mov dx,axloop bin2mov bx,dxretb_in endpb_out procmov ch,8mov cl,1mov dh,bhbot1:rol dx,cland dl,01hadd dl,30hmov ah,02hint 21hdec chja bot1mov ch,8mov dh,bl bot2:rol dx,cland dl,01h add dl,30h mov ah,02h int 21hdec chcmp ch,0ja bot2retb_out endpbtth macroand dx,0div bxmov cx,dxadd al,30h mov dl,almov ah,02h int 21hmov ax,cx endmbtod procmov ax,bxmov bx,10000 btthmov bx,1000 btthmov bx,100 btthmov bx,10btthadd al,30h mov dl,almov ah,02h int 21hretbtod endpbtoh procxor dx,dxmov cl,4mov dh,bh bth1:rol dx,cl cmp dl,9ja bth3add dl,30h jmp bth4 bth3:add dl,37h bth4:mov ah,2int 21hxor dl,dl dec chcmp ch,0ja bth1mov dh,bl mov ch,2mov cl,4 bth2:rol dx,cl cmp dl,9ja bth5add dl,30h jmp bth6 bth5:add dl,37h bth6:mov ah,2int 21hxor dl,dl dec chcmp ch,0ja bth2retbtoh endphd_in procxor dx,dx cmp sig,'c' jne din3mov bx,16 jmp din4 din3:mov bx,10 din4:mov cx,4 din1:mov ah,01h int 21hxor ah,ahja hin1 sub al,30h jmp hin2 hin1:sub al,37h hin2:add dx,ax mov ax,dx cmp cx,1 je din2mul bxdin2:mov dx,ax loop din1 mov bx,dx rethd_in endpcode ends end start。
加减乘除四则运算
课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目: 加减乘除四则运算初始条件:从键盘接受16进制数。
能实现加、减、乘、除的计算。
执行时,需在文件名后直接跟上计算表达式。
按Q退出程序。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)设计任务及要求分析(2)方案比较及认证说明(3)系统原理阐述(4)硬件设计课题需要说明:硬件原理,电路图,采用器件的功能说明(5)软件设计课题需要说明:软件思想,流程图,源程序及程序注释(6)调试记录及结果分析(7)总结(8)参考资料(9)附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图时间安排:1月10日~1月12日:收集资料,方案选择1月13日~1月17日:整体流程,程序细节1月18日~1月20日:调试程序,报告撰写1月20:交设计报告,程序演示,答辩指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要 (1)1 设计任务及功能分析 (2)1.1 设计任务 (2)1.2 功能分析 (2)2 系统设计 (3)2.1系统的三大基本模块 (3)2.1.1界面设置 (3)2.1.2算法选择设置 (4)2.1.3数制转换设置 (4)2.2程序流程图 (5)3 程序的运行与调试 (6)4 小结与体会 (9)参考文献 (10)附录程序代码 (11)摘要在汇编语言程序设计时常用到四则运算,而汇编语言是低级语言,用它来实现四则运算较为困难。
本次设计利用DOS/BIOS的调用以及各种指令来实现输入十六进制的加减乘除运算,同时在屏幕上显示计算表达式,结果以十六进制输出。
汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。
汇编语言由于采用了助记符号来编写程序,比用机器语言的二进制代码编程要方便些,在一定程度上简化了编程过程。
汇编语言的特点是用符号代替了机器指令代码,而且助记符与指令代码一一对应,基本保留了机器语言的灵活性。
汇编语言课程设计
汇编语言课程设计1. 引言汇编语言是一种底层的编程语言,相比高级语言,它更接近计算机底层硬件。
学习汇编可以帮助我们深入理解计算机底层实现原理,对于提高我们的计算机编程能力有很大帮助。
本文将介绍我所设计的汇编语言课程项目。
2. 项目背景本项目的背景是我所在的大学计算机科学专业的汇编语言课程设计。
该课程设计的目的是让学生完成一个简单的汇编语言程序,对汇编语言编程有一个初步了解。
3. 项目内容我设计的汇编语言课程项目是一个简单的计算器程序。
该程序能够实现加减乘除四种基本运算。
该计算器程序将用户输入的两个数进行四则运算,并将结果输出。
程序具体实现过程如下:1.用户输入两个数2.用户输入运算符(+、-、*、/)3.程序进行相应的运算4.将运算结果输出4. 程序实现细节4.1 输入部分在IBM PC或IBM兼容机上的汇编程序中,BIOS提供了一个10号中断,用于从键盘读取单个字符。
可以使用该中断来实现从键盘输入数值和运算符。
具体来说,在程序中使用int 10h指令调用10号中断,该指令会将读取到的字符放入到AL寄存器中。
例如,要读取输入的第一个数,可以使用下面的汇编代码:xor ax, axmov ah, 0int 16h ;等待按键mov bh, 10 ;设置缓冲区大小为10lea di, num1 ;设置存放用户输入的缓冲区mov ch, 0 ;初始化输入计数器read_num:mov ah, 0 ;再次调用int 16hint 16h ;读取单个字符到AL寄存器cmp al, 0dh ;判断是否为回车键je read_num_donecmp al, 20h ;判断是否为空格je read_numcmp al, 30hjb read_numcmp al, 39hja read_nummov [di], al ;添加输入inc di ;移动指针inc ch ;计数cmp ch, bh ;缓冲区是否满了jne read_numread_num_done:mov [di], 0 ;字符串结束该代码段可以实现从键盘读取用户输入的第一个数,并存储到num1字符串中。
汇编语言 十进制加减法计算器课程设计
十进制加减法计算器单片机设计一、设计目的通过课程设计使学生更进一步掌握单片机原理与应用课程的有关知识,提高用汇编语言编程的能力,并将所学的内容加以综合。
通过查阅资料,了解所学知识的应用情况。
二、课程设计要求设计十进制加减法计算器。
要求能(不同时)显示3位输入和4位输出。
要求程序实现功能(1)十进制加减法计算:输入范围为(1~999),该程序输入两个定点数,每个3位,输出4位;A为加,B为减,C为等于,输出为四位计算结果。
数据输入采用规范化输入,即必须输入3个数才算完成一个运算数的输入,两个运算数之间输入运算符A或者B,输入完成按C显示计算结果。
(2)计算器复位功能:DEL均为清零重启,任何时候按下DEL中一个将重新开始。
三、硬件设计现实生活中人们熟知的计算器,其功能主要如下:(1)键盘输入;(2)数值显示;(3)加、减运算(此次只要求加减);(4)对错误的控制及提示。
此次计算器设计的最终结果是使其工作流程为:开机不显示,等待键入数值,键入三个数字,通过LCD显示出来,当键入+、-运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入三个数字将显示键入的数值,按等号就会在LCD上输出运算结果。
同时考虑到操作中可能出现的错误时,计算器会进行自动控制。
根据设计要求,选用8098 单片机为主控机。
通过扩展必要的外围接口电路,实现对计算器的设计。
此次设计的系统模块图如下,单片机输入模块运算模块显示模块具体设计考虑如下:1、单片机工作时电源引脚外接电源,工作电压为5V,同时本次设计通过内部振荡器和时钟发生器产生时钟信号。
2、8098单片机可寻址的存储器空间为64K空间,其内部仅带有只能用作寄存器的256个字节容量的RAM,所以在此设计过程中,需要外接存储器芯片,我们选用容量足够大的62128存储器芯片。
3、本次设计的接口电路采用8255可编程并行I/O芯片,8255A具有通常意义的接口所需要的基本功能,有着很强的适应性,此次设计中它起的作用是将显示器和键盘与单片机连接,通过向其控制寄存器送入控制字,以规定8255的工作方式和实现确定的功能,如本次设计的电路图,8255的A口、C口均工作于输出方式,而B口工作于输入方式。
数字计算器的汇编语言实现
数字计算器的汇编语言实现1 项目特点及目的本课程设计是一次程序设计方法及技能的基本训练,通过实际程序的开发及调试,巩固课堂上学到的关于程序设计的基本知识和基本方法,进一步熟悉汇编语言的结构特点和使用,达到能独立阅读、设计编写和调试具有一定规模的汇编程序的水平。
2 题目简介用8086汇编语言编写一个能实现四则混合运算、带括号功能的整数计算器程序。
程序能实现键盘十进制运算表达式的输入和显示(例如输入:“1+2*(3-4)”),按“=”后输出十进制表示的运算结果。
3 程序设计要求◆遵循模块化、结构化的编程思路◆程序必须正确运行◆程序简明易懂,多标明注释,具有良好的程序书写风格◆适当优化程序,提高程序的运行效率4 工作条件使用的设备及软件为8086兼容机及汇编开发软件。
5 题目分析根据题目要求,可以把程序的工作过程划分为运算表达式输入、计算、结果输出三部分。
因此在编写程序时可以按此把程序大致划分为三个模块。
5.1 运算表达式输入用户通过键盘输入的运算表达式为一个码字符串,字符串的最后一个字符是“=”号。
对于这个运算表达式,“+、-、*、/、(、)、0~9、=”是合法的表达式内容,其他的字符则是无法进行运算的非法内容,因此需要首先进行表达式合法性检查。
另外,由于计算机能进行计算的是2进制的补码,因此还需要把以码表示的数值转换为补码的形式并加以保存。
当然,控制运算方式的符号也要进行保存。
因此,“运算表达式输入”这个模块可以细化为:表达式合法性检查、数值的码到补码转换及保存、符号的保存三个小部分,如图6-1所示。
图6-1 “运算表达式输入”的流程图5.1.1 运算表达式合法性的检查方法观察“字符编码表”,可以发现“+、-、*、/、(、)”的码由28H到2,而“0~9”的码则由30H到39H,因此只需对输入的字符一个一个地进行数值范围比较,看看是否处于28H~39H这个范围里面,即可区分输入的表达式是否合法,流程图如图6-2所示。
关于计算器的C语言程序分析设计报告(简单的加减乘除)
关于计算器的程序分析设计报告吕艺玮学号: 9140007202051.问题描述:用C语言写出一个可以运行“+”、“-”、“*”、“/”、“%”、“^”的简易计算器,并且输入错误时能够报错。
2.问题分析:首先定义变量,利用if选择结构来确定是否报错,用switch语句来执行运算,应注意除法除数不能为零,取余时变量应为整数,且除数不能为零。
3.算法设计:4.实验结果及分析:分析:1).注意switch的用法;2).注意取余时应是整数取余; 3).注意除数不能为零。
5.结论:得到两个数的加、减、乘、除、乘方以及整数的取余,但不能涉及到第三个数,是一个简易的计算器,有很多值得改进的地方。
6.附源码:#include <stdio.h>#include <math.h>int main (){ float a,b;char k,s;int c,d;scanf ("%f%c%f%c",&a,&k,&b,&s);if (s=='=')switch (k){case '+' :printf("%g\n",a+b);break;case '-' :printf("%g\n",a-b);break;case '*' :printf("%g\n",a*b);break;case '/' :if (b=='0')printf ("Error!\n");elseprintf("%g\n",a/b);break;case '%' :if (b==0)printf ("Error!\n");elsec=(int)a;d=(int)b;printf("%d\n",c%d);break;case '^' :printf("%g\n",pow(a,b));break;default:printf("Error!\n");}else printf ("Error!\n");return 0;}。
VB课程设加减乘除计算器设计报告
加减乘除计算器设计报告学院机械工程班级机设054 学号050389 姓名成绩一、设计思路1.要达到的目的主要是培养学生利用系统提供的基本控件进行创新性设计,理解Visual Basic语言中面向对象的程序设计。
培养学生综合利用Visual Basic语言进行程序设计的能力。
2.关键问题的解决先使用Command命令按钮,命令按钮控件数组,文本框等基本控件设计窗体,再根据下面方法编制程序:1.连续输入新操作数的若干个数字时,采用txtDisplay.Text=txtDisplay.Text&Format$(Index)txtDisplay.Text= txtDisplay.Text&cmdNumber(Index).CaptiontxtDisplay.Text =txtDisplay.Text&Index2.对于正整数运算单击操作数的输入,需要设置一个逻辑变量,使其逻辑值为ture,准备新操作数的输入。
3. 当一个对象(本题指文本框)具有焦点时,在键盘上按键操作出发下面事件过程Private Sub Form_KeyPress(KeyAscii As Integer),在该过程中调用txtDisplay_KeyPressKeyAscii根据KeyAscii对应的字符,调用相应过程。
二、模块之间的调用关系,或程序流程图三、部分程序关键源代码及注释。
Private Sub Command10_Click()‘清空Text1,使操作数空Text1.Text=””num=””End SubPrivate Sub Command11_Click()If Text1.Text<>””ThenText1.Text=-1*Text1.Text 定义负号num=Text1.TextEnd IfEnd SubPrivate Sub Command2_Click(Index As Integer)num1=numText1.Text=””num=””C=IndexEnd SubPrivate Sub Command3_Click()EndEnd SubPrivate Sub Command4_Click()Text1.Text=Sqr(Val(Text1.Text)) ‘提示:当输入负,那么错,根号不可为负End SubPrivate Sub Command5_Click()Text1.Text=Val(Text1.Text)*Val(Text1.Text)End Sub三、设计方案的完善及目前存在的问题1.设计方案要完善的地方①增加高级函数运算功能②精炼程序2. 目前存在的问题①无法运算高级函数问题②退格键清除完数字报错四、本次设计的收获及心得体会通过几天辛苦的设计培养了我利用系统提供的基本控件进行创新性设计,理解Visual Basic语言中面向对象的程序设计。
汇编课程设计计算器
汇编课程设计计算器一、课程目标知识目标:1. 学生能理解汇编语言的基本概念,掌握计算器程序的基本结构。
2. 学生能运用汇编语言实现加、减、乘、除等基本运算。
3. 学生了解计算机内部运算的原理,理解寄存器、内存等硬件资源在程序执行过程中的作用。
技能目标:1. 学生能运用汇编语言编写简单的计算器程序,具备基本的编程能力。
2. 学生能通过调试和优化程序,提高计算器程序的执行效率。
3. 学生能运用所学知识解决实际计算问题,具备一定的实际问题分析解决能力。
情感态度价值观目标:1. 学生培养对计算机编程的兴趣和热情,增强学习动力。
2. 学生养成严谨、细致的学习态度,提高团队协作能力。
3. 学生认识到编程在日常生活和未来发展中的重要性,培养创新精神和实践能力。
分析课程性质、学生特点和教学要求,本课程将目标分解为以下具体学习成果:1. 学生能自主阅读汇编语言教材,理解计算器程序的基本结构。
2. 学生能独立编写简单的计算器程序,并通过调试和优化提高程序性能。
3. 学生能以小组形式合作完成复杂计算器程序的设计与实现,提高团队协作能力。
4. 学生在课程学习过程中,主动探索新知识,培养解决问题的能力和创新思维。
二、教学内容本课程教学内容主要包括以下几部分:1. 汇编语言基础知识:- 认识汇编语言,了解其发展历程和特点。
- 学习汇编语言的语法和基本指令。
- 了解计算机内部结构,理解寄存器、内存等硬件资源的作用。
2. 计算器程序设计:- 分析计算器程序的需求,明确功能模块。
- 学习汇编语言编写程序的基本方法,设计计算器程序框架。
- 掌握加、减、乘、除等基本运算的汇编实现。
3. 调试与优化:- 学习使用汇编语言调试工具,掌握调试技巧。
- 分析程序性能,提出优化方案。
- 实践优化过程,提高计算器程序执行效率。
4. 教学案例与实战:- 选取典型计算器案例,进行讲解和分析。
- 学生分组合作,完成复杂计算器程序的设计与实现。
- 组织课堂讨论,分享编程心得和经验。
四则运算计算器数字电路设计
四则运算运算计算器数字电路设计由于加减乘除计算器的各电路较复杂,就不将其组合在一起了,以下是各个加法,减法,乘法,除法计算器的单独电路图,其中输入均采用二进制四位输入。
一.加法计算器这个较为简单,可以直接利用中规模四位全加器74LS283,即可制成加法计算器。
电路图:A4 A3 A2 A1 为二进制被加数;B4 B3 B2 B1 为二进制加数;SUM4 SUM3 SUM2 SUM1 为二进制得数。
加上输入输出后如图所示:仿真图形为:前四个图像为被加数,中间四位为加数,后四位为得数。
由此可看出,已成功制成加法计算器。
二.减法计算器电路图:利用数据选择器和四输入与非门,可以实现减法计算器的功能,其中,C1 C2 C3 C4为四位二进制被减数输入端;B1 B2 B3 B4 为四位二进制减数输入端;输出端 27 26 25 24 为得数。
加上输入输出后如图所示:仿真图形如下:前四位为被减数,中间四位为减数,最下面四位为得数,由仿真图形可看出,已成功制成减法计算器。
三.乘法计算器利用中规模四位全加器74LS283和而输入与门可以实现乘法计算器功能。
其中,输入端4 3 2 1 为二进制四位被乘数,输入端5 6 7 8 为二进制四位乘数,输出端54 50 51 52 53 49 48 46 47为得数。
电路图如下:加上输入输出后:仿真图形为:1被乘数和乘数:2得数:由仿真图形可以看出,已成功制成了乘法计算器。
四.除法计算器这个实在是太难了,想了好久也没想到怎么设计,作业催的紧,就只好先不做了,请老师见谅,哈!以上就是四则计算器的数字电路设计与仿真。
