总汇编语言计算器课程设计.docx

上传人:b****6 文档编号:6174736 上传时间:2023-01-04 格式:DOCX 页数:15 大小:150.42KB
下载 相关 举报
总汇编语言计算器课程设计.docx_第1页
第1页 / 共15页
总汇编语言计算器课程设计.docx_第2页
第2页 / 共15页
总汇编语言计算器课程设计.docx_第3页
第3页 / 共15页
总汇编语言计算器课程设计.docx_第4页
第4页 / 共15页
总汇编语言计算器课程设计.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

总汇编语言计算器课程设计.docx

《总汇编语言计算器课程设计.docx》由会员分享,可在线阅读,更多相关《总汇编语言计算器课程设计.docx(15页珍藏版)》请在冰豆网上搜索。

总汇编语言计算器课程设计.docx

总汇编语言计算器课程设计

1.设计目标

运用汇编语言,制作一个计算的程序,实现简单计算器的一般功能,能够在DOS界面下进行简单的加、减、乘、除的简单计算。

程序应有操作提示、输入和输出。

自动闪烁光标,并提示输入信息。

输入正确的数值等符号后可以进行正确的运算,程序计算其结果值并输出。

程序无需查错功能,所输入的都是正确的四则运算表达式,并且表达式中运算分量均为无正负号整数,运算符为+、-、*、/,最后结果以十进制数表示。

且程序主界面需为一个由‘*’组成边框的矩形窗口。

汇编语言直接同计算机的底层软件甚至硬件进行交互,它具有如下一些优点:

能够直接访问与硬件相关的存储器或I/O端口;能够不受编译器的限制,对生成的二进制代码进行完全的控制;能够对关键代码进行更准确的控制;能够根据特定的应用对代码做最佳的优化,提高运行速度;能够最大限度地发挥硬件的功能。

2.软件设计

2.1程序设计的基本思想

主模块:

首先提供一个主界面,提示用户按要求输入具体的数据和所要进行的操作,输入完毕后给出结果。

如果输入过程中发现非法输入,则立即给与提示,程序自动刷新界面,提示继续输入。

计算显示完毕后,按提示选择是否要继续计算,不选择继续则结束。

对屏幕上输入字符串的接受,为INPUT语句段,见源代码,主要是将数字和运算符分开存放。

MATCH子程序,子程序内有三次跳转,将运算符选择正确的语句进行计算。

由于操作符只有+、-、*、/,没有涉及到括号,不用考虑括号的匹配问题。

流程图如下:

图1主模块流程图

子模块:

完成对数据的进一步加工处理,转换格式并得出结果。

首先根据输入调用对应的“+”、“-”、“*”、“/”四个函数模块,这是本程序的核心模块,其他部分的一些小模块都是为这几个模块服务的,大致的流程图如下图2:

图2子模块流程图

2.2代码

STACKSEGMENTSTACK

DB200DUP(0)

STACKENDS

DATASEGMENT

OPSDB?

OPDDB?

OPERDB?

TITDB'***********************************',0DH,0AH

DB'*MadeBy*',0DH,0AH;0DH代表回车

DB'*TongXinJiSuanQiXiaoZu*',0DH,0AH;0AH代表换行

DB'*ChangqianZuoxinWangxin*',0DH,0AH

DB'*WangdayongTangkuanlong*',0DH,0AH

DB'*+-*/*',0DH,0AH

DB'*Y,y:

continueN,n:

quit*',0DH,0AH

DB'*************Calculate*************$',0DH,0AH

Tip1DB'Inputthefirstoperator(0---9):

$',0DH,0AH

Tip2DB'Pleaseinputtheoper(+,-,*,/):

$',0DH,0AH

ErrorDB'Error!

Pleseinputtheoperagain:

$',0DH,0AH

Tip3DB'Inputthesecondoperator(0---9):

$',0DH,0AH

ResultDB'--------------->theresultis:

$',0DH,0AH

QuitDB'Chooserepeatorquit?

(Y/y/N/n):

$',0DH,0AH

TsaveDB?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

START:

MOVAX,DATA;初始化DS:

DX

MOVDS,AX

Remain:

MOVBL,0;Oper(恢复)初始状态

MOVOPS,BL

MOVOPER,BL

MOVOPD,BL

