汇编语言程序设计————计算器.doc

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计说明书题目 :表达式计算器

学号:

班级 : 计算机创新实验班

姓名:廖福轩

目录

一.设计内容 2

二.设计方案错误!未定义书签。

1.主程序模块 .错误!未定义书签。

2.赋权值模块 .错误!未定义书签。

3.加减乘除运算子程序模块.错误!未定义书签。

4.调用赋权宏子程序模块.错误!未定义书签。

5.回车换行宏模块 .错误!未定义书签。

号功能显示字符串宏模块. 2

三.设计框图 3

四.程序代码 4

五.运行结果错误!未定义书签。

六.设计总结错误!未定义书签。

计算器汇编语言程序设计

一.设计内容

从键盘输入一个十进制两位数的四则运算表达式,如23*56 -( 8*19 ) /6 + 67 - 8=,编程计算表达式的值,输出十进制结果(有可能是三位或四位十进制),+-*/ 位置任意。并要求程序能

反复执行直道对“还要继续吗(y/n )”之类的提示回答“n”或“ N”为止。

四则运算主要包括以下几个模块:

主程序模块 .

赋权宏模块 .

加减乘除运算子程序模块.

调用赋权宏子程序模块.

回车换行宏模块.

9 号功能显示字符串宏模块.

二.设计方案

1.主程序模块 .

主程序初始化数据段,调用显示宏show 显示界面,输入字符或数字并判断,调用子程序dyfq 调用赋权宏 fq 为符号赋权,从而判断优先级,调用加减乘除运算子程序ys 对判断出的相应运算符进行运算,输出运算结果,判断是否继续,继续则返回输入,不继续则退出程序.

2.赋权宏模块 .

通过定义宏 fq, 定义了变元 a,b 进行参数传递,并使用替换运算符&使变元 a 与标号 s 对应 .接着给对应的符号赋予权值,将其权值存入ch 中 .

3.加减乘除运算子程序模块 .

运算模块实现了将ax 入栈保存,然后将ax, bx 赋值为 0,判断 cl 中的符号是否为乘号* ,若为乘号 * 则将 number 中的数字与其下一位的数字相乘,并把结果存入该位置,类似的若不为乘号* 则接着判断是否为除号/, 若为除号 / 则进行除法运算,然后判断是否为加法,为加法则进行加法运算,接着判断是否为减法,为减法则进行减法运算并将结果存入当前的计算的第二个数的位置.

4.调用赋权宏子程序模块 .

该模块实现了调用赋权宏fq 为 (,),*,/,+,-,= 等符号分别赋权值为5,1,4,4,3,3,0. 从而可以通过设定的权值来判断优先级.

5.回车换行宏模块 .

通过 2 号功能的输出功能,将 0dh 赋予 dl 输出,再调用 2 号功能,将 0ah 赋予 dl 输出,从而实现回车换

行功能 .

号功能显示字符串宏模块.

通过定义宏show ,用 9 号显示功能,通过变元str 将字符串显示出来。

三.设计框图

开始

加载数据段附加段

显示界面

input 输入数字或字符

= 输入的是=,数

字,符号

符号

数字

保存数字

SIGN1=0 n

y 下移 2 位将

设优先级,并判

SIGN1赋 0

断是何符号

取 number,operator

的偏移地址根据符号决定运

算,将值存入

numb

Output 通过 2 号

Di+2

功能显示结果

y

是否继续

n

结束

四.程序代码

DATAS SEGMENT

STR1DB 0AH,0DH,'*******************************************$' SIGN2=0n

显示错误

y

STR2 DB 13,10, '* 1 2 3 4 5 *$'

STR3 DB 13,10, '* 6 7 8 9 0 *$'

STR4 DB 13,10, '* + - * / = *$'

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

STR6 DB 13,10, 'PLEASE INPUT A FORMULA: $'

STR7 DB 'CONTINUE(Y/N)$'

SIGN1 DW 0;值为 0 代表输入的不是数字,为 1 代表输入的是数字

SIGN2 DW 0;值为 0 代表输入的符号是匹配的,为 1 输入的符号不匹配NUMBER DW 20 DUP(0) ;保存输入的数值

OPERATOR DB '$';判断输入的运算符是否为空

DB 10 DUP(0);保存该运算符对应的权值

ERROR DB 'WRONG!$'

DATAS ENDS

SHOW MACRO STR;宏定义 ,显示字符串

LEA DX,STR

MOV AH,9

INT 21H

ENDM

FQ MACRO ASCII,A,B;宏定义 ,给运算符赋权值

CMP AL,ASCII

JNE S&A

MOV CH,B

JMP S7

ENDM

HCHH MACRO;宏定义 ,回车换行

M OV AH,2

M OV DL,0DH

INT 21H

M OV AH,2

M OV DL,0AH

INT 21H

ENDM

CODES SEGMENT

MAIN PROC FAR

ASSUME CS:CODES,DS:DATAS

START:

M OV AX,DATAS

M OV DS,AX

LEA DI,NUMBER

LEA SI,OPERATOR

SHOW STR1

SHOW STR2

SHOW STR3

SHOW STR4

相关文档
最新文档