多字节、多进制加法运算实验报告
更新时间:2023-11-01 19:49:01 阅读量: 综合文库 文档下载
多字节、多进制加减运算
学生: 何绍金 学号: 201203870408
专业班级:自动化1202
指导老师: 杨东勇
2014年12月
一、实验目的
1. 学习多字节压缩 BCD 码加减法运算的程序设计; 2. 学习单字节有符号数加减运算的程序设计。
二、实验设备
统一电子开发平台
三、实验要求
1.编写通用 4 字节压缩 BCD 码的加、减法运算程序; 2.编写通用单字节有符号二进制数加、减法运算程序;
四、实验原理(单字节带符号数加法运算)
对于简单的8 位加减可以直接调用指令就可以了。例如加法可以使用指令ADD 以及带进位加ADDC,但单字节加减法只能在256 之内进行运算;在实际应用中经常需要进行多字节运算,从而处理更大的数据。该实验介绍单片机BCD 码多字节加、减运算通用程序的设计。
五、实验过程
1.多字节无符号压缩BCD 码加法运算假设多字节无符号被加数的最低字节的地址为R0,加数的最低字节地址为R1,字节数共为len;计算结果的地址于被加数相同。
(1)入口参数:
R0:被加数地址指针; R1:加数地址指针; len:字节数。 (2)出口参数: @R0:计算结果;
rLen:计算结果字节数。
(3)使用资源: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。
(1)入口参数: R0:减数地址指针; R1:被减数地址指针; len:字节数
(2)出口参数: R0:差的地址指针 R3:差的字节数
(3)使用资源: A,R0,R1,内部RAM 单元 范例程序如下:
rlen data 30h ; 存放计算结果字节数 len data 31h ; 存放相加字节数 ORG 0000h;
SUBCD: MOV rlen,#00H ;差字节单元清0 CLR 07H ;符号位清0 CLR C ;借位位清0 33
SUBBCD: 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.检查结果是否正确:打开资源管理窗口,键入DS:0030H,窗口便会显示从30H地址开始,寄存器的值,其中,30H是一加数的值,31H则是另一加数的值,在窗口中把30H值改为01,31H改为02,再次运行程序后,在资源管理中键入DS:0040H,40H地址显示的值便是03,结果符合要求。
2.分析 DA A指令的作用。
答:被加数A与加数R1都是以补码的形式进行运算,即形式上是十进制的相加,但在单片机中是以二进制进行运算即十六进制进行运算的,结果自然也就是二进制的,DA指令就是为了把结果调整为十进制的运算结果,但以二进制形式存储。
3.说明怎样处理单字节有符号数的减法? 答:先将8位带符号数扩展成16位带符号数,然后再相加。若是8位正数,则高8位扩展为00H;若是8位负数,则高8位扩展成0FFH。这样处理后,再按双字节相加,就可以得到正确的结果。
附:实验源代码:
1.程序清单和注释 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 MOV @R1,A INC R1 MOV A,R2 ADDC A,R3 MOV @R1,A SJMP $ END
;低 8 位相加 . 8 位和 ;修改 R1 指针 ;准备加高 8 位 ;高 8 位相加 ;存高 8 位和 ;存低
正在阅读:
多字节、多进制加法运算实验报告11-01
论文关键词:少数民族音乐 兴趣08-21
警告信和感谢信的制度04-08
管理是学曹操还是学诸葛亮11-10
基于Matlab的GH bladed软件风机外部控制器设计 - 图文06-19
会议播放系统施工方案04-05
影响全国私人汽车拥有量的因素分析10-15
区档案馆最新半年工作总结及2022年重点工作部署范本04-04
防突员技术比武学习题库04-01
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 加法
- 进制
- 运算
- 字节
- 实验
- 报告
- C#利用句柄操作窗口
- 汽轮机运行规程
- 数据库答案
- 国家高压电工模拟题十五套合集简化版
- 13六届二次会议纪要201107号
- 湖北省黄冈市2016届中考生物二模试卷(解析版)
- 《数据库原理及应用》总复习题(带答案)
- 《预防医学》作业集答案(专升本)
- 钢筋班级管理制度
- RRU共小区配置指导
- 2013地质地球所博士生入学《工程地质学》试题
- 实变函数期中考试试题预测
- 浅谈白居易的平民情结
- YT4543型组合滑台液压系统原理与故障分析 - 图文
- 长春理工大学成人教育专业介绍
- 2016龙街镇朝阳小学贫困生寄宿生活费补助发放简报
- 绩效考核的科学性与公平性的关系
- 静电场问题实例:平板电容器电容计算仿真
- TCP端口号注册大全
- 课程与教学论各章节练习题 - 图文