十进制数加减计算器的设计Word文档格式.docx
《十进制数加减计算器的设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《十进制数加减计算器的设计Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
MOVAH,9;
显示字符串
INT21H;
DOS调用
----------------------------------
CLEARMACROCOLOR;
清屏
MOVAH,6;
屏幕初始化
MOVAL,0;
页号
MOVCH,0;
设置左上角的坐标为(0,0)
MOVCL,0
MOVDL,100;
设置右上角的坐标为(100,100)
MOVDH,100
MOVBH,COLOR;
卷入行属性
.MODELSMALL
.STACK
.DATA;
数据段定义
MSG0DB'
********************'
0DH,0AH;
0dh,0ah,0dh,0ah
DB'
**'
0DH,0AH
db'
**'
0dh,0ah
*--------COUNTER--------*'
*DATA1:
'
_______________*'
0dh,0ah,0dh,0ah,0dh
0DH
*DATA2:
*RESULT:
0DH,0AH,0DH;
0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh
********************'
'
$'
MSG1DB'
choose+,-'
MSG2DB'
youchoosewrong'
0AH,0DH
MSG3DB'
PressESCtoExit!
0DH,0AH,'
MSG4DB'
Pressanykeytocontinue!
MSG5DB'
-'
MSG6DB'
.'
MSG7DB'
errorinput!
MSG8DB'
data2iswrong!
DATA1DW?
DATA2DW?
.CODE;
代码段从这里开始
--------------------------------------------
DEC_DIVPROCNEAR
CWD;
将字转换为双字,AX内容符号扩展到DX
DIVCX
PUSHDX
MOVDL,AL
ADDDL,30H;
将不是数字的字符转换为数字
显示输出
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
C3:
MOVCX,10D
C4:
MOVCX,1D
CHANGEENDP
BEGINPROCNEAR
BACK:
CLEAR1EH
CURS2,20;
设置光标为(2.20)
DISPMSGMSG0;
显示用户界面
CURS8,41;
设置光标为(8,41),第一行
MOVBX,0
MOVCX,2
NEWCHAR1:
MOVAH,1;
键盘输入并回显
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
ADDBX,AX
LOOPNEWCHAR1
MOVDATA1,BX
CURS11,41;
设置光标位为(11,40),第二行
NEWCHAR2:
与0的ASCII码比较
JAEJ3;
如果输入数字大于等于0则跳转至J3
JMPD2
J3:
与9比较
JBEJ4;
如果小于或等于9则跳转
如果输入不是数字则跳转
J4:
SUBAL,30H;
如果输入不是0-9,则转化成相应的字符
将AL符号扩展到AH
LOOPNEWCHAR2
MOVDATA2,BX
MOVAX,DATA1
MOVBX,DATA2
PUSHAX
PUSHBX
CURS15,33;
设置光标的位置为(15.33),第三行
DISPMSGMSG1;
显示提示信息
接受键盘输入并回显
CMPAL,'
+'
JEADDI;
如果运算符为+,则计算两数之和
JESUBT;
如果运算符为-,则计算两数之差
CURS16,25;
设置光标为(16,25)
DISPMSGMSG2;
在屏幕上输出提示信息
JMPD1
----------------------------------------
ADDTHETWODATAS
ADDI:
POPBX
POPAX
ADDAX,BX;
计算两数字之和
CURS14,41;
设置光标位置为(14,41)
CALLCHANGE;
将结果转换为十进制数
---------------------------------------
SUBTRACTTHETWODATAS
SUBT:
CMPAX,BX;
比较两数大小
JAED0;
如果AX>
=BX则跳转
CURS14,40;
设置光标位置为(14,40)
DISPMSGMSG5;
在屏幕上显示负号
D0:
SUBAX,BX;
计算两数之差
---------------------------------------
D1:
D2:
设置光标位置为(15,33)
DISPMSGMSG7;
提示输入出错
BEGINENDP
MAINPROCNEAR
MOVAX,@DATA
MOVDS,AX
MOVES,AX
PUSHDS
XORAX,AX
MOVDATA2,0;
将缓冲区清空
MOVDATA1,0
AGAIN:
CALLBEGIN
CURS16,23;
设置光标位置为(16.23)
DISPMSGMSG3;
在屏幕上输出提示信息,提示退出的方法
CURS17,23;
设置光标位置为(17.23)
DISPMSGMSG4;
在屏幕上输出提示信息,提示继续的方法
MOVAH,7;
键盘输入,无回显
CMPAL,27;
判断输入的是否为ESC
JNEAGAIN;
如果不是就继续执行以上运算
EXIT:
MOVAX,4C00H;
如果是就退出系统
MAINENDP
ENDMAIN
4.2对源程序汇编生成目标文件
4.3链接目标文件生成可执行文件“12.EXE”,并用D