简单计算器设计.docx

上传人:b****1 文档编号:2451049 上传时间:2022-10-29 格式:DOCX 页数:24 大小:88.05KB
下载 相关 举报
简单计算器设计.docx_第1页
第1页 / 共24页
简单计算器设计.docx_第2页
第2页 / 共24页
简单计算器设计.docx_第3页
第3页 / 共24页
简单计算器设计.docx_第4页
第4页 / 共24页
简单计算器设计.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

简单计算器设计.docx

《简单计算器设计.docx》由会员分享,可在线阅读,更多相关《简单计算器设计.docx(24页珍藏版)》请在冰豆网上搜索。

简单计算器设计.docx

简单计算器设计

中北大学

课程设计任务书

10/11学年第二学期

学院:

信息与通信工程学院

专业:

自动化

学生姓名:

张欣宇

学号:

0805054116

课程设计题目:

简单计算器设计

起迄日期:

2011年6月20日~2011年6月24日

课程设计地点:

中北大学

指导教师:

张艳兵、张秀艳

系主任:

王忠庆

 

下达任务书日期:

2011年6月19日

课程设计任务书

1.设计目的:

用汇编语言编程设计一个简单的计算器,实现两个运算数的键盘输入和加减乘除运算,并显示运算结果。

通过设计,掌握键盘输入、屏幕显示和算术运算指令的应用,进一步提高综合运用知识的能力。

2.设计内容和要求(包括原始数据、技术参数、条件、设计要求等):

(1)要求键盘输入2位十进制数,进行加减乘除运算,并在屏幕上显示出运算结果。

(2)选择方案,画出流程图。

(3)编写汇编语言源程序,并调试。

(4)写出设计说明书。

3.设计工作任务及工作量的要求

(1)查阅资料,确定设计方案

对任意给定的正确四则运算表达式,能按照括号、加减乘除计算的优先级,正确计算其结果值并输出。

且能计算的正确数据范围为16位无符号数,即结果只能在0~65535之间,否则错误。

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

根据要求,首先需要从DOS界面输入用户的四则混合表达式,其中包括括号(或),数字,运算符+,-,*,/。

因为用户从键盘输入的是ASCII码,因些需要做相应的转换。

例如将字符串123转化为十进制的值123。

其次,需要对(,),+,-,*,/的优先级进行判断。

(2)画出程序流程图

子过程详细说明

1compare子函数用于判断键盘输入的符号是否合法,若合法,则在屏幕上显示,否则报错

2mult子函数用于对输入的数字进行乘10累加操作,以便将连续输入的数字字符串转换为相对应的数值

3trans子函数核心算法,将输入的中缀表达式转换为后缀表达式

4value子函数核心算法,将后缀表达式结合堆栈结构进行表达式求值

5divi子函数辅助子过程,通过除以10以及进一步处理将某数值转换为相应的ASCII字符串按照个十百位

6print子过程配合divi子过程,将表达式求值结果输出到屏幕上

测试程序:

经过编译,调试,连接

(3)编写并调试汇编语言源程序

用到中断向量表如图所示

STACKSEGMENTPARASTACK

DW256DUP(0)

STACKENDS

DATASEGMENT

STRIDB50DUP(0)

EXPDB30DUP(0)

TRACKDB30DUP(0)

INSTRDB100DUP(0)

MSG0DB'input:

',0DH,0AH,'$'

MSG1DB0DH,0AH,'wrong','$'

MSG2DB0DH,0AH,'(and)doesnotmatch','$'

MSG3DB0DH,0AH,'divbyzeroerror','$'

MSG4DB0DH,0AH,'fushu','$'

MSG5DB0DH,0AH,'anykeytocontinue,esctoexit','$'

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,SS:

STACK,DS:

DATA

START:

MOVAX,STACK

MOVSS,AX

MOVAX,DATA

MOVDS,AX

MOVDX,OFFSETMSG0

MOVAH,9

INT21H

XORAX,AX

;READ

MOVBX,OFFSETINSTR

MOVDL,20H

JMPL2

COMPAREPROCNEAR

CMPAL,0DH

JZL2

MOVDL,AL

MOVAH,2

INT21H

RET

COMPAREENDP

L2:

MOVAH,8

INT21H

CALLCOMPARE

CMPAL,3DH;endwith'='

JZL2_OVER

MOVAH,39H

CMPAH,AL;delthewrongdata(>9)

JNBCONTI

MOVAH,2

MOVDL,8

INT21H

MOVDL,20H

INT21H

MOVDL,8

INT21H

JMPL2

CONTI:

CMPAL,28H;'('

JZL2_YES

CMPAL,29H

JZL2_YES;')'

CMPAL,2AH;'*'

JZL2_YES

CMPAL,2BH;'+'

