简单计算器8086汇编代码

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

【课题5】模拟十进制计算器(加,减)

(一)设计要求

1.通过小键盘输入,做十进制的加、减运算,允许五位数以内的不同数位的2个数相加

或相减,连加与/或连减。七段数码管显示器的高位作为符号位,其他5位作为输入数据和计算结果的显示。

2.数字用小键盘0~9;功能键为:A,B,C,D。

C———开始运算(包括取消没有完成的运算),六位七段数码管全部显示‘0’。

A———‘+’,加法操作。

B———‘-’,减法操作。

D———‘=’,计算并显示结果。

3.运算规则(按照一般计算器的功能要求):

a.输入第一个数据,显示器跟随显示。

b.按‘+’或‘-’,显示器内容不变。

c.再输入第二个数据,显示器跟随显示。

d.按‘=’,显示器显示计算结果,当超出能显示的最大值时,显示“F”(溢出)。

e.按‘C’,清除显示,重新开始运算。

(二)提示

1.七段数码管显示和键盘可参考软件实验9、10,LED显示实验,以及可参阅教材第9

章有关章节。

2.显示是动态的、要不断刷新,建议把键盘输入与运算作为主程序,动态显示作为子程

序,在主程序中调用显示子程序。

(三)要完成的工作

1.设计出完整的汇编语言程序。

2.上机调试,在实验系统中通过验收。

3.写出课程设计报告,内容包括:设计思想、功能流程图、结果讨论和完整的源程序。

;(1)通过小键盘做十进制的加、减运算,允许不同数位的5个数相加或相减。七段数码管显示器作输入数据和结果数据的显示。

;(2)数字用小键盘0~9,A、B、C、D作功能键。

;C———开始运算(包括撤销运算),显示‘0’。

;A———‘+’。

;B———‘-’。

;D———‘=’。

;E———退出,返回DOS。

;(3)运算顺序:

;①输入一原始数据,显示器跟随显示。

;②按‘ +’或‘ -’,显示器内容不变。

;③再输入一数据,显示器跟随显示。

;④按‘ =’,显示器显示结果数据,当超出能显示的最大值时,显示“FFFFF”(溢出)。;⑤按‘C’,重新开始运算。

;⑥按‘E’,结束退出。

;******************************************

; 8086系列微机接口实验系统软件实验项目

; 键盘扫描显示实验

;******************************************

INIT MACRO NAME

mov NAME+0,0ffh

mov NAME+1,0c0h

mov NAME+2,0ffh

mov NAME+3,0ffh

mov NAME+4,0ffh

mov NAME+5,0ffh

ENDM

code segment

assume cs:code

OUTSEG equ 0ffdch ;段控制口

OUTBIT equ 0ffddh ;位控制口/键扫口

IN_KEY equ 0ffdeh ;键盘读入口

LedBuf db 10 dup(?) ;显示缓冲

Store db 10 dup(?) ;存放显示第一组数据

num db 10 dup(?)

Store1 db 10 dup(?) ;用于存放第一组数据

num1 db 10 dup(?) ;用于存放第二组数据

flag db 0 ; 作为标记位,若为1代表加为0代表减temp db 0

jinwei db 0

jiewei db 0

in_flag db 0

Key_Buff db 30 dup(?) ;用于键盘输入的存储

org 1000h

Start:

INIT Store

INIT num

INIT LedBuf

mov si,-1 ;设置数组的下标

mov Store1+0,0

mov Store1+1,0

mov Store1+2,0

mov Store1+3,0

mov Store1+4,0

mov num1+0,0

mov num1+1,0

mov num1+2,0

mov num1+3,0

mov num1+4,0

MLoop:

call Disp ;显示

call GetKey ;扫描键盘并读取键值

cmp al,20h

je LL

jmp LL1

LL: mov temp,0

jmp MLoop

LL1: push dx

mov dl,temp

mov temp,1

cmp al,09h

ja transmit

cmp Key_Buff[si],al

jz inkey_flag

jmp LL2

inkey_flag:

cmp temp,dl

pop dx

jz MLoop

jmp LL2 ;!!注意要加这一句

transmit:jmp SPECIAL ;特殊字符特殊处理

LL2: inc si

mov Key_Buff[si],al;将键盘输入的键盘码放到Key_Buff中

cmp si,5

jae abc

push dx

mov dl,Store1+1

mov Store1+0,dl

mov dl,Store1+2

mov Store1+1,dl

mov dl,Store1+3

mov Store1+2,dl

mov dl,Store1+4

mov Store1+3,dl

mov Store1+4,al

pop dx

jmp bcd

abc: mov di,si

sub di,5

push dx

mov dl,num1+1

mov num1+0,dl

mov dl,num1+2

mov num1+1,dl

mov dl,num1+3

mov num1+2,dl

mov dl,num1+4

mov num1+3,dl

mov num1+4,al

pop dx

jmp bcd

bcd: and al,0fh ;显示键码

mov ah,0

mov bx,offset LEDMAP

add bx,ax

mov al,[bx]

cmp si,5

jae next1

mov Store[si+1],al

jmp back1

next1: mov di,si

sub di,5

mov num[di+1],al

jmp start1

back1: push dx ;将Store里的数据放到Led中,方便以后显示 mov dl,Store+1

mov LedBuf+1,dl

mov dl,Store+2

mov LedBuf+2,dl

mov dl,Store+3

mov LedBuf+3,dl

mov dl,Store+4

mov LedBuf+4,dl

mov dl,Store+5

mov LedBuf+5,dl

pop dx

jmp MLoop

