十进制数加减计算器地设计.docx

上传人:b****8 文档编号:10919923 上传时间:2023-02-23 格式:DOCX 页数:12 大小:28.71KB
下载 相关 举报
十进制数加减计算器地设计.docx_第1页
第1页 / 共12页
十进制数加减计算器地设计.docx_第2页
第2页 / 共12页
十进制数加减计算器地设计.docx_第3页
第3页 / 共12页
十进制数加减计算器地设计.docx_第4页
第4页 / 共12页
十进制数加减计算器地设计.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

十进制数加减计算器地设计.docx

《十进制数加减计算器地设计.docx》由会员分享,可在线阅读,更多相关《十进制数加减计算器地设计.docx(12页珍藏版)》请在冰豆网上搜索。

十进制数加减计算器地设计.docx

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

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

1问题描述

用汇编语言设计一个十进制数加减计算器,能够实现两个二位十进制数的加减运算,并具有友好的界面。

2设计说明

该程序数据流程图:

开始

输入DATA1,DATA2

选择运算类型?

+,-?

初始化界面

进行加法运算

进行减法运算

显示运算结果

继续计算?

退出

除ESC外任意键

ESC

键盘输入+

键盘输入-

3详细的算法描述

定义两个数据段,通过键盘输入,存储于AX,BX中,选择运算符号“+或-”,自动运算AX,BX中的数据,然后将结果转化为十进制输出。

(详细解释见源程序)

4源程序与执行结果

4.1源程序:

CURSMACROA,B

MOVAH,2;置光标位置

MOVBH,0;页号为0

MOVDH,A;设置光标的坐标为(A.B)

MOVDL,B

INT10H;BIOS调用

ENDM

;-------------------------------

DISPMSGMACROMESSAGE

LEADX,MESSAGE;传递MESSAGE的偏移地址

MOVAH,9;显示字符串

INT21H;DOS调用

ENDM

;----------------------------------

CLEARMACROCOLOR;清屏

MOVAH,6;屏幕初始化

MOVAL,0;页号

MOVCH,0;设置左上角的坐标为(0,0)

MOVCL,0

MOVDL,100;设置右上角的坐标为(100,100)

MOVDH,100

MOVBH,COLOR;卷入行属性

INT10H;BIOS调用

ENDM

.MODELSMALL

.STACK

.DATA;数据段定义

MSG0DB'********************',0DH,0AH;,0dh,0ah,0dh,0ah

DB'**',0DH,0AH

;db'**',0dh,0ah

;db'**',0dh,0ah

DB'*--------COUNTER--------*',0DH,0AH;,0dh,0ah,0dh,0ah

DB'**',0DH,0AH

DB'**',0DH,0AH

DB'**',0DH,0AH

DB'*DATA1:

'

DB'_______________*',0DH,0AH;,0dh,0ah,0dh,0ah,0dh

DB'**',0DH,0AH

DB'**',0DH,0AH

DB'**',0DH

DB'*DATA2:

'

DB'_______________*',0DH,0AH;,0dh,0ah,0dh,0ah,0dh

DB'**',0DH,0AH

DB'**',0DH,0AH

DB'**',0DH

DB'*RESULT:

'

DB'_______________*',0DH,0AH,0DH;,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh

DB'**',0DH,0AH

DB'**',0DH,0AH

DB'**',0DH,0AH

DB'**',0DH,0AH

DB'**',0DH,0AH

DB'********************','$'

MSG1DB'choose+,-','$'

MSG2DB'youchoosewrong','$',0AH,0DH

MSG3DB'PressESCtoExit!

',0DH,0AH,'$'

MSG4DB'Pressanykeytocontinue!

',0DH,0AH,'$'

MSG5DB'-','$'

MSG6DB'.','$'

MSG7DB'errorinput!

','$'

MSG8DB'data2iswrong!

','$'

DATA1DW?

DATA2DW?

.CODE;代码段从这里开始

;--------------------------------------------

DEC_DIVPROCNEAR

CWD;将字转换为双字,AX内容符号扩展到DX

DIVCX

PUSHDX

MOVDL,AL

ADDDL,30H;将不是数字的字符转换为数字

MOVAH,2;显示输出

INT21H;DOS调用

POPDX

MOVAX,DX

RET

DEC_DIVENDP

;------------------------------------------

CHANGEPROCNEAR;该子程序的功能:

将AX中存储的十六进制数转换为十进制数

CMPAX,1000

JAEC1;AX≥1000则转移

CMPAX,100

JAEC2;AX≥100则转移

CMPAX,10

JAEC3;AX≥10则转移

JMPC4;AX<10

C1:

MOVCX,1000D

CALLDEC_DIV

C2:

MOVCX,100D

CALLDEC_DIV

C3:

MOVCX,10D

CALLDEC_DIV

C4:

MOVCX,1D

CALLDEC_DIV

RET

CHANGEENDP

;-------------------------------

BEGINPROCNEAR

BACK:

CLEAR1EH

CURS2,20;设置光标为(2.20)

DISPMSGMSG0;显示用户界面

CURS8,41;设置光标为(8,41),第一行

MOVBX,0

MOVCX,2

