1、唐 山 学 院汇编语言与接口技术 课 程 设 计 题 目 简易计算器系统的设计与实现系 (部) 计算机科学与技 术系 班 级 07 计本 2 班 姓 名 胡珊珊 学 号 4070206202 指导教师 王永强 2010 年 1 月 4 日至 1 月 8 日 共 1 周2010 年 1 月 8 日汇编语言与接口技术 课程设计任务书一、设计题目、内容及要求1、设计题目:简易计算器系统的设计与实现2、设计内容及要求:设计一个可以进行十进制数四则运算的计算器。用按键输入数据;具有清零和复位功能;具有连续运算功能;对于 2 位数四 则运算用七段数 码管显示运算结果( 选做)。二、要求的设计成果(课程设计
2、说明书、 设计实物、图纸等)1、应用汇编语言编写程序实现应用程序的功能,并添加适当注释;利用通用微机接口实验箱完成电路的连接和调试通过;2、撰写课程设计说明书一份,不少于 2000 字。课程 设计说明书应包括封面、任务书、正文(程序功能与使用说明;设计原理和思路,包括电路原理图等;程序说明,包括流程图与算法参数说明等;)、参考文献( 资料)、附 录(源程序清单)等内容。三、进程安排1 月 4 日:查找分析资料,确定硬件逻辑原理图、确定各程序模块的功能;1 月 5 日6 日:完成设计,进行编程、 调试;1 月 7 日:进行程序测试,完善编码;撰写设计说明书,准备答辩1 月 8 日:答辩四、主要参
3、考资料1 钱晓捷,陈涛16/32 位微机原理、 汇编语言及接口技术 第 2 版北京:机械工业出版社,20052 沈美明,温冬蝉IBM-PC 汇编语言程序设计第 2 版北京:清华大学出版社,2005指导教师(签名): 教研室主任(签名):课程设计成绩评定表出勤天数 出勤情况缺勤天数出勤情况及设计过程表现(20 分)课设答辩(20 分)设计成果(60 分)成绩评定总成绩(100 分)提问(答辩)问题情况综合评定 指导教师签名:年 月 日唐山学院课程设计1.程序功能与使用说明1.1 程序功能本程序可以实现计算器的加、减、乘、除基本运算,并可以通过七段数码管显示运算结果。1.2 使用说明本程序可以进行
4、 100 以内的加、减、乘、除基本运算。具体使用方法:(1)根据屏幕提示,输入需要计算的两个数。(2)选择要进行哪种运算(1 加,2 减,3 乘,4 除) 。(3)屏幕自动输出计算结果并提示做出进一步选择(a 清零 b 继续 c 退出),若选择清零,则清除所有记录;若选择继续,则屏幕提示,继续输入需要计算的数字,并重复(2)的操作;若选择退出,则退出该计算器系统。(4)七段数码管自动显示运算结果。唐山学院课程设计2.设计原理与思路2.1 主程序的设计原理与思路主程序的设计,主要应用了汇编语言来完成。计算机进行计算和处理信息是通过执行指令序列来完成的。指令就是使计算机执行各种操作的命令,它是由包
5、括操作码和操作数两部分的二进制代码组成的。每种计算机都有自己的一组指令集,用来提供给用户使用。这种指令集称为计算机的指令系统。直接用计算机指令(即二进制代码)与计算机“交谈”时,计算机能够立即理解并执行。因此,人们称它为机器语言。不过,由于机器语言是二进制的,用它来编写程序,既繁琐又难以记忆,而且总是长长的一串 1 和 0,使用时很不方便。因此,就产生了汇编语言。汇编语言用操作内容的英文字的缩写符号代替二进制的操作码,用符号代替指令中的地址或操作数。例如,用 MOV 表示数据传送,用 ADD 表示加法等。若要将 100(64H)传送给累加器 AX,指令的机器代码是 B86400,用汇编语言格式
6、则写作 MOV AX,100。可以看出,这样不但便于记忆,书写起来也短小得多。因此,汇编语言又称为符号语言,它几乎与机器语言的指令一一对应。用汇编语言编写的程序,称为源程序。由于这种源程序不是二进制指令,计算机不能立即理解和执行,必须经过一个翻译者汇编程序(MASM)将它翻译成二进制指令后,才能被计算机识别和执行。本程序主要由加法运算、减法运算、乘法运算和除法运算四种基本的运算组成。其中,加法运算运用 ADD 指令运算,并通过 DAA 指令进行调整。减法运算运用 SUB 指令运算,并通过 DAS 指令进行调整。乘法运算和除法运算设置了两个标志位,分别为 flg1 和 flg2,将输入的数字转换
7、成 16 进制数字,再进行相应的运算。运算完成以后,屏幕会给出提示信息,主要分成三种选择:清零、继续和退出。如果选择清零,则清除原运算的记录;如果选择继续,则在原来的基础上,继续输入一个数字,进行需要的运算;如果选择退出,则直接退出本程序。由于本系统只能进行 100 以内的运算,所以,在进行运算之前,需要先进行判断,如果运算结果大于 99,则系统会提示错误,屏幕显示 error,译码器显示 EE。在进行除法运算时,如果除数为零,也会提示错误。本程序在进行编写时,由于程序较长,所以用了许多的转移指令,来防止程序跳转时出现错误。2.2 硬件的设计原理与思路本程序的硬件实现需要 8255 的支持。8
8、255 具有 24 条可编程输入输出引脚,分成 3 个端口:端口 A,端口 B,端口 C。每个端口都是 8 位,都可以编程设定为输入或输出端口,共有 3 种工作方式。3 个端口对应的引脚分别是 PA0-PA7、PB0-PB7 和 PC0-PC7。唐山学院课程设计通常,端口 A 和端口 B 作为输入输出的数据端口,而端口 C 作为控制或状态端口。这是因为端口 C 可分成高 4 位和低 4 位两部分,分别与数据端口 A 和B 配合使用,控制信号输出或状态信号输入。并且,端口 C 的 8 个引脚可直接按位置位或复位。本程序的初始化字为 28bh,实现采用 D0-D6 输入, cs*片选端连接 288
9、H,A口和 C 口同时输出并且 PA0-PA6 连接七段译码器的 a-g,PC0-PC1 连接 S0-S1。本程序的硬件实现原理图如图 2.1 所示图 2.1 硬件实现原理图S0S1 288H a b c d e f g PC0 PC1 PA0 PA1 PA2 PA3 PA4 PA5 PA6 CS*唐山学院课程设计3.程序说明3.1 程序的流程图本程序的流程图分为主程序(加法运算、减法运算、乘法运算、除法运算)和选择子程序两大部分。主程序的流程图如图 3.1 所示选择子程序主要分成三种选择:清零、继续和退出。如果选择清零,则清选择 4 吗进行除法运算NY输入数字选择 1 吗开始选择 2 吗选择
10、 3 吗NNYYY选择子程序结束图 3.1 主程序的流程图进行加法运算屏幕输出结果,译码管显示结果 进行减法运算屏幕输出结果,译码管显示结果进行乘法运算屏幕输出结果,译码管显示结果屏幕输出结果,译码管显示结果唐山学院课程设计除原运算的记录;如果选择继续,则在原来的基础上,继续输入一个数字,进行需要的运算;如果选择退出,则直接退出本程序。选择子程序的流程图如图 3.2 所示3.2 硬件的实现8255 是通用并行接口芯片,但在具体应用时,要根据实际情况选择工作方式,连接硬件电路,待进行初始化编程之后才能成为某一专用的接口电路。8255 的初始化编程比较简单,只需要一个方式控制字就可以完成 3 个端
11、口的设置。工作过程中,还需要对数据端口进行外设数据的读写。对控制字的写入要采用控制 I/O 地址:即 A1A0=11(即控制端口) ,外设数据的读写利用端口A、B 和 C 的 I/O 地址。本程序的初始化字为 28bh,实现采用 D0-D6 输入, cs*片选端连接 288H,A口和 C 口同时输出并且 PA0-PA6 连接七段译码器的 a-g,PC0-PC1 连接 S0-S1。选择 c 吗开始选择 a 吗清零Y 选择 b 吗继续退出NNYY暂存器清零结束继续输入数字选择进行1、2、3、4 哪种运算图 3.2 选择子程序的流程图唐山学院课程设计8255 具有 24 条可编程输入输出引脚,分成
12、3 个端口:端口 A,端口 B,端口 C。每个端口都是 8 位,都可以编程设定为输入或输出端口,共有 3 种工作方式。3 个端口对应的引脚分别是 PA0-PA7、PB0-PB7 和 PC0-PC7。8255 的流程图如图 3.3 所示有键按下吗N开始从 D0-D7 输入数据将数据自c 口、a 口均输出结束Y图 3.3 8255 的流程图唐山学院课程设计4.参考文献1 钱晓捷,陈涛16/32 位微机原理、汇编语言及接口技术第 2 版北京:机械工业出版社,20052 沈美明,温冬蝉IBM-PC 汇编语言程序设计第 2 版北京:清华大学出版社,2005唐山学院课程设计附录data segment s
13、tr db * welcome to use calculator * ,$ ;进入界面str1 db please enter number:,$ ;输入需要计算的数字str2 db please do your choose: 1,plus 2,minus 3,Multi 4,Division ,$ ;选择需要的运算str3 db result:,$ ;显示结果str4 db please do your choose: A,clear B,continue C,exit ,$ ;选择清零或继续或退出str5 db error,$ ;错误提示str6 db 3fh,06h,5bh,4fh,
14、66h,6dh,7dh,07h,7fh,6fh,0f9h ;数码管 0-9 及错误对应的代码值a db ? ;暂存输入的第一个数字b db ? ;暂存输入的第二个数字c db 2 dup(?) ; 定义存储单元,存储输出数据的 ascii 码d db ? ;暂存sign db 0 ;设置标志位data endscode segment assume cs:code,ds:datastart:mov ax,datamov ds,axmov ah,09h ;调用 09 号功能,输出一个字符串mov dx,offset strint 21hmov bl,0input:cmp sign,3 ;判断是否
15、为错误返回jne input1 ;重新输入需要计算的数字mov ah,07h ;不显示输入的字符int 21hinput1:mov a,bl ;a 赋值为 0mov dl,0ah ;换行mov ah,02hint 21hmov dl,0dh ;回车mov ah,02hint 21hmov ah,09hmov dx,offset str1 ;提示输入int 21hmov ah,01h ;键盘输入int 21h唐山学院课程设计sub al,30h mov b,al ;键盘接收的值赋给 bmov cl,4shl b,clmov ah,01hint 21hsub al,30hadd b,almov b
16、l,bcmp a,0 ;判断 a 是否被初始化mov si,0 je input1 ;若 a 未被初始化则循环choose1:mov dl,0ah mov ah,02hint 21hmov dl,0dh mov ah,02hint 21hmov ah,09hmov dx,offset str2 ;提示信息,选择需要的运算int 21hmov dl,0ah mov ah,02hint 21hmov dl,0dhmov ah,02hint 21hmov al,0mov ah,1 ;键盘接收int 21hcmp al,31h ;判断选择了哪种运算je add1cmp al,32hje minuscm
17、p al,33hje multicmp al,34hje divi2choose5:jmp choose1 add1: mov al,a ;加法运算mov bl,badd al,bldaajc error1jmp out1唐山学院课程设计choose4:jmp inputminus: mov al,a ;减法运算mov bl,bsub al,bldasjc error1jmp out1change:mov al,a ;将输入的数字转换成 16 进制数字,再进行相应的运算mov cl,4mov bl,alshr al,cland al,0fhmov dl,0ahmul dland bl,0fha
18、dd al,blmov dh,almov al,bmov cl,4mov bl,alshr al,cland al,0fhmov dl,0ahmul dland bl,0fhadd al,blmov bl,almov al,dhcmp sign,1 ;判断标志位je multi1cmp sign,2je divi1divi2:jmp divierror1:jmp error2multi:mov sign,1jmp change multi1:mul bl ;乘法运算cmp al,63h ;判断是否大于 99ja error1 ;大于 99,提示错误mov bl,0ahdiv blmov dl,
19、ahand ax,000fhdiv blmov al,ah唐山学院课程设计mov cl,4shl al,cland dl,0fhadd al,dljmp out1divi: mov sign,2jmp changedivi1:cmp bl,0 ;除法运算je error1 ;除数为零,提示错误and ax,00ffh div bland ax,00ffhmov bl,0ahdiv blmov dl,ahand ax,000fhdiv blmov al,ahmov cl,4shl al,cland dl,0fhadd al,dljmp out1out1: and ax,00ffh mov d,a
20、lmov cl,4mov bl,aland bl,11110000bshr bl,cladd bl,30hmov c0,bland ax,00ffhmov bl,aland bl,00001111badd bl,30hmov c1,blmov dl,0ahmov ah,02hint 21hmov dl,0dhmov ah,02hint 21hmov ah,09hmov dx,offset str3 ;显示计算结果int 21hjmp out2唐山学院课程设计choose3:jmp choose4out2: mov dl,csimov ah,02hint 21hinc sicmp si,2jne
21、 out2mov si,0 ;为 8255 的输出做准备mov cl,2mov dl,0ahmov ah,02hint 21hmov dl,0dhmov ah,02hint 21hmov ah,09hjmp out3error2:jmp errorchoose8:mov ah,07h ;不显示输入的字符int 21hchoose2:mov dl,0ahmov ah,02hint 21hmov dl,0dhmov ah,02hint 21hmov ah,09hmov dx,offset str4 ;提示信息,清零或继续或退出int 21hmov dl,0ahmov ah,02hint 21hmo
22、v dl,0dhmov ah,02hint 21hmov ah,1int 21hcmp al,61h ;判断做出了哪种选择,清零或继续或退出mov bl,0je choose3cmp al,62hmov bl,dje choose3cmp al,63hje cend1唐山学院课程设计jmp choose2choose6:jmp choose3 error: mov dl,0ah mov ah,02hint 21hmov dl,0dhmov ah,02hint 21hmov ah,09hmov dx,offset str5 ;数码管显示信息int 21hmov sign,3 ;判断标志位mov
23、c0,3ah mov c1,3ahjmp out3cend1:jmp cendchoose7:jmp choose8out3: mov dx,28bh ;8255 初始化mov al,80hout dx,alsub c0,30hsub c1,30hout4: mov bx,0mov dx,288h ;a 口地址mov al,csi ;si 需要定义lea bx,str6and ax,00ffhadd bx,axmov al,bxout dx,almov dx,28ah ;c 口地址mov al,cl ;cl 需要定义out dx,aldec clinc simov dx,28ah mov al,0 ;c 口置空,避免数据的闪烁out dx,alcmp si,2jne out4mov cl,2mov si,0sub al,0mov al,0mov ah,0bh ;判断是否有键盘输入唐山学院课程设计int 21hcmp al,0je out4cmp sign,3mov bl,0je choose6jmp choose7cend: mov ah,4chint 21hcode endsend start