start1:

INIT LedBuf

call Disp

;jmp MLoop back2: push dx

mov dl,num+1

mov LedBuf+1,dl mov dl,num+2

mov LedBuf+2,dl mov dl,num+3

mov LedBuf+3,dl mov dl,num+4

mov LedBuf+4,dl mov dl,num+5

mov LedBuf+5,dl pop dx

jmp MLoop

back3: push dx

mov dl,Store+0 mov LedBuf+0,dl mov dl,Store+1 mov LedBuf+1,dl mov dl,Store+2 mov LedBuf+2,dl mov dl,Store+3 mov LedBuf+3,dl mov dl,Store+4 mov LedBuf+4,dl mov dl,Store+5 mov LedBuf+5,dl pop dx

jmp MLoop SPECIAL:

cmp al,0ah

jne decre

mov flag,1

mov si,4

jmp MLoop

decre: cmp al,0bh

jne Restart mov flag,0

mov si,4

jmp MLoop

Restart: cmp al,0ch

jne Exit

mov flag,0

jmp Start

Exit: cmp al,0eh

jne Display

mov Store+0,0Ch ;显示"P"

mov Store+1,0ffh

jmp back1

Display:cmp al,0dh

je print

jmp back3

print: cmp flag,0

je subb

jmp adda

subb:

mov cl,num1+0 ;比较两数大小,如果用小数减大数则交换数据 mov bl,Store1+0

cmp bl,cl

jb jiaoh

mov cl,num1+1

mov bl,Store1+1

cmp bl,cl

jb jiaoh

mov cl,num1+2

mov bl,Store1+2

cmp bl,cl

jb jiaoh

mov cl,num1+3

mov bl,Store1+3

cmp bl,cl

jb jiaoh

mov cl,num1+4

mov bl,Store1+4

cmp bl,cl

jb jiaoh

jmp jianfa

jiaoh: push dx ;交换两个数组中的数值 mov dh,num1+0

mov dl,Store1+0

mov num1+0,dl

mov Store1+0,dh

mov dh,num1+1

mov dl,Store1+1

mov num1+1,dl

mov Store1+1,dh

mov dh,num1+2

mov dl,Store1+2

mov num1+2,dl

mov Store1+2,dh

mov dh,num1+3

mov dl,Store1+3

mov num1+3,dl

mov Store1+3,dh

mov dh,num1+4

mov dl,Store1+4

mov num1+4,dl

mov Store1+4,dh

mov Store[0],0BFh ;最高位显示“-”

pop dx

jianfa: mov cl,num1+4 ;最低位相减

mov bl,Store1+4

cmp bl,cl

jae H1

mov jiewei,1

mov bh,0ah

sub bh,cl

add bl,bh

mov cl,bl

jmp F1

H1:

sub bl,cl

mov cl,bl

jmp F1

F1:

mov al,cl

and al,0fh ;显示键码

mov ah,0

mov bx,offset LEDMAP

add bx,ax

mov al,[bx]

mov Store[5],al

mov cl,num1+3 ;第二位相减

mov bl,Store1+3

sub bl,jiewei

cmp bl,0Fh ;考虑0被借位变成F jz N1

jmp M1

N1: mov bl,09h

jmp M1

M1: mov jiewei,0

cmp bl,cl

jae H2

mov jiewei,1

mov bh,0ah

sub bh,cl

add bl,bh

mov cl,bl

jmp F2

H2:

sub bl,cl

mov cl,bl

jmp F2

F2:

mov al,cl

and al,0fh ;显示键码

mov ah,0

mov bx,offset LEDMAP

add bx,ax

mov al,[bx]

mov Store[4],al

mov cl,num1+2 ;第三位相减

mov bl,Store1+2

sub bl,jiewei

cmp bl,0Fh ;考虑0被借位变成F jz N2

jmp M2

N2: mov bl,09h

jmp M2

M2: mov jiewei,0

cmp bl,cl

jae H3

mov jiewei,1

mov bh,0ah

sub bh,cl

add bl,bh

mov cl,bl

jmp F3

H3:

sub bl,cl

mov cl,bl

jmp F3

F3:

mov al,cl

and al,0fh ;显示键码

mov ah,0

mov bx,offset LEDMAP

add bx,ax

mov al,[bx]

mov Store[3],al

mov cl,num1+1 ;第四位相减

mov bl,Store1+1

sub bl,jiewei

cmp bl,0Fh ;考虑0被借位变成F jz N3

jmp M3

N3: mov bl,09h

jmp M3

M3: mov jiewei,0

cmp bl,cl

jae H4

mov jiewei,1

mov bh,0ah

sub bh,cl

add bl,bh

mov cl,bl

jmp F4

H4:

sub bl,cl

mov cl,bl

jmp F4

F4:

mov al,cl

and al,0fh ;显示键码 mov ah,0

mov bx,offset LEDMAP

add bx,ax

mov al,[bx]

mov Store[2],al

mov cl,num1+0 ;最高位相减 mov bl,Store1+0

sub bl,jiewei

mov jiewei,0

cmp bl,cl

jae H5

mov jiewei,1

sub cl,bl

jmp F5

H5:

sub bl,cl

mov cl,bl

jmp F5

F5:

mov al,cl

and al,0fh ;显示键码 mov ah,0

mov bx,offset LEDMAP

add bx,ax

mov al,[bx]

mov Store[1],al

jmp back3

ADDa:

mov cl,num1+4 ; 最低位执行加法 mov bl,Store1+4

add cl,bl

cmp cl,0ah

相关文档
最新文档