总汇编语言实现十进制加减计算器.docx

上传人:b****6 文档编号:6678128 上传时间:2023-01-08 格式:DOCX 页数:30 大小:242.24KB
下载 相关 举报
总汇编语言实现十进制加减计算器.docx_第1页
第1页 / 共30页
总汇编语言实现十进制加减计算器.docx_第2页
第2页 / 共30页
总汇编语言实现十进制加减计算器.docx_第3页
第3页 / 共30页
总汇编语言实现十进制加减计算器.docx_第4页
第4页 / 共30页
总汇编语言实现十进制加减计算器.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

总汇编语言实现十进制加减计算器.docx

《总汇编语言实现十进制加减计算器.docx》由会员分享,可在线阅读,更多相关《总汇编语言实现十进制加减计算器.docx(30页珍藏版)》请在冰豆网上搜索。

总汇编语言实现十进制加减计算器.docx

总汇编语言实现十进制加减计算器

学号:

0120810340816

课程设计

 

题目

十进制数加减计算器

学院

计算机科学与技术

专业

计算机科学与技术

班级

计算机0808班

姓名

何爽

指导教师

袁小玲

 

2010

12

31

 

课程设计任务书

学生姓名:

何爽专业班级:

计算机0808班

指导教师:

袁小玲工作单位:

计算机科学与技术学院

题目:

十进制数加减计算器的设计

初始条件:

理论:

学完“汇编语言程序设计”、“课程计算机概论”、“高级语言程序设计”和“数字逻辑”。

实践:

计算机学院科学系实验中心提供计算机和软件平台。

如果自己有计算机可以在其上进行设计。

要求完成的主要任务:

