当前课程知识点:单片机原理及应用 > 4 汇编语言程序设计 > 4.5 顺序程序举例 > 顺序程序举例
同学
你好
今天我们将继续顺序结构程序编写的介绍
我们将看一道稍微复杂一点的例题
如PPT所示
请同学们编程实现三字节无符号数的相加
其中被加数在内部RAM的
50H 51H和52H单元中
那么加数在内部RAM的53H 54H
和55H地址的单元中存放
要求把相加之结果
把加的和存放在内部RAM的50H 51H
和52H地址对应的单元中
这个进位的结果存放在位寻址区的00H
我们在PPT中都已经用图形的方式
展示了被加数和进位标志位存放的具体位置
数据一定要注意是在内部RAM中存放
如图所示的存放的方式
好的
我们也给出了三字节无符号相加的
具体的程序
我们整个程序采用的是顺序结构来编写的
同学们可以看一看
先看一看整个程序
因为这个是两个三字节数据相加
我们前面说过51单片机它是八位机
一条加法指令只能
实现两个单字节数据的相加
所以我们把整个程序可以看作是
四个部分
第一个部分是实现低字节的相加
第二个部分实现中间字节的加法
第三个部分实现高字节的加法
最后一部分就是处理高字节加法的进位位
程序中用R0和R1来作为
被加数和加数取数指针
下面我们就一起来看一看这个程序的
每一条指令的具体的功能
首先我们看第一条指令
MOV R0 , #52H
这条指令的功能相当于
是给工作寄存器R0赋初值52H
第二条指令MOV R1,#55H
该条指令利用MOV传送指令
实现把立即数55H赋给工作寄存器R1
相当于给R1赋初值55H
第三条指令MOV A ,@R0
这里面的@R0就是一个寄存器的间接寻址
因为R0里面的内容是52H
注意这是一个地址了
把52H这个地址所对应的
RAM单元的数据取出来送给累加器A
然后就是ADD A ,@R1
R1里面内容也赋了初值是55H
相当于就是把累加器A的内容
加上R1 55H加数的低字节的
RAM中的注解取出来相加
把结果再送给累加器A
前四条指令就实现了
三字节数的第一字节的相加
再来看
MOV @ R0, A
就是把低字节的加法的结果再存到
R0所指向的RAM单元中存放
下面的两条指令
DEC R0 DEC R1
DEC是自减
把R0自减一个1
减的结果才会回存到R0
就实现R0和R1的自减1
未取加数和被加数中间字节的数来做准备
下面就是
MOV A, @ R0
ADDC A,@R1
R1就是实现中间字节的带进位位的相加
因为中间字节在相加时要考虑
第一字节加法的进位
然后用MOV @R0 , A
就实现了把中间字节相加结果的回存
注意一下
@R0 是一个寄存器的间接寻址
所以这个结果并不是存到R0中
而是存到二零所指向的RAM单元中
然后再就是DEC R0, DEC R1
自减1实现为高字节的取数做准备
后面的几条指令类似于前面的
就实现高字节的相加
也是要带ADDC带进位位
因为高字节相加时
这个要考虑到中间字节的进位
好
等实现了高字节相加之后
我们最后来看一看
那么最高字节的进位的存储
首先CLR A 把A清零
然后ADDC A, # 00H
相加目的是要
把高字节相加的进位位加进来
存到累加器A的最低位
相当于这条指令执行完之后
累加器A的最低位里面是高位进位的结果
然后再利用一个MOV R0 , #20H
把R0的这个地址
送给工作寄存器R0
最后MOV @R0 , A
A里面的最低位是进位标志位
R0中是20H
送到RAM的20H单元去存放
由于我们的位地址00H
我们可以看到PPT中
实际上就是在20H单元的最低位
所以你利用MOV @R0 , A
就实现了把进位标志位
存放到位地址00H的单元
也就是单元地址20H这个单元的最低位
好的
今天我们用了一个三字节无符号数相加的程序
介绍了同学们能够明白这个顺序程序的执行过程
顺序程序比较简单
它的程序是一条一条的顺序执行
通过这个例题同学们也能够体会到
在进行汇编源程序编写中
你一定要对我们前面介绍的
这些机器指令要十分的熟悉
如果有些指令如果你还不十分熟悉
请你下去之后
要仔细的再去看一看这些指令的功能
好的
今天的课就到这里
同学们再见
-1.1 单片机的名称
--单片机的名称
-1.2 单片机的相关概念
--单片机的相关概念
-1.3 单片机的设计语言及软件
-1.4 单片机的发展
--单片机的发展
-1.5单片机的应用
--单片机的应用
-1.6 第一单元作业
-2.1 单片机的结构框图
--单片机的结构框图
-2.2 80C51内部结构
-2.3 信号引脚
--信号引脚
-2.4 内部数据存储器RAM
-2.5 特殊功能寄存器
--特殊功能寄存器
-2.6 堆栈
--堆栈
-2.7 内部程序存储器ROM
-2.8 存储器的结构特点
--存储器的结构特点
-2.9 并行输入输出接口电路
-2.10 并口功能与时序
--并口功能与时序
-2.11 工作方式
--工作方式
-2.12 最小应用系统
-- 最小应用系统
-2.13 第二单元作业
-3.1 指令格式
--指令格式
-3.2 立即寻址与直接寻址
-3.3 寄存器寻址与寄存器间接寻址
-3.4 变址间接寻址与位寻址
-3.5 内部RAM传送指令
-3.6 外部RAM传送指令
-3.7 ROM传送指令
--ROM传送指令
-3.8 交换指令
--交换指令
-3.9 堆栈操作指令
--堆栈操作指令
-3.10 传送类指令习题讲解
-3.11 算术运算类指令特点
-3.12 加法指令
--加法指令
-3.13 加法习题、减法和乘除指令
-3.14 逻辑运算指令
--逻辑运算指令
-3.15 布尔变量操作指令
--布尔变量操作指令
-3.16 无条件转移指令
--无条件转移指令
-3.17 条件转移指令
--条件转移指令
-3.18 循环转移指令
--循环转移指令
-3.19 子程序相关指令
--子程序相关指令
-3.20 并口访问指令及指令小结
-3.21 第三单元作业
-4.1 汇编程序约定
--汇编程序约定
-4.2 宏指令
--宏指令
-4.3 汇编控制指令
--汇编控制指令
-4.4 汇编语言程序设计步骤
-4.5 顺序程序举例
-- 顺序程序举例
-4.6 单重分支结构
--单重分支结构
-4.7 多重分支结构
--多重分支结构
-4.8 单重循环结构
--单重循环结构
-4.9 计数控制循环程序
--计数控制循环程序
-4.10 特征控制循环程序
-- 特征控制循环程序
-4.11 多重循环程序
--多重循环程序
-4.12 子程序的概念
--子程序的概念
-4.13 子程序设计注意事项
-4.14 子程序举例
--子程序举例
-4.15 第四单元作业
-5.1 系统扩展
--系统扩展
-5.2 51单片机扩展方法
-5.3 存储器单元位数扩充方法
-5.4 存储器容量单元扩充方法
-5.5 译码线选法
--译码线选法
-5.6 程序存储器的类型
--程序存储器的类型
-5.7 程序存储器的扩展
--程序存储器的扩展
-5.8 数据存储器的扩展
--数据存储器的扩展
-5.9 存储器综合扩展
--存储器综合扩展
-5.10 单片机存储器系统的特点
-- 单片机存储器系统的特点
-5.11 第五单元作业
-6.1 中断技术
--中断技术
-6.2 中断优先级及中断系统内部结构
-6.3 中断控制寄存器及中断响应过程
-6.4 中断请求的撤消
--中断请求的撤消
-6.5 外部中断举例
--外部中断举例
-6.6 定时器/计数器
--定时器/计数器
-6.7 定时计数器工作方式及程序编写
-6.8 定时器举例
--定时器举例
-6.9 第六单元作业
-7.1 并行接口
-- 并行接口
-7.2 并口举例
--并口举例
-7.3 并口扩展芯片
--并口扩展芯片
-7.4 8155连接方式及编程
-7.5 键盘接口技术
--键盘接口技术
-7.6 按键处理程序及举例
-7.7 键盘扫描子程序
-- 键盘扫描子程序
-7.8 显示接口技术
--显示接口技术
-7.9 多位字符静态显示
--多位字符静态显示
-7.10 多位字符动态显示
--多位字符动态显示
-7.11 第七单元作业
-8.1 流水灯控制系统设计
--html
-8.2 数码管显示系统设计
--html
-8.3 按键控制系统设计
--html
-8.4 中断控制系统设计
--html
-8.5 定时计数器系统设计
--html
-8.6 串口通信系统设计
--html
-8.7 汉字显示系统设计
--html
-8.8 单片机烧录方法
--单片机烧录方法
-8.9 第八章作业-作业