NEWCHAR1:

MOVAH,1;键盘输入并回显

INT21H;DOS调用

CMPAL,30H;检查输入的字符是不是数字

JAEJ1;如果不是,则转移至J1

JMPD2;是,转移到D2执行

J1:

CMPAL,39H;与9的ASCII侣氡

JBEJ2;如果输入的字符是0-9,则转移至J2

JMPD2;如果不是数字,则转移至D2

J2:

SUBAL,30H

CBW;AL的内容符号扩展到AH

XCHGAX,BX

MOVDI,10

MULDI

XCHGAX,BX

ADDBX,AX

LOOPNEWCHAR1

MOVDATA1,BX

CURS11,41;设置光标位为(11,40),第二行

MOVBX,0

MOVCX,2

NEWCHAR2:

MOVAH,1;键盘输入并回显

INT21H;DOS调用

CMPAL,30H;与0的ASCII码比较

JAEJ3;如果输入数字大于等于0则跳转至J3

JMPD2

J3:

CMPAL,39H;与9比较

JBEJ4;如果小于或等于9则跳转

JMPD2;如果输入不是数字则跳转

J4:

SUBAL,30H;如果输入不是0-9,则转化成相应的字符

CBW;将AL符号扩展到AH

XCHGAX,BX

MOVDI,10

MULDI

XCHGAX,BX

ADDBX,AX

LOOPNEWCHAR2

MOVDATA2,BX

MOVAX,DATA1

MOVBX,DATA2

PUSHAX

PUSHBX

CURS15,33;设置光标的位置为(15.33),第三行

DISPMSGMSG1;显示提示信息

MOVAH,1;接受键盘输入并回显

INT21H;DOS调用

CMPAL,'+'

JEADDI;如果运算符为+,则计算两数之和

CMPAL,'-'

JESUBT;如果运算符为-,则计算两数之差

CURS16,25;设置光标为(16,25)

DISPMSGMSG2;在屏幕上输出提示信息

JMPD1

;----------------------------------------

;ADDTHETWODATAS

ADDI:

POPBX

POPAX

ADDAX,BX;计算两数字之和

PUSHAX

CURS14,41;设置光标位置为(14,41)

POPAX

CALLCHANGE;将结果转换为十进制数

JMPD1

;---------------------------------------

;SUBTRACTTHETWODATAS

SUBT:

POPBX

POPAX

CMPAX,BX;比较两数大小

JAED0;如果AX>=BX则跳转

XCHGAX,BX

PUSHAX

PUSHBX

CURS14,40;设置光标位置为(14,40)

DISPMSGMSG5;在屏幕上显示负号

POPBX

POPAX

D0:

SUBAX,BX;计算两数之差

PUSHAX

CURS14,41;设置光标位置为(14,41)

POPAX

CALLCHANGE;将结果转换为十进制数

JMPD1

;---------------------------------------

D1:

RET

D2:

PUSHAX

PUSHBX

CURS15,33;设置光标位置为(15,33)

DISPMSGMSG7;提示输入出错

POPBX

POPAX

RET

BEGINENDP

;----------------------------------------

MAINPROCNEAR

MOVAX,@DATA

MOVDS,AX

MOVES,AX

PUSHDS

XORAX,AX

PUSHAX

MOVDATA2,0;将缓冲区清空

MOVDATA1,0

AGAIN:

CALLBEGIN

CURS16,23;设置光标位置为(16.23)

DISPMSGMSG3;在屏幕上输出提示信息,提示退出的方法

CURS17,23;设置光标位置为(17.23)

DISPMSGMSG4;在屏幕上输出提示信息,提示继续的方法

MOVAH,7;键盘输入,无回显

INT21H;DOS调用

CMPAL,27;判断输入的是否为ESC

JNEAGAIN;如果不是就继续执行以上运算

EXIT:

MOVAX,4C00H;如果是就退出系统

INT21H;DOS调用

MAINENDP

ENDMAIN

4.2对源程序汇编生成目标文件

4.3链接目标文件生成可执行文件“12.EXE”,并用DEBUG命令调试程序

4.4运行最终可执行程序“12.EXE”,执行结果:

5使用说明

打开可执行文件“十进制加减计算器.exe”,键盘输入需要运算的两个十进制数,然后小键盘选择运算符号,则程序自动运算两个数并输出结果,并提供选择“ESC退出”、“任意键继续”。

6总结

6.1设计心得:

通过本次汇编课程设计,让我对汇编这门计算机低级语言有了更深的认识。

汇编是低级语言,也就是说对一个人的编程思想要求会高一些。

可用的资源很少,某些指令只能用某些寄存器,指令也不多,所以怎么尽量少用寄存器,怎么充分利用每一份资源就很重要。

所以汇编编程前一定得先画好流程图,以梳理编程思路,提前想好哪步怎么走。

汇编就像写好文章,得先列好提纲才能写好。

6.2设计展望:

本程序只能进行2位十进制数的加减运算,如果加以改进,可以进行乘法和除法的运算,也可以扩展为任意十进制数的运算。

使之成为功能更强大的计算器。

 

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

当前位置:首页 > PPT模板 > 艺术创意

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

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