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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 ;键盘输入并回显

相关文档
最新文档