单片机实验报告——加减法
更新时间:2023-06-07 05:11:01 阅读量: 实用文档 文档下载
单片机实验一
一、实验目的
1. 学习多字节压缩BCD 码加减法运算的程序设计;
2. 学习单字节有符号数加减运算的程序设计。
二、实验设备
统一电子开发平台
三、实验要求
1.编写通用4 字节压缩BCD 码的加、减法运算程序;
2.编写通用单字节有符号二进制数加、减法运算程序;
四、实验原理
对于简单的8 位加减可以直接调用指令就可以了。例如加法可以使用指令ADD 以及带进位加ADDC,
但单字节加减法只能在256 之内进行运算;在实际应用中经常需要进行多字节运算,从而处理更大的数
据。该实验介绍单片机BCD 码多字节加、减运算通用程序的设计。
1.多字节无符号压缩BCD 码加法运算
假设多字节无符号被加数的最低字节的地址为R0,加数的最低字节地址为R1,字节数共为len;计
算结果的地址于被加数相同。
◆ 入口参数:
R0:被加数地址指针;
R1:加数地址指针;
len:字节数。
◆ 出口参数:
@R0:计算结果;
rLen:计算结果字节数。
◆ 使用资源:ACC,R0、R1,内部RAM 单元len、rlen 及存放被加数、加数、计算结果的内存单元。
示例程序如下:
;多字节无符号压缩BCD 码加法运算
rlen data 30h; 存放计算结果字节数
len data 31h; 存放相加字节数
; r0 定位40h,r1 定位50h
; 此处的程序的问题是前面字节的进位没有处理,
; 只是对最后字节相加处理了进位ORG 0000h;
ADDl: PUSH PSW ;保护标志寄存器内容
CLR C ;进位位清0
MOV rlen,#00H ;和的字节数先清0
ADD: MOV A,@R0 ;取被加数
ADD A,@R1 ;求和
DA A ;十进制调整
MOV @R0,A ;保存
INC R0 ;地址增1
INC R1
INC rlen ;字节数增1
DJNZ len,ADD ;所有字节未加完继续,否则向下执行
JNC ADD20 ;和的最高字节无进位转ADD20
MOV @R0,#01H ;和的最高字节地址内容为01H
INC rlen
ADD20: POP PSW
RET
END
多字节加法运算一般是按从低字节到高字节的顺序进行的,所以必须考虑低字节向高字节的进位情况,被加数和加数的压缩BCD 码,最大不超过99,而99+99+1(进位)=199,此时不需要使用ADDC 指令,但当两字节当最低两字节相加后,必须使用“DA A”进行十进制调整,调整后产生进位。而最高两字节相加后应考虑是否有进位。若有进位,应向和的最高位字节地址写入01H,这时和数将比加数或被加数多出一个字节。
2.单字节带符号数加法运算
编程范例:
两个8 位二进制带符号数加法,被加数和加数分别存于BLK 和BLK+1 单元,和超过8 位要占两个单元,设为SUM 和SUM+1 单元。解:两个带符号数的加法是作为补码加法处理的。由于和超过8 位,因此,和就是一个16 位带符号数,符号位在16 位数的最高位。为此,直接相加进位是不够的,还要做一些处理。例如-65 和-65 相加,若直接求和产生溢出,即使扩展到16 位,结果也不正确。如:-65 1 0 1 1 1 1 1 lB+) -65 1 0 1 1 1 1 1 1B
0 0 0 0 0 0 0 1 0 1 1 1 1 1 1 OB现在这个16 位数的最高位为0,两个负数相加变为正数,显然是错误的。处理的方法是先将8 位带符号数扩展成16 位带符号数,然后再相加。若是8 位正数,则高8 位扩展为00H;若是8 位负数,则高8 位扩展为0FFH。这样处理后,再按双字节相加,就可以得到正确的结果。如上例,由于是负数,高8 位应是全1,然后再加:-65 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1B+) -65 1 1 1 1 1 1 1 1 1 0 1 l 1 1 1 1B
1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0B,最高位的进位丢失不计。换算成真值为—130,结果正确。在编程时,判别加数和被加数的符号位,再决定是否要将高8 位改为0FFH。程序如下: BLK DATA 30H
SUM DATA 40H
ORG 0000h
MAIN:
MOV R0,#BLK ;R0 指向被加数
MOV R1,#SUM ;R1 指向和
MOV R2,#0 ;高8 位先设为0
MOV R3,#0
MOV A,@R0 ;取出被加数
JNB ACC.7,N1 ;若是正数转移到N1
MOV R2,#0FFH ;若是负数高8 位为全1
N1:INC R0 ;修改即指针
MOV B,@R0 ;取加数到B
JNB B.7,N2 ;若是正数转移N2
MOV R3,#0FFH ;若是负数高8 位为全1
N2:ADD A,B ;低8 位相加 .
MOV @R1,A ;存低8 位和
INC R1 ;修改R1 指针
MOV A,R2 ;准备加高8 位
ADDC A,R3 ;高8 位相加
MOV @R1,A ;存高8 位和
SJMP $
END
3.多字节无符号压缩BCD 码减法运算
为了使用“DA A”指令对十进制减法进行调整,必须采用对减数求补相加的方法,以9AH 为模减去减数即得到减数的补数。设被减数低字节地址存在R1,减数低字节地址存在R0,字节数存在len;差的低字节地址存在R0,差的字节数存在rlen。
入口参数:
R0:减数地址指针;
R1:被减数地址指针;
len:字节数
出口参数:
R0:差的地址指针
R3:差的字节数
使用资源: A,R0,R1,内部RAM 单元
范例程序如下:
rlen data 30h; 存放计算结果字节数
len data 31h; 存放相加字节数
ORG 0000h;
SUBCD: MOV rlen,#00H ;差字节单元清0
CLR 07H ;符号位清0
CLR C ;借位位清0SUBBCD: MOV A,#9AH ;减数对模100 求补
SUBB A,@R0
ADD A,@R1 ;补码相加
DA A
MOV @R0,A ;存结果
INC R0
INC R1
1NC rlen
CPL C ;进位求反以形成正确借位
DJNZ len,SUBCDl ;未减完去SUBCDl,减完向下执行
JNC SUBCD2 ;无借位去别Ⅸm 返回主程序,否则继续
SETB 07H ;有借位,置“1”符号位
SUBCD2: RET
END
程序中对减数求补后与被减数相加,用“DA A”指令进行调整。若二者相加调整后结果无进
位(C=0),则表示二者相减有借位;若二者相加调整后有进位(C;1),则表示二者相减无借位。所以必须对进位标志位C 进行求反操作,才能得到正确结果。
五、实验步骤
1.按照实验要求编写程序。
2.在开发环境中运行程序,对通用寄存器进行赋值,看运算结果是否正确。
输入输出效果:
正在阅读:
单片机实验报告——加减法06-07
财务科3月份总结及4月份工作计划07-27
组织学与胚胎学重点02-03
美术教师工作总结范本八篇04-03
最全初中英语音标学习资料汇总03-08
大学电路复习选择题12-06
关于小学生二年级动物的作文06-13
20100510股指期货基础知识测试试题06-03
母子情深作文450字07-12
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 加减法
- 单片机
- 实验
- 报告