LEASI,OPS;OPS的偏移地址送给SI

LEADI,OPD;OPD的偏移地址送给DI

CALLEnter

LEADX,TIT

MOVAH,9

INT21H

CALLInput1;调用输入第一个操作数

CALLOperat;调用输入操作符

CALLInput2;调用输入第二个操作数

CALLCalculate;调用计算方法

CALLStrQuit;调用判断程序再次执行

MOVAH,1

INT21H

CMPAL,'Y'

JERemain

CMPAL,'y';选择Y返回Remain继续执行

JERemain

CMPAL,'N'

JEEXIT

CMPAL,'n'

JEEXIT

EXIT:

MOVAH,4CH;若不是Y则结束

INT21H

;输入操作数子程序---------------------------------------------------------

Input1PROCNEAR

CALLEnter

LEADX,Tip1;输入第一个操作数提示----------

MOVAH,9

INT21H;十进制输入提示

BCDin1:

MOVAH,1

INT21H

CMPAL,0DH

JEEndBCDin1;等于回车则返回继续输入运算符

CMPAL,30H

JBBCDin1;<0时转exitinD退出

CMPAL,39H

JABCDin1;>9时转exitinD退出

ANDAL,0FH;清除高位

MOV[SI],AL

INCSI

LOOPBCDin1

EndBCDin1:

CALLEnter;回车换行

RET

Input1ENDP

Input2PROCNEAR

CALLEnter

LEADX,Tip3;输入第二个操作数提示----------

MOVAH,9

INT21H;十进制输入提示

BCDin2:

MOVAH,1

INT21H

CMPAL,0DH

JEEndBCDin2;等于回车则返回继续输入运算符

CMPAL,30H

JBBCDin1;<0时转exitinD退出

CMPAL,39H

JABCDin1;>9时转exitinD退出

ANDAL,0FH;清除高位

MOV[SI],AL

INCSI

LOOPBCDin2

EndBCDin2:

CALLEnter;回车换行

RET

Input2ENDP

;输入操作符子程序-------------------------------------------------------

OperatPROCNEAR

ReOperat:

CALLEnter

LEADX,Tip2;输入操作符提示

MOVAH,9

INT21H

MOVAH,1

INT21H

CMPAL,'+'

JEOperSave;若为"+",则存在oper

CMPAL,'-'

JEOperSave

CMPAL,'*'

JEOperSave

CMPAL,'/'

JEOperSave

JMPOperError

OperError:

CALLEnter

LEADX,Error;输入操作符的错误提示

MOVAH,9

INT21H

JMPReOperat

OperSave:

MOVOPER,AL

RET

OperatENDP

;计算方法子程序-----------------------------------------------------

CalculatePROCNEAR

CALLEnter;回车换行

MOVBL,OPER

CMPBL,'+'

JZADCProc;若为加法,则转到adcProc

CMPBL,'-'

JZSUBProc

CMPBL,'*'

JZMULProc

CMPBL,'/'

JZDIVProc

ADCProc:

CALLStrResult;加法

MOVAL,OPS

ADCAL,OPD

CALLDispl

JMPendCalculate

SUBProc:

;减法

CALLStrResult

MOVAL,OPS

SUBAL,OPD

CALLDispl

JMPendCalculate

MULProc:

;乘法

CALLStrResult

MOVAL,OPD

MULOPS

CALLDispl

JMPendCalculate

DIVProc:

;除法

CALLStrResult

MOVAH,0

MOVAL,OPS

DIVOPD

CALLDispl

JMPendCalculate

endCalculate:

RET

CalculateENDP

DisplPROCNEAR

MOVTsave,AL

MOVAH,0

MOVAL,Tsave

MOVBL,100

DIVBL;除以100

CALLOutput;显示百位数

MOVAL,AH

MOVAH,0

MOVBL,10

DIVBL;除以10

CALLOutput;显示十位数

MOVAL,AH

CALLOutput;显示个位数

RET

DisplENDP

StrResultPROCNEAR

LEADX,Result

MOVAH,9

INT21H

RET

StrResultENDP

OutputPROCNEAR;十进制输出

PUSHAX

ADDAL,30H;将AL中的十进制数变成ASCII码

MOVDL,AL

MOVAH,2

INT21H

POPAX

RET