(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

(1)十进制数加减计算器的设计。

(2)程序应有操作提示、输入和输出,界面追求友好,最好是菜单式的界面。

(3)设计若干用例(测试数据),上机测试程序并分析(评价)所设计的程序。

(4)设计报告格式按附件要求书写。

课程设计报告书正文的内容应包括:

在正文第一行写课程设计题目;

1.需求说明(要求、功能简述)或问题描述;

2.设计说明(简要的分析与概要设计);

3.详细的算法描述;

4.源程序与执行结果(含测试方法和测试结果);

5.使用说明;

6.总结,包括设计心得(设计的特点、不足、收获与体会)和展望(该程序进一步改进扩展的设想)。

时间安排:

设计时间一周:

周1:

查阅相关资料。

周2:

系统分析,设计。

周3~4:

编程并上机调试。

周5:

撰写课程设计报告。

设计验收安排:

20周星期五8:

00起到计算机学院科学系实验中心进行上机验收。

设计报告书收取时间:

20周的星期五下午5:

00之前。

指导教师签名:

2010年12月31日

系主任(或责任教师)签名:

2010年12月31日

1.需求说明…………………………………………………………………………………………………4

2.设计说明…………………………………………………………………………………………………4

2.1简要分析………………………………………………………………………………………4

2.2概要设计………………………………………………………………………………………4

2.2.1主要模块………………………………………………………………………4

2.2.2主函数结构………………………………………………………………….5

3.详细的算法描述……………………………………………………………………………………6

3.1详细的算法描述…………………………………………………………………………6

3.2算法流程图…………………………………………………………………………………11

3.2.1程序流程图…………………………………………………………………11

3.2.2输入函数(inputdec)流程图………………………….12

3.2.3输出函数(outputdec)流程图……………………….12

3.2.4输出算术表达式函数(show)流程图……………13

4.源程序与执行结果………………………………………………………………………………13

4.1源程序………………………………………………………………………………………….13

4.2执行结果……………………………………………………………………………………19

4.2.1测试方法………………………………………………………………………19

4.2.2测试结果……………………………………………………………………….19

5.使用说明……………………………………………………………………………………………….20

6.总结……………………………………………………………………………………………………….21

 

十进制数加减计算器的设计

1.需求说明

十进制数加减计算器的设计,要求完成:

(1)用汇编语言正确编写程序,完成简单的十进制数的加减运算,

(2)求能正确进行输入和输出操作,界面追求友好,尽量实现菜单操作

(3)用若干测试用例来测试程序的正确性

2.设计说明

2.1简要分析

要正确、友好地完成用汇编语言设计十进制数的加减计算器,我们应该完成以下几个功能:

(1)相关菜单及字符输出的设计

(2)十进制数的输入

(3)十进制数的输出

(4)加法运算

(5)减法运算

(6)输出运算表达式

(7)回车换行功能(因为为了控制格式,经常要用到)

2.2概要设计

2.2.1主要模块

(1)菜单及字符

menudb‘|--------------------------------------|’0dh,0ah

db‘|1.Add|’0dh,0ah

db‘|2.Sub|’0dh,0ah

db‘|0.Exit|’0dh,0ah

db‘|--------------------------------------|’0dh,0ah

db‘Pleaseinputyourchoice:

$’

mess1db'Pleaseinputthefirstnumber:

$'

mess2db'Pleaseinputthesecondnumber:

$'

mess3db'Theresultis:

$'

mess4db'-$'

mess5db'+$'

mess6db'=$'

(2)十进制数的输入

inputdecproc

实现代码

ret

inputdecendp

(3)十进制数的输出

outputdecproc

实现代码

ret

outputdecendp

(4)加法运算

addfunproc

显示mess1;提示输入第一个数

callinputdec;输入第一个数

显示mess2;提示输入第二个数

callinputdec;输入第二个数

做加法运算

显示mess3;提示输入第一个数

callshow;输出运算表达式

ret

addfunendp

(5)减法运算

subtractproc

显示mess1;提示输入第一个数

callinputdec;输入第一个数

显示mess2;提示输入第二个数

callinputdec;输入第二个数

做减法运算

显示mess3;提示输入第一个数

callshow;输出运算表达式

ret

subtractendp

(6)输出运表达算式函数

showproc

calloutputdec;输出第一个数

输出运算符号

calloutputdec;输出第二个数

输出等号

calloutputdec;输出运算结果

ret

showendp

(7)回车换行

crlfproc

实现代码

ret

crlfendp

2.2.2主函数结构

mainproc

显示menu;供选择

输入选项

判断选项

Case1:

calladdfun

Case2:

callsubtract

Case3:

退出程序

mainendp

3.详细的算法描述

3.1详细的算法描述

(1)main函数

mainproc

pushds

xorax,ax

pushax

movax,data

movds,ax

ks:

leadx,menu;输出菜单项

movah,09h

int21h

moval,0

movah,01h;输入选择项

int21h

subal,30h

cmpal,2;判断选择项

jzl2;如果输入为2,则跳转到l2

cmpal,1

jzl1;如果输入为1,则跳转到l1

movah,4ch;这两句为正常返回dos界面

int21h

l1:

calladdfun;调用加法函数

jmpks;返回到菜单

l2:

callsubtract;调用减法操作

jmpks;返回到菜单

mainendp

(2)addfun函数(加法运算函数)

addfunproc

callcrlf

movbp,1;给下面的show输出中间的运算符做标记,1为加号

leadx,mess1;给出输入第一个数的提示信息

movah,09h

int21h

callinputdec;调用输入函数,输入第一个数

movsi,bx;第一个数保存在si中

leadx,mess2;给出输入第二个数的提示信息

movah,09h

int21h

callinputdec;调用输入函数,输入第二个数

movdi,bx;第二个数保存在di中

movbx,si;将第一个数保存到bx中,再进行操作,以免影响到的输出

addbx,di;第一个数和第二个数相加,结果保存在bx中

leadx,mess3;给出输出结果的提示信息

movah,09h

int21h

callshow;调用show函数,输出算术表达式

ret;返回函数调用处

addfunendp

(3)subtract函数(减法运算函数)

subtractproc

callcrlf

movbp,2;给下面的show输出中间的运算符做标记,2为减号

leadx,mess1;给出输入第一个数的提示信息

movah,09h

int21h

callinputdec;调用输入函数,输入第一个数

movsi,bx;第一个数保存在si中

leadx,mess2;给出输入第一个数的提示信息

movah,09h

int21h

callinputdec;调用输入函数,输入第一个数

movdi,bx;第二个数保存在di中

movbx,si

cmpbx,di;比较第一个数和第二人数的大小

jssubl1;如果为负(第一个数小一些)则跳转

subbx,di;否则直接进行计算,结果保存在bx中

jmpsubl2

subl1:

movbp,3;为show里面是否输出负号作准备,3的时候要输出负号

pushdi;先将第二个操作数进栈,否则下面的减法操作会将其值改变

subdi,bx

movbx,di

popdi;第二个操作数出栈,再赋给di寄存器

subl2:

leadx,mess3;输出运算表达式的提示

movah,09h

int21h

callshow;调用show函数,输出运算表达式

ret

subtractendp

(4)inputdec函数(十进制输入函数)

inputdecproc

movbx,0

il0:

movah,01h;输入数字

int21h

cmpal,0dh;判断是否为回车

jziexit;如果是回车,则返回到函数调用处

subal,30h;得到输入数字的真实大小

movah,0

xchgbx,ax;将bx值与ax值交换,因为下面乘以10是将ax中的值乘10

movcx,10;注意,这里不能用CL,否则数较大时就会出现问题

mulcx;将ax中的值乘以10,也就是将bx中原来的值乘以10

addbx,ax

jmpil0;进行输入下一数值位

iexit:

callcrlf

ret

inputdecendp

(5)outputdec函数(十进制输出函数)

outputdecproc

pushbp

movbp,0;前导0输出与否的标志,0时不输出,1时输出

movax,bx

movdx,0;在进行除法之前,要对dx赋0,否则结果出错

movcx,10000

divcx;除法,字操作,商在ax中,余数在dx中

movbx,dx;保存余数,作为下一次裤除数

movdl,al

cmpdl,0;将万位同0比较

jzol0;如果万位为0则不输出万位

movbp,1;如果万位不为0,则应将bp设为1,以后的0都要输出

ordl,30h

movah,02h

int21h;输出万位

ol0:

movax,bx;输出千位的方法与万位相同

movdx,0

movcx,1000

divcx;字操作,商在ax中,余数在dx中

movbx,dx;保存余数,作为下一次裤除数

movdl,al

cmpbp,0

jzol1

ordl,30h

movah,02h

int21h;输出千位

jmpol2

ol1:

cmpdl,0

jzol2

movbp,1

ordl,30h

movah,02h

int21h;输出千位

ol2:

movax,bx;输出百位与千位、万位方法相同

movdx,0

movcx,100

divcx;字操作,商在ax中,余数在dx中

movbx,dx;保存余数,作为下一次裤除数

movdl,al

cmpbp,0

jzol3

movbp,1

ordl,30h

movah,02h

int21h;输出百位

jmpol4

ol3:

cmpdl,0

jzol4

ordl,30h

movah,02h

int21h;输出百位

ol4:

movax,bx;输出十位的方法与前面几位方法相同

movcl,10

divcl;字节操作,商在al中,余数在ah中

movbl,ah;保存余数,作为下一次裤除数,也就是个位数

movdl,al

cmpbp,0

jzol5

movbp,1

ordl,30h

movah,02h

int21h;输出十位

jmpol6

ol5:

cmpdl,0

jzol6

ordl,30h

movah,02h

int21h;输出十位

ol6:

movdl,bl;在上面,bl中的数直接就应该为个位,所以直接输出

ordl,30h

movah,02h

int21h

popbp;恢复bp

ret

outputdecendp

(6)show函数(输出运算表达式函数)

showproc

pushbx;把运算结果保存起来

movbx,si;第一个数放在si中

calloutputdec;输出第一个数

cmpbp,3;是否为减号

jzsl0

cmpbp,2;判断是否为减号

jzsl0

leadx,mess5;输出加号

movah,09h

int21h

jmpsl1

sl0:

leadx,mess4;输出减号

movah,09h

int21h

sl1:

movbx,di;第二个数放在di中

calloutputdec;输出第二个数

leadx,mess6;输出等号

movah,09h

int21h

cmpbp,3;判断是否需要输出负号

jnzsl2

leadx,mess4;输出负号

movah,09h

int21h

sl2:

popbx;得到运算结果

calloutputdec;输出运算结果

callcrlf

ret

showendp

(7)crlf函数(输出回车换行函数)

crlfproc

pushax

pushdx

movah,02h

movdl,0dh;输出回车

int21h

movdl,0ah;输出换行

int21h;ah值被改变

popdx

popax

ret

crlfendp

3.2算法流程图

3.2.1程序流程图

 

Y

N

Y

N

 

 

返回

 

返回

3.2.2十进制输入(inputdec)流程图

 

N

 

Y

 

3.2.3十进制输出(outputdec)流程图

 

N

Y

待输出数不是个位数

Y

N

 

3.2.4输出算术表达式(show)流程图

 

2or3

加法

1

 

N

 

4.源程序与执行结果(含测试方法和测试结果)

4.1源程序

assumecs:

code,ds:

data

datasegment;定义数据段

menudb‘|--------------------------------------|’0dh,0ah

db‘|1.Add|’0dh,0ah

db‘|2.Sub|’0dh,0ah

db‘|0.Exit|’0dh,0ah

db‘|--------------------------------------|’0dh,0ah

db‘Pleaseinputyourchoice:

$’

mess1db'Pleaseinputthefirstnumber:

$'

mess2db'Pleaseinputthesecondnumber:

$'

mess3db'Theresultis:

$'

mess4db'-$'

mess5db'+$'

mess6db'=$'

dataends;数据段结束

codesegment;定义代码段

mainproc;主函数

pushds

xorax,ax

pushax

movax,data

movds,ax

ks:

leadx,menu

movah,09h

int21h

moval,0

movah,01h

int21h

subal,30h

cmpal,2

jzl2

cmpal,1

jzl1

movah,4ch

int21h

l1:

calladdfun

jmpks

l2:

callsubtract

jmpks

mainendp;主函数结束

addfunproc;加法运算函数

callcrlf

movbp,1;给下面的show输出中间的运算符做标记

leadx,mess1

movah,09h

int21h

callinputdec

movsi,bx;第一个数保存在si中

leadx,mess2

movah,09h

int21h

callinputdec

movdi,bx;第二个数保存在di中

movbx,si

addbx,di

leadx,mess3

movah,09h

int21h

callshow;输出结果

ret

addfunendp;加法运算函数结束

subtractproc;减法运算函数

callcrlf

movbp,2;给下面的show输出中间的运算符做标记

leadx,mess1

movah,09h

int21h

callinputdec

movsi,bx;第一个数保存在si中

leadx,mess2

movah,09h

int21h

callinputdec

movdi,bx;第二个数保存在di中

movbx,si

cmpbx,di

jssubl1;如果为负则跳转

subbx,di

jmpsubl2

subl1:

movbp,3;为show里面是否输出负号作准备

pushdi

subdi,bx

movbx,di

popdi

subl2:

leadx,mess3

movah,09h

int21h

callshow

ret

subtractendp;减法运算函数结束

inputdecproc;十进制输入函数

movbx,0

il0:

movah,01h

int21h

cmpal,0dh;判断是否为回车

jziexit

subal,30h

movah,0

xchgbx,ax

movcl,10

mulcl

addbx,ax

jmpil0

iexit:

callcrlf

ret

inputdecendp;十进制输入函数结束

outputdecproc;十进制输出函数

pushbp;用来做前导0的标记

movbp,0

movax,bx

movdx,0;在进行除法之前,要对dx赋0,否则结果overdevide

movcx,10000

divcx;字操作,商在ax中,余数在dx中

movbx,dx;保存余数,作为下一次裤除数

movdl,al

cmpdl,0

jzol0

movbp,1

ordl,30h

movah,02h

int21h;输出万位

ol0:

movax,bx

movdx,0

movcx,1000

divcx;字操作,商在ax中,余数在dx中

movbx,dx;保存余数,作为下一次裤除数

movdl,al

cmpbp,0

jzol1

ordl,30h

movah,02h

int21h;输出千位

jmpol2

ol1:

cmpdl,0

jzol2

movbp,1

ordl,30h

movah,02h

int21h;输出千位

ol2:

movax,bx

movdx,0

movcx,100

divcx;字操作,商在ax中,余数在dx中

movbx,dx;保存余数,作为下一次裤除数

movdl,al

cmpbp,0

jzol3

ordl,30h

movah,02h

int21h;输出百位

jmpol4

ol3:

cmpdl,0

jzol4

movbp,1

ordl,30h

movah,02h

int21h;输出百位

ol4:

movax,bx

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

当前位置:首页 > 解决方案 > 学习计划

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

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