JZL2_YES

CMPAL,2DH;'-'

JZL2_YES

CMPAL,2FH;'/'

JZL2_YES

;backfunction'<-'

CMPAL,08H

JNZNO_8

L2_NEXT:

PUSHDX

MOVDL,20H

MOVAH,2

INT21H

MOVDL,8

MOVAH,2

INT21H

CMPBX,OFFSETINSTR

JZL2

DECBX

MOVAL,0

MOV[BX],AL

POPDX

JMPL2

;

NO_8:

MOVAH,2FH

CMPAH,AL;delthewrongdata(<0)

JBL2_YES

MOVAH,2

MOVDL,8

INT21H

MOVDL,20H

INT21H

MOVDL,8

INT21H

JMPL2

L2_YES:

MOVDH,DL

MOVDL,AL

CMPDL,20H

JNZL2_NO20

CMPDH,20H

JZL2

L2_NO20:

MOV[BX],AL

INCBX

JMPL2

L2_OVER:

MOVAH,3DH

MOV[BX],AH

;checkinput

MOVSI,OFFSETINSTR

MOVAH,30H

MOVCH,0;record()

MOVCL,0

L3:

MOVAL,[SI]

INCSI

CMPAL,3DH

JZL3_OVER

CMPAL,2AH

JNBMAY_WRONG

CMPAL,29H

JZL3_29

INCCH

JMPL3_RIGHT

L3_29:

INCCL

JMPL3_RIGHT

MAY_WRONG:

CMPAL,30H

JNBL3_RIGHT

CMPAL,28H

JZL3_RIGHT

CMPAH,29H

JZL3_RIGHT

;cmpah,28h

;jzL3_right

CMPAH,30H

JNBL3_RIGHT

MOVDX,OFFSETMSG1

MOVAH,9

INT21H

JMPOVER3

L3_RIGHT:

MOVAH,AL

JMPL3

L3_OVER:

CMPCH,CL

JZINPUT_WRIGHT

MOVDX,OFFSETMSG2

MOVAH,9

INT21H

JMPOVER3

;

;chechover

INPUT_WRIGHT:

MOVBX,OFFSETSTRI

MOVSI,OFFSETINSTR

;read

READ:

;movah,1

;int21h

MOVAL,[SI];reservethedatabydecimal{test}

INCSI

MOVAH,28H;(

CMPAH,AL

JZIN_STRI

MOVAH,29H;)

CMPAH,AL

JZIN_STRI

MOVAH,2AH;*

CMPAH,AL

JZIN_STRI

MOVAH,2BH;+

CMPAH,AL

JZIN_STRI

MOVAH,2DH;-

CMPAH,AL

JZIN_STRI

MOVAH,2FH;/

CMPAH,AL

JZIN_STRI

MOVAH,2FH;deletethewronginput

CMPAH,AL

JNBREAD

MOVAH,3DH;=

CMPAH,AL

JZIN_STRI

MOVAH,39H;deletethewronginput

CMPAH,AL

JBREAD

CALLNEARPTRMULT

JMPREAD;theendofreserve

;

IN_STRI:

MOVAH,0

CMPAH,[BX]

JZNO_BX;incbx

INCBX

NO_BX:

MOV[BX],AL

MOVAH,3DH

CMPAH,AL

JNZNO_OVER

SUBAL,25;transplant'='to'$'

MOV[BX],AL

JMPOVER

NO_OVER:

JMPREAD

MULTPROCNEAR;multdata*10,addup

PUSHDX

PUSHCX

PUSHAX

MOVAH,0

CMP[BX],AH

JZNO_INC_BX

MOVAH,30H

CMP[BX],AH

JNBNO_INC_BX

INCBX

NO_INC_BX:

MOVDX,0

MOVCX,10

MOVAH,[BX]

CMPAH,30H

JBNO_SUB

SUBAH,30H

NO_SUB:

MOV[BX],AH

NEXT:

ADDDX,[BX]

LOOPNEXT

SUBAL,30H;trastodecimal

ADDDL,AL

MOV[BX],DL

MOVAH,[BX]

ADDAH,30H

MOV[BX],AH

POPAX

POPCX

POPDX

RET

MULTENDP

;

;endofread

OVER:

CALLNEARPTRTRANS;theoutletoftheprogram

OVER1:

CALLNEARPTRVALUE;jmpinsteadofretinproceduretrans

OVER2:

CALLNEARPTRPRINT

OVER3:

MOVAH,9

MOVDX,OFFSETMSG5

INT21H

MOVAH,8

INT21H

CMPAL,1BH

JZOVER4

MOVCX,210

MOVBX,OFFSETSTRI

MOVAL,0

OVE

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

当前位置:首页 > PPT模板 > 自然景观

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

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