OutputENDP

;回车换行子程序--------------------------------------------------

EnterPROCNEAR

MOVDL,0AH

MOVAH,2

INT21H

MOVDL,0DH

MOVAH,2

INT21H

RET

EnterENDP

;判断程序再次执行子程序-----------------------------------------------

StrQuitPROCNEAR

CALLEnter;回车换行

LEADX,Quit

MOVAH,9

INT21H

RET

StrQuitENDP

CODEENDS

ENDSTART

3.系统调试

3.1测试目标

(1)在屏幕上显示一个由‘*’组成边框的矩形窗口;

(2)自动闪烁光标,并提示输入信息;

(3)能够完成单项表达式的输入、显示和运算;

(4)编制并调试出程序。

3.2测试方法及结果

单击开始,启动运行,输入cmd,启动命令提示符,进入DOS系统。

如下图:

图3启动命令提示符

源程序名存为qian.asm,在dos下进入F盘,再cdmasm进入masm文件夹,再键入masmqian(qian是源程序文件名)提示是否更改文件名(不改直接回车),系统会提示是否生成.lst文件和.crf文件(直接回车跳过),这样就生成了qian.obj键入linkqian(qian是源程序文件名),提示是否更改文件名(不改直接回车)提示是否生成.map和.lib文件(直接回车),这样就生成了qian.exe,再在DOS下键入qian(源程序文件名)就进入程序执行。

如图4:

图4执行方法

在计算器内,输入数字测试本程序的正确与否。

按照提示输入第一个十进制数,如“6”,回车。

下一步,会提示请输入运算符,如加“+”,回车。

最后一步,输入第二个十进制数,如“3”,回车。

则显示出其运算结果。

如下图5所示:

图5实现加法运算

同上,可实现减法、乘法、除法运算,分别如图6,图7,图所示8:

图6实现减法运算

图7实现乘法运算

图8实现除法运算

运算完毕后,会提示是否继续下一个运算,输入“Y”则继续运算,并返回主界面,输入“N”则结束程序。

当运算符输入不合法时,则会提示重新输入运算符,如下图9:

图9错误提示

4.总结

设计的这个程序主要是进行表达式的四则运算,由于操作符只有+、-、*、/,没有涉及到括号,因此设计起来要容易一点,不用考虑括号的匹配问题。

另外,跳转时汇编语言的一大难点,再编程之前最好要画出流程图,这样在写跳转时不容易出错,且不会出现重复操作语句段。

输入部分看似简单,实际要考虑到很多细。

比如一开始没想到存入的数据可能会符号存进内存后的相同;如何判段存数算法应该结束,对应的存入数和符号。

编写的五个子程序经编译、链接后,没有发现错误,可设计出的计算器程序出现一些不足,如本计算器只能进行一位十进制数的计算,也很少在计算的优先级,进制转化之间下功夫,致使计算器运算能力不足。

还有本程序只能判断输入的运算符的合法性,不能判断输入的十进制数的正确与否,即使错误,也显示提示下一步的操作。

参考文献

[1]詹仕华.汇编语言程序设计[M].北京:

中国电力出版社,2008.2:

73-102

[2]宋彩莉,王禾.汇编语言程序设计学习指导[M].西安:

西安交通大学出版社,2008.2:

45-87

[3]李敬兆,陈子旭.汇编语言程序设计[M].合肥:

中国科学技术大学出版社,2008.9:

173-197

[4]钱晓捷,周玲.新汇编语言程序设计[M].北京:

电子工业出版社,2006.3:

101-120

[5]周佩玲,彭虎,傅忠谦.微机原理与借口技术[M].北京:

电子工业出版社,2007.1:

113-141

[6]马春燕.微机原理与接口技术(基于32位机)实验与学习辅导[M].北京:

电子工业出版社,2007.1:

23-70

[7]何小海,严华.微机原理与借口技术[M].北京:

科学出版社,2006.7:

143-180

[8]王爽,胡雄.汇编语言[M].北京:

清华大学出版社,2009.9:

29-70

[9]曹加恒,谢子殿.新一代汇编语言课程设计[M].北京:

高等教育出版社,2006.3:

113-138

[10]杨路明.汇编语言程序设计[M].长沙:

中南大学出版社,2008.5:

173-203

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

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1