当前位置:文档之家› 指令与汇编语言程序设计

指令与汇编语言程序设计


单片机实用教程 第3章 指令与汇编语言程序设计
2.比较转移指令应用举例
例3-3程序用比较转移指令修改如下:
START:
MOV R0,#30H ;指向第一个单元
MOV A,#0
;送的第一个数
AA: MOV @R0,A ;循环体,完成数据传送
INC A
;修改送的数据
INC R0
;修改指向的单元
CJNE A,#16,AA ;根据操作数信息控
;若A﹥data,PC←PC +rel,程序转移,Cy=0; ;若A﹤data,PC←PC +rel,程序转移,Cy=1; (2)CJNE Rn,#data,rel ;PC←PC +3,若Rn=data,程序顺序执行 ;若Rn﹥data,PC←PC +rel,程序转移,Cy=0; ;若Rn﹤data,PC←PC +rel,程序转移,Cy=1; (3)CJNE @Ri,#data,rel ;PC←PC +3,若=data,程序顺序执行 ;若(Ri)﹥data,PC←PC +rel,程序转移,Cy=0; ;若(Ri)﹤data,PC←PC +rel,程序转移,Cy=1; (4)CJNE A,direct,rel ;PC←PC +3,若A=(direct),程序顺序 执行; ;若A﹥(direct),PC←PC +rel,程序转移,Cy=0; ;若A﹤(direct),PC←PC +rel,程序转移,Cy=1;
MOV R2,#0H MOV R3,#0 AA: MOV A ,@R0 JB P,BB
INC R2
BB: CC:
SJMP CC INC R3 INC R0 DJNZ 20H,AA;
RET
单片机实用教程 第3章 指令与汇编语言程序设计
[例3-12]根据A中的内容选择相应的程序段执行。
START:MOV DPTR,#TAB ;指令表首址送DPTR
按照指令的顺序依次执行的程序,它也是所 有程序设计中最基本、最重要的程序 。
单片机实用教程 第3章 指令与汇编语言程序设计
[例3-1] 0~15共十六立即数送到内部RAM 30H开始的 单元中。
本题题意非常清楚,就是将0送到内RAM 30H 单元,将1送到内RAM 31H单元,以此类推。将立即 数送到内部RAM单元有现成的指令,这是一个功能 性数据处理,格式上可以写成子程序的形式,程序设 计如下:
RRC A;
Cy A7
A0
单片机实用教程 第3章 指令与汇编语言程序设计
[例3-6] 执行下面的指令,在注释区记录A中数据的变 化。
MOV A,#03H ;A=00000011B=3
CLR C
;Cy=0
RLC A
;A=00000110B=6,Cy=0
RLC A
;A=00001100B=12,Cy=0
4)DEC @Ri
;(Ri)←(Ri)-1
单片机实用教程 第3章 指令与汇编语言程序设计
3、循环程序设计举例
[例3-3] 0~15共十六个立即数送到内部RAM 30H开 始的单元中。
MOV 30H,#0
MOV 31H,#1 ……
MOV R0,#30H MOV A,#0 MOV @R0,A
MOV R0,#31H MOV A,#1 MOV @R0,A
单片机实用教程 第3章 指令与汇编语言程序设计
(3)判A转移指令 JB bit,rel ;PC←PC+3,若(bit)=1, ;则转移,PC←PC+rel ; 若(bit)=0,则顺序执行。 JNB bit,rel ;PC←PC+3,若(bit)=0, ;则转移,PC←PC+rel ; 若(bit)=1,则顺序执行。 JBC bit,rel ;PC←PC+3,若(bit)=0, ;则顺序执行。 ;若(bit)=1,则转移, ;PC←PC+rel,且(bit)←0
;送循环体循环修改
INC A
;循环修改
INC R0
;修改指向的单元
DJNZ R2,AA ;循环次数减1,到0退
;出循环,循环控制
RET
;子程序返回0
单片机实用教程 第3章 指令与汇编语言程序设计
二、比较转移指令与循环程序设计
1、比较转移指令 (1)CJNE A,#data,rel ;PC←PC +3,若A=data,程序顺序执行
START: MOV 30H,#0 ;(30H)←#0
MOV 31H,#1 ;(31H)←#1

