微机原理-04汇编语言程序设计知识
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、程序功能模块化的优点
• 单个模块结构的程序功能单一,易于编写、调试和修改。 • 便于分工,从而可使多个程序员同时进行程序的编写和调试
工作,加快软件研制进度。 • 程序可读性好,便于功能扩充和版本升级。 • 对程序的修改可局部进行,其它部分可以保持不变。 • 对于使用频繁的子程序可以建立子程序库,便于多个模块调
•RL指令对变址部分乘以2,因为每条AJMP指令占两个字节。
20:23
单片机技术
例4:多分支结构,由40H单元中动态运行结果选择分支。 当分支数目超过128时
START:
TABEL: Addr16:
MOV DPTR,# Addr16 MOV A, 40H CLR C RLC A JNC TABEL INC DPH JMP @A+DPTR
SJMP STORE
BIG:
JC STORE
MOV A,TWO
STORE: MOV RES,A
SJMP $
单片机技术
• 例3: 多分支转移程序。 • 功能:根据入口条件转移到128个目的地址。 • 入口:(R3)=转移目的地址的序号00H~7FH。 • 出口:转移到相应子程序入口。
散转指令
K=0
K=1 ┅
用。
20:23
单片机技术
2、划分模块的原则
• 每个模块应具有独立的功能,能产生一个明确的结果,即 单模块的功能高内聚性。
• 模块之间的控制耦合应尽量简单,数据耦合应尽量少,即 模块间的低耦合性。控制耦合是指模块进入和退出的条件 及方式,数据耦合是指模块间的信息交换方式、交换量的 多少及交换频繁程度。
NEXT:
SJMP COMP INC A
INC R0
COMP:
SJMP LOOP MOV NUM,A
SJMP $
20:23
单片机技术
§4.2 汇编语言源程序的编辑和汇编
§4.2.1 源程序编辑
• 在微型计算机上,借助编辑软件,编写或修改汇编语言源 程序。如行编辑或屏幕编辑软件。
§4.2.2 源程序的汇编
20:23
单片机技术
例1:双字节求补
20:23
START:
ZER0: LOOP1:
MOV R0,#addr1 MOV R1,# addr2 MOV A, @R0 CPL A INC A MOV @R1, A INC R0 INC R1 JZ ZER0
MOV A, @R0
CPL A MOV @R1, A SJMP LOOP1 MOV A, @R0 CPL A INC A MOV @R1, A SJMP LOOP1
完
完
循环控制
未完
循环体
循环修改
do while
退出循环
(a)
(b)
循环组织方式流程图
20:23
单片机技术
退出循环
while
例1:设单片机晶振频率6M,编写一段程序,大约延时1秒钟。分析:
由于DJNZ指令最多的循环次数是256次,而1S÷256÷256 约等于
15μS,晶振频率6MHZ,则1个机器周期为2μS,我们把内循环定为
20:23
单片机技术
二、确定算法
• 算法是如何将实际问题转化成程序模块来处理。 • 在编程以前,先要对几种不同的算法进行分析、比较,找
出最适宜的算法
三、画程序流程图
• 程序流程图是使用各种图形、符号、有向线段等来说明程 序设计过程的一种直观的表示。
• 流程图步骤分得越细致,编写程序是也越方便。 • 画流程图是程序结构设计是采用的一种重要手段。 • 一个系统软件有总的流程图(主程序框图)和局部的流程
0033 80FE
SJMP $
0000
END
也可以规定数据表格存放的起始地址。
20:23
单片机技术
3.EQU 赋值命令
• 格式:字符名称 EQU 项(数或汇编符号)
• 功能:把“项”赋给“字符名称”。
• 注意:字符名称不等于标号(其后没有冒号);其中的项,可 以是数或汇编符号。EQU赋值过的符号名可以用作数据、代码 地址、位地址或一个立即数。可以是8位的,也可以是16位的。
• 汇编:将汇编语言源程序转换为机器码表示的目标程 序的过程。对单片机有: 手工汇编、机器汇编、反汇编
20:23
单片机技术
汇编语言 源程序
汇编
目标程序
一、手工汇编
汇编程序
• 通过手工方式查指令编码表,逐个把助记符指令“翻译”成 机器码,然后把得到的机器码程序键入单片机,进行调试和 运行。
二、机器汇编
• 例1:
• AA EQU R1
20:23
单片机技术
例3:统计字串长度。内存从STRING开始有一字串,该 字串以$(ASCII码为24H)结束,试统计该字串长度, 结果存于NUM单元中
解:
ORG 0800H
NUM DATA 20H
STRING DATA 21H
START: LOOP:
CLR A MOV R0,#STRING CJNE @R0,#24H,NEXT
单片机技术
20:23
例2:片内RAM ONE和TWO两个单元中存有两个无 符号数,将两个数中的小者存入RES单元。
解: ORG 1000H
ONE DATA 22H ;定义ONE
TWO DATA 23H ;定义TWO
RES DATA 30H ;定义RES
MOV A,ONE
START:
CJNE A,TWO,BIG
• 格式:END • 功能:通知汇编程序结束汇编。在END之后所有的汇
编指令均不予以处理。
20:23
单片机技术
例1: 地址 机器指令
源自文库
汇编源程序
0000
ORG 0000H
0000 020030
LJMP MAIN
0030
ORG 0030H
0030 E4 MAIN: CLR A
0031 F530
MOV 30H,A
第4章 汇编语言程序设计知识
§4.1 编程的步骤、方法和技巧
§4.1.1 编程的步骤
分析问题 确定算法 画程序流程图 编写程序
一、分析问题
• 对需要解决的问题进行分析,以求对问题由正确的理解。 • 解决问题的任务是什么? • 工作过程? • 现有的条件,已知数据,对运算的精度和速度方面的要求? • 设计的硬件结构是否方便编程?
解:
ORG 1000H START:MOV A,R0
CPL A ADD A,#01H MOV R2,A MOV A,R1 CPL A ADDC A,#00H MOV R3,A SJMP $
单片机技术
二、分支程序
特点:程序分为多路,根据条件选择执行的路径
• 程序分支是通过条件转移指令实现的,即根据条件对程序的 执行进行判断、满足条件则进行程序转移,不满足条件就顺 序执行程序。
图。 • 流程图常采用的图形和符号。
20:23
单片机技术
椭圆框 矩形框 菱形框
圆圈 指向线
20:23
或桶形框
:表示程序的开始或结束。
:表示要进行的工作。
:表示要判断的事情,菱形框内 的表达式表示要判断的内容。
:表示连接点 :表示程序的流向
单片机技术
§4.1.2 编程的方法和技巧
一、模块化的程序设计方法
练习: 1.将片外RAM 2000H单 元开始的20个字节,传送 到片内RAM 30H单元开 始的单元中去。 2.将片内RAM 20H单元 开始的10个字节,传送到 片内RAM 30H单元开始 的单元中去。
3. 将片 内RAM BK1单元 开 始 的 COUNT 个 字 节 , 传送到片外RAM BK2单 元开始的单元中去。
20:23
单片机技术
例2 :拆字。将片内RAM 20H单元的内容拆成两段,每 段四位。并将它们分别存入21H与22H单元中。
解: START:
ORG 2000H
MOV R0,#21H ;21H→R0
MOV A,20H
;(20H)→A
ANL A,#0FH ;A∧#0FH→A
MOV @R0,A ;(A)→(R0)
• 模块长度适中。20条~100条的范围较合适。
20:23
单片机技术
二、编程技巧
1、尽量采用循环结构和子程序。 2、尽量少用无条件转移指令。 3、对于通用的子程序,考虑到其通用性,除了用于存放子程序
入口参数的寄存器外,子程序中用到的其他寄存器的内容应 压入堆栈(返回前再弹出),即保护现场。 4、在中断处理程序中,除了要保护处理程序中用到的寄存器外, 还要保护标志寄存器。 5、用累加器传递入口参数或返回参数比较方便,在子程序中, 一般不必把累加器内容压入堆栈。
INC R0
;(R0)+1 →R0
MOV A,20H ;(20H)→A
SWAP A,
;A0~3 ← →A4~7
ANL A,#0FH ;A∧#0FH→A
MOV @R0,A ;(A)→(R0)
SJMP $
20:23
单片机技术
20:23
例3:16位数求补。设16位二进制数在 R1R0中,求补结果存于R3R2中。
20:23
单片机技术
例2:数据块传送。将片内RAM 20H单元开始的10个字 节,传送到片外RAM 1000H单元开始的单元中去。
解:
ORG 0800H START:MOV R0,#20H
MOV DPTR,#1000H MOV R7,#0AH LOOP: MOV A,@R0 MOVX @DPTR,A INC R0 INC DPTR DJNZ R7,LOOP SJMP $
20:23
单片机技术
§4.2.3 伪指令
• 伪指令不是真正的指令,无对应的机器码,在汇编时不产生 目标程序,只是用来对汇编过程进行某种控制。
• 89C51有8个伪指令:
• ORG • END • EQU • DATA • DB • DW
0000 0000 020030 0030 0030 7402 0032 120100 0035 80FE
8个机器周期16μS。则16μS×250×250=1S。
Delay: MOV R7,#0FAH;1
LOOP: MOV R6,#0FAH;1
LOOP1: NOP;
1
NOP
NOP
NOP
NOP
NOP
DJNZ R6,LOOP1 ;2
DJNZ R7,LOOP ;2
实际执行时间为: [(6+2)×250+2+1]×250+1=500751个机器周期,需1.001502秒。
﹕
AJMP LOOP0 AJMP LOOP1
﹕
AJMP LOOPn
20:23
单片机技术
三、循环程序
特点:部分程序段反复循环执行,关键是循环控制。
其结构包括四部分: 1、置循环初值 2、循环体(循环工作部分) 3、修改控制变量 4、循环控制部分
20:23
单片机技术
置初值
置初值
循环体
循环修改
未完
循环控制
20:23
单片机技术
§4.1.3 汇编语言程序的基本结构
一、顺序程序
特点:按照逻辑操作顺序,逐条顺序执行,直至最后一条指令
例1:双字节加法 START: MOV R0,#31H MOV R1,#34H MOV A, @R0 ADD A,@R1 MOV @R0, A INC R0 INC R1
MOV A , @R0 ADDC A , @R1 MOV @R0, A INC R0 MOV A,#00H ADDC A,#00H MOV @R0, A
┅ K=n-1
K=n
转向0分支 转向1分支 ┅ 转向n-1分支 转向n分支
20:23
单片机技术
JMP_128:MOV A,R3
RL A MOV DPTR,#JMPTAB
JMP @A+DPTR JMPTAB:AJMP ROUT00
AJMP ROUT01
┇
┇
128个子程序首址
AJMP ROUT7F
•说明:此程序要求128个转移目的地址(ROUT00 ~ ROUT7FH)必须驻留在与绝对转移指令AJMP相同的一个 2KB存储区内。
• 机器汇编是在计算机上使用交叉汇编程序进行源程序的汇编。 汇编工作由机器自动完成,最后得到以机器码表示的目标程 序。
20:23
单片机技术
三、反汇编
• 将二进制机器语言程序翻译成汇编语言程序的过程称反汇编。
汇编(汇编程序)
源程序 (汇编语言)
目标码 (机器语言)
反汇编(汇编程序)
图4-3 汇编和反汇编过程
• 分支程序又分为单分支和多分支结构。 • 在89C51指令系统中,通过条件判断实现单分支程序转移的
指令有:JZ、JNZ、CJNE、DJNZ等。此外还有以位状态 作为条件进行程序分支的指令,如JC、JNC、JB、JNB、 JBC等。使用这些指令可以完成0、1、正、负,以及相等、 不相等作为各种条件判断依据的程序转移。
MAIN:
ORG 0000H LJMP MAI ORG 0030H MOV A,#02 LCALL CH_TA SJMP $
• DS
• BIT
20:23
单片机技术
1.ORG 汇编起始命令
• 格式:ORG 16位地址 • 功能:规定该伪指令后面程序的汇编地址,即汇编后生成目
标程序存放的起始地址。
2.END 汇编结束指令
• 单个模块结构的程序功能单一,易于编写、调试和修改。 • 便于分工,从而可使多个程序员同时进行程序的编写和调试
工作,加快软件研制进度。 • 程序可读性好,便于功能扩充和版本升级。 • 对程序的修改可局部进行,其它部分可以保持不变。 • 对于使用频繁的子程序可以建立子程序库,便于多个模块调
•RL指令对变址部分乘以2,因为每条AJMP指令占两个字节。
20:23
单片机技术
例4:多分支结构,由40H单元中动态运行结果选择分支。 当分支数目超过128时
START:
TABEL: Addr16:
MOV DPTR,# Addr16 MOV A, 40H CLR C RLC A JNC TABEL INC DPH JMP @A+DPTR
SJMP STORE
BIG:
JC STORE
MOV A,TWO
STORE: MOV RES,A
SJMP $
单片机技术
• 例3: 多分支转移程序。 • 功能:根据入口条件转移到128个目的地址。 • 入口:(R3)=转移目的地址的序号00H~7FH。 • 出口:转移到相应子程序入口。
散转指令
K=0
K=1 ┅
用。
20:23
单片机技术
2、划分模块的原则
• 每个模块应具有独立的功能,能产生一个明确的结果,即 单模块的功能高内聚性。
• 模块之间的控制耦合应尽量简单,数据耦合应尽量少,即 模块间的低耦合性。控制耦合是指模块进入和退出的条件 及方式,数据耦合是指模块间的信息交换方式、交换量的 多少及交换频繁程度。
NEXT:
SJMP COMP INC A
INC R0
COMP:
SJMP LOOP MOV NUM,A
SJMP $
20:23
单片机技术
§4.2 汇编语言源程序的编辑和汇编
§4.2.1 源程序编辑
• 在微型计算机上,借助编辑软件,编写或修改汇编语言源 程序。如行编辑或屏幕编辑软件。
§4.2.2 源程序的汇编
20:23
单片机技术
例1:双字节求补
20:23
START:
ZER0: LOOP1:
MOV R0,#addr1 MOV R1,# addr2 MOV A, @R0 CPL A INC A MOV @R1, A INC R0 INC R1 JZ ZER0
MOV A, @R0
CPL A MOV @R1, A SJMP LOOP1 MOV A, @R0 CPL A INC A MOV @R1, A SJMP LOOP1
完
完
循环控制
未完
循环体
循环修改
do while
退出循环
(a)
(b)
循环组织方式流程图
20:23
单片机技术
退出循环
while
例1:设单片机晶振频率6M,编写一段程序,大约延时1秒钟。分析:
由于DJNZ指令最多的循环次数是256次,而1S÷256÷256 约等于
15μS,晶振频率6MHZ,则1个机器周期为2μS,我们把内循环定为
20:23
单片机技术
二、确定算法
• 算法是如何将实际问题转化成程序模块来处理。 • 在编程以前,先要对几种不同的算法进行分析、比较,找
出最适宜的算法
三、画程序流程图
• 程序流程图是使用各种图形、符号、有向线段等来说明程 序设计过程的一种直观的表示。
• 流程图步骤分得越细致,编写程序是也越方便。 • 画流程图是程序结构设计是采用的一种重要手段。 • 一个系统软件有总的流程图(主程序框图)和局部的流程
0033 80FE
SJMP $
0000
END
也可以规定数据表格存放的起始地址。
20:23
单片机技术
3.EQU 赋值命令
• 格式:字符名称 EQU 项(数或汇编符号)
• 功能:把“项”赋给“字符名称”。
• 注意:字符名称不等于标号(其后没有冒号);其中的项,可 以是数或汇编符号。EQU赋值过的符号名可以用作数据、代码 地址、位地址或一个立即数。可以是8位的,也可以是16位的。
• 汇编:将汇编语言源程序转换为机器码表示的目标程 序的过程。对单片机有: 手工汇编、机器汇编、反汇编
20:23
单片机技术
汇编语言 源程序
汇编
目标程序
一、手工汇编
汇编程序
• 通过手工方式查指令编码表,逐个把助记符指令“翻译”成 机器码,然后把得到的机器码程序键入单片机,进行调试和 运行。
二、机器汇编
• 例1:
• AA EQU R1
20:23
单片机技术
例3:统计字串长度。内存从STRING开始有一字串,该 字串以$(ASCII码为24H)结束,试统计该字串长度, 结果存于NUM单元中
解:
ORG 0800H
NUM DATA 20H
STRING DATA 21H
START: LOOP:
CLR A MOV R0,#STRING CJNE @R0,#24H,NEXT
单片机技术
20:23
例2:片内RAM ONE和TWO两个单元中存有两个无 符号数,将两个数中的小者存入RES单元。
解: ORG 1000H
ONE DATA 22H ;定义ONE
TWO DATA 23H ;定义TWO
RES DATA 30H ;定义RES
MOV A,ONE
START:
CJNE A,TWO,BIG
• 格式:END • 功能:通知汇编程序结束汇编。在END之后所有的汇
编指令均不予以处理。
20:23
单片机技术
例1: 地址 机器指令
源自文库
汇编源程序
0000
ORG 0000H
0000 020030
LJMP MAIN
0030
ORG 0030H
0030 E4 MAIN: CLR A
0031 F530
MOV 30H,A
第4章 汇编语言程序设计知识
§4.1 编程的步骤、方法和技巧
§4.1.1 编程的步骤
分析问题 确定算法 画程序流程图 编写程序
一、分析问题
• 对需要解决的问题进行分析,以求对问题由正确的理解。 • 解决问题的任务是什么? • 工作过程? • 现有的条件,已知数据,对运算的精度和速度方面的要求? • 设计的硬件结构是否方便编程?
解:
ORG 1000H START:MOV A,R0
CPL A ADD A,#01H MOV R2,A MOV A,R1 CPL A ADDC A,#00H MOV R3,A SJMP $
单片机技术
二、分支程序
特点:程序分为多路,根据条件选择执行的路径
• 程序分支是通过条件转移指令实现的,即根据条件对程序的 执行进行判断、满足条件则进行程序转移,不满足条件就顺 序执行程序。
图。 • 流程图常采用的图形和符号。
20:23
单片机技术
椭圆框 矩形框 菱形框
圆圈 指向线
20:23
或桶形框
:表示程序的开始或结束。
:表示要进行的工作。
:表示要判断的事情,菱形框内 的表达式表示要判断的内容。
:表示连接点 :表示程序的流向
单片机技术
§4.1.2 编程的方法和技巧
一、模块化的程序设计方法
练习: 1.将片外RAM 2000H单 元开始的20个字节,传送 到片内RAM 30H单元开 始的单元中去。 2.将片内RAM 20H单元 开始的10个字节,传送到 片内RAM 30H单元开始 的单元中去。
3. 将片 内RAM BK1单元 开 始 的 COUNT 个 字 节 , 传送到片外RAM BK2单 元开始的单元中去。
20:23
单片机技术
例2 :拆字。将片内RAM 20H单元的内容拆成两段,每 段四位。并将它们分别存入21H与22H单元中。
解: START:
ORG 2000H
MOV R0,#21H ;21H→R0
MOV A,20H
;(20H)→A
ANL A,#0FH ;A∧#0FH→A
MOV @R0,A ;(A)→(R0)
• 模块长度适中。20条~100条的范围较合适。
20:23
单片机技术
二、编程技巧
1、尽量采用循环结构和子程序。 2、尽量少用无条件转移指令。 3、对于通用的子程序,考虑到其通用性,除了用于存放子程序
入口参数的寄存器外,子程序中用到的其他寄存器的内容应 压入堆栈(返回前再弹出),即保护现场。 4、在中断处理程序中,除了要保护处理程序中用到的寄存器外, 还要保护标志寄存器。 5、用累加器传递入口参数或返回参数比较方便,在子程序中, 一般不必把累加器内容压入堆栈。
INC R0
;(R0)+1 →R0
MOV A,20H ;(20H)→A
SWAP A,
;A0~3 ← →A4~7
ANL A,#0FH ;A∧#0FH→A
MOV @R0,A ;(A)→(R0)
SJMP $
20:23
单片机技术
20:23
例3:16位数求补。设16位二进制数在 R1R0中,求补结果存于R3R2中。
20:23
单片机技术
例2:数据块传送。将片内RAM 20H单元开始的10个字 节,传送到片外RAM 1000H单元开始的单元中去。
解:
ORG 0800H START:MOV R0,#20H
MOV DPTR,#1000H MOV R7,#0AH LOOP: MOV A,@R0 MOVX @DPTR,A INC R0 INC DPTR DJNZ R7,LOOP SJMP $
20:23
单片机技术
§4.2.3 伪指令
• 伪指令不是真正的指令,无对应的机器码,在汇编时不产生 目标程序,只是用来对汇编过程进行某种控制。
• 89C51有8个伪指令:
• ORG • END • EQU • DATA • DB • DW
0000 0000 020030 0030 0030 7402 0032 120100 0035 80FE
8个机器周期16μS。则16μS×250×250=1S。
Delay: MOV R7,#0FAH;1
LOOP: MOV R6,#0FAH;1
LOOP1: NOP;
1
NOP
NOP
NOP
NOP
NOP
DJNZ R6,LOOP1 ;2
DJNZ R7,LOOP ;2
实际执行时间为: [(6+2)×250+2+1]×250+1=500751个机器周期,需1.001502秒。
﹕
AJMP LOOP0 AJMP LOOP1
﹕
AJMP LOOPn
20:23
单片机技术
三、循环程序
特点:部分程序段反复循环执行,关键是循环控制。
其结构包括四部分: 1、置循环初值 2、循环体(循环工作部分) 3、修改控制变量 4、循环控制部分
20:23
单片机技术
置初值
置初值
循环体
循环修改
未完
循环控制
20:23
单片机技术
§4.1.3 汇编语言程序的基本结构
一、顺序程序
特点:按照逻辑操作顺序,逐条顺序执行,直至最后一条指令
例1:双字节加法 START: MOV R0,#31H MOV R1,#34H MOV A, @R0 ADD A,@R1 MOV @R0, A INC R0 INC R1
MOV A , @R0 ADDC A , @R1 MOV @R0, A INC R0 MOV A,#00H ADDC A,#00H MOV @R0, A
┅ K=n-1
K=n
转向0分支 转向1分支 ┅ 转向n-1分支 转向n分支
20:23
单片机技术
JMP_128:MOV A,R3
RL A MOV DPTR,#JMPTAB
JMP @A+DPTR JMPTAB:AJMP ROUT00
AJMP ROUT01
┇
┇
128个子程序首址
AJMP ROUT7F
•说明:此程序要求128个转移目的地址(ROUT00 ~ ROUT7FH)必须驻留在与绝对转移指令AJMP相同的一个 2KB存储区内。
• 机器汇编是在计算机上使用交叉汇编程序进行源程序的汇编。 汇编工作由机器自动完成,最后得到以机器码表示的目标程 序。
20:23
单片机技术
三、反汇编
• 将二进制机器语言程序翻译成汇编语言程序的过程称反汇编。
汇编(汇编程序)
源程序 (汇编语言)
目标码 (机器语言)
反汇编(汇编程序)
图4-3 汇编和反汇编过程
• 分支程序又分为单分支和多分支结构。 • 在89C51指令系统中,通过条件判断实现单分支程序转移的
指令有:JZ、JNZ、CJNE、DJNZ等。此外还有以位状态 作为条件进行程序分支的指令,如JC、JNC、JB、JNB、 JBC等。使用这些指令可以完成0、1、正、负,以及相等、 不相等作为各种条件判断依据的程序转移。
MAIN:
ORG 0000H LJMP MAI ORG 0030H MOV A,#02 LCALL CH_TA SJMP $
• DS
• BIT
20:23
单片机技术
1.ORG 汇编起始命令
• 格式:ORG 16位地址 • 功能:规定该伪指令后面程序的汇编地址,即汇编后生成目
标程序存放的起始地址。
2.END 汇编结束指令