十进制数加减计算器的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
十进制数加减计算器的设计
1 问题描述
用汇编语言设计一个十进制数加减计算器,能够实现两个二位十进制数的加减运算,并具有友好的界面。
2 设计说明
该程序数据流程图:
3 详细的算法描述
定义两个数据段,通过键盘输入,存储于AX ,BX 中,选择运算符号“+或-”,自动运算AX ,BX 中的数据,然后将结果转化为十进制输出。
(详细解释见源程序)
4 源程序与执行结果
4.1 源程序:
CURS MACRO A,B
MOV AH,2 ;置光标位置
MOV BH,0 ;页号为0
MOV DH,A ;设置光标的坐标为(A.B)
MOV DL,B
INT 10H ;BIOS调用
ENDM
;-------------------------------
DISPMSG MACRO MESSAGE
LEA DX,MESSAGE ;传递MESSAGE的偏移地址MOV AH,9 ;显示字符串
INT 21H ;DOS调用
ENDM
;----------------------------------
CLEAR MACRO COLOR ;清屏
MOV AH,6 ;屏幕初始化
MOV AL,0 ;页号
MOV CH,0 ;设置左上角的坐标为(0,0)
MOV CL,0
MOV DL,100 ;设置右上角的坐标为(100,100)MOV DH,100
MOV BH,COLOR ;卷入行属性
INT 10H ;BIOS调用
ENDM
.MODEL SMALL
.STACK
.DATA ;数据段定义
MSG0 DB '* * * * * * * * * * * * * * * * * * * *',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 ' * * * * * * * * * * * * * * * * * * * *','$'
MSG1 DB 'choose +,-','$'
MSG2 DB 'you choose wrong','$',0AH,0DH
MSG3 DB 'Press ESC to Exit!',0DH,0AH,'$'
MSG4 DB 'Press any key to continue!',0DH,0AH,'$'
MSG5 DB '-','$'
MSG6 DB '.','$'
MSG7 DB 'error input!','$'
MSG8 DB 'data2 is wrong!','$'
DATA1 DW ?
DATA2 DW ?
.CODE ;代码段从这里开始
;--------------------------------------------
DEC_DIV PROC NEAR
CWD ;将字转换为双字,AX内容符号扩展到DX
DIV CX
PUSH DX
MOV DL,AL
ADD DL,30H ;将不是数字的字符转换为数字
MOV AH,2 ;显示输出
INT 21H ;DOS调用
POP DX
MOV AX,DX
RET
DEC_DIV ENDP
;------------------------------------------
CHANGE PROC NEAR ;该子程序的功能:将AX中存储的十六进制数转换为十进制数CMP AX,1000
JAE C1 ;AX≥1000则转移
CMP AX,100
JAE C2 ;AX≥100则转移
CMP AX,10
JAE C3 ;AX≥10则转移
JMP C4 ;AX<10
C1: MOV CX,1000D
CALL DEC_DIV
C2: MOV CX,100D
CALL DEC_DIV
C3: MOV CX,10D
CALL DEC_DIV
C4: MOV CX,1D
CALL DEC_DIV
RET
CHANGE ENDP
;-------------------------------
BEGIN PROC NEAR
BACK: CLEAR 1EH
CURS 2,20 ;设置光标为(2.20)DISPMSG MSG0 ;显示用户界面
CURS 8,41 ;设置光标为(8,41),第一行MOV BX,0
MOV CX,2
NEWCHAR1:
MOV AH,1 ;键盘输入并回显