MOV 3FH,#15 ;(3FH)←#15
RET
;返回
单片机实用教程 第3章 指令与汇编语言程序设计
一、循环程序的结构
1、循环程序:主要是用来实现功能相同、反复执行 的操作。
循环初值
循环体
循环修改
Y 循环控制 N 退出循环
可以看出左移一次相当于乘2;类似右移相当除以2。
2.循环移位指令应用
单片机实用教程 第3章 指令与汇编语言程序设计
2.循环移位指令应用
[例3-7]将第二章的循环流水灯程序修改成循环程序
ORG 0000H
LJMP SETUP
ORG 0030H
SETUP: MOV A,#0FEH ;循环初值
MAIN: MOV P1,A
1.条件转移指令 (1)判A转移指令
JZ rel ;PC←PC+2,若A=0,则转移, ;PC←PC+rel ;若A≠0,则顺序执行。
JNZ rel ;PC←PC+2,若A≠0,则转移, ;PC←PC+rel ;若A=0,则顺序执行。
单片机实用教程 第3章 指令与汇编语言程序设计
(2)判Cy转移指令 JC rel ;PC←PC+2,若Cy=1,则转移, ;PC←PC+rel ;若Cy=0,则顺序执行。 JNC rel ;PC←PC+2,若Cy=0,则转移, ;PC←PC+rel ;若Cy=1,则顺序执行。
一、堆栈的概念
1、堆栈是内部RAM中一段用来暂时存放数据的存储区, 通常用来保护断点和现场。
2、SP——堆栈指针对其进行管理,SP始终指向堆栈顶 部数据的地址,SP在单片机复位后它的值是07H。
3、堆栈中数据的存取方式按照先进后出、后进先出的 原则进行 。
4、堆栈操作
(1)压栈:先将SP加1,然后将要压入堆栈的数据 送到SP指示的单元中。
(2)隐含的堆栈操作指令 LCALL addr16 ;①PC←PC+3,
一般情况下,应在 初始化区对SP进 行设置,将堆栈设 定在数据缓冲区。
单片机实用教程 第3章 指令与汇编语言程序设计
2.条件转移指令应用 [例3-9]编写程序计算内RAM 20H单元中“1”的个
数,存放在R3中。 START:MOV R3,#0
MOV A,20H MOV R2,#8 AA: RLC A JNC BB INC R3 BB: DJNZ R2,AA; RET
CLR C
RLC A
;A的值乘以2
JNC AA

INC DPH ;超过256在DPH中加1
AA: JMP @A+DPTR ;散转指令
TAB: AJMP LOOP0 ;无条件转移指令表
AJMP LOOP1

AJMP LOOPn
LOOP0:…
;分支程序0

LOOP1:…
;分支程序1

单片机实用教程 第3章 指令与汇编语言程序设计
INC R1 BB: INC R0
DJNZ R2,AA;
RET
单片机实用教程 第3章 指令与汇编语言程序设计
五、分支程序的设计
1.单分支结构程序
条件成立?
2.多分支结构程序
(A)=n
S0
S1

Sn
分支0 分支1
分支n
图3-8 散转程序结构图
单片机实用教程 第3章 指令与汇编语言程序设计
[例3-11] 内部RAM 30H开始的单元,存放有一组无符号 数据块,数据块的长度在20H单元中,试编写程序计算数据块 中满足偶校验和满足奇校验数的个数,分别存放在R2和R3中。 START:MOV R0,#30H
(2)弹栈:先将数据弹出,然后将SP减1,指向新 的单元 。
单片机实用教程 第3章 指令与汇编语言程序设计
二、堆栈操作指令
1、堆栈操作指令
PUSH direct ;①SP+1→SP,
;②(direct)→(SP)
POP direct ;① (SP)→(direct),
;②SP-1→SP
[例3-13]已知SP=60H,分析执行下列指令后的结果。
循环初值
循环控制 Y
循环体 循环修改
N 退出循环
图 3 - 2 循环程序的两种结构
单片机实用教程 第3章 指令与汇编语言程序设计
循环程序一般包括四个部分:循环初值、循环 体、循环修改和循环控制。
循环初值:循环程序开始循环执行的初始条件,如 循环的次数等,在循环程序的开始部分,只执行一 次。
循环体:是循环程序的核心,就是反复要完成的具 体操作功能。
2、画流程图
起止框 处理框 判断框 输入/输出框 流程指向线
单片机实用教程 第3章 指令与汇编语言程序设计
3、编写源程序画流程图 4、汇编和调试 程序书写的两种格式:
第一种是完整程序格式的形式,即在第 二章介绍的程序一般结构 。
第二种就是子程序的形式。
二、顺序程序设计 顺序程序设计 :又叫直线程序,它是
;点亮灯
LCALL DELAY ;调延时子程序
RL A
;循环修改
LJMP MAIN
相关主题