单片微型计算机原理及接口技术(杨光友版)课件ch4_第1页
单片微型计算机原理及接口技术(杨光友版)课件ch4_第2页
单片微型计算机原理及接口技术(杨光友版)课件ch4_第3页
单片微型计算机原理及接口技术(杨光友版)课件ch4_第4页
单片微型计算机原理及接口技术(杨光友版)课件ch4_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第四章第四章 汇编语言程序设计汇编语言程序设计 4-1 4-1 汇编程序基本概念汇编程序基本概念4-1-1 4-1-1 程序设计语言程序设计语言 用于编制计算机程序的语言称为用于编制计算机程序的语言称为程序设计语言程序设计语言。按。按照语言的结构及其功能可以分为三种:机器语言、汇编照语言的结构及其功能可以分为三种:机器语言、汇编语言、高级语言。语言、高级语言。一、机器语言一、机器语言 用二进制代码用二进制代码0和和1表示指令和数据的最原始的程序表示指令和数据的最原始的程序设计语言。其直接取决于计算机的结构,响应速度最快,设计语言。其直接取决于计算机的结构,响应速度最快,但程序繁琐、难认、难记。

2、但程序繁琐、难认、难记。1)汇编语言指令与机器语言指令相对应,有效地利用存储空间。)汇编语言指令与机器语言指令相对应,有效地利用存储空间。2)指令直接访问)指令直接访问CPU的寄存器、存储单元和的寄存器、存储单元和I/O端口,可以充分端口,可以充分发挥发挥CPU的功能,满足实时控制的要求。的功能,满足实时控制的要求。3)是面向机器的语言,使用者必须对机器的硬件结构、指令系)是面向机器的语言,使用者必须对机器的硬件结构、指令系统都要熟悉。汇编语言程序的通用性差,程序移植起来不方便。统都要熟悉。汇编语言程序的通用性差,程序移植起来不方便。二、汇编语言二、汇编语言用汇编语言编写的、完成特定功能的指令

3、序列。用汇编语言编写的、完成特定功能的指令序列。特点有:特点有:汇编汇编 汇编语言程序到机器语言程序的转换过程称为汇编语言程序到机器语言程序的转换过程称为汇编汇编。1.手工汇编手工汇编:人工查指令表汇编。用于设计短小程序:人工查指令表汇编。用于设计短小程序或调试程序的场合。或调试程序的场合。2.机器汇编机器汇编:用汇编程序进行汇编。:用汇编程序进行汇编。三、高级语言三、高级语言 高级语言是以接近于人的自然语言,面向过程而独高级语言是以接近于人的自然语言,面向过程而独立于机器的通用语言。必须经编译程序或解释程序进行立于机器的通用语言。必须经编译程序或解释程序进行翻译生成目标程序,机器才能执行。翻

4、译生成目标程序,机器才能执行。 特点:特点:简单、易学、通用性好,便于移植。但是,简单、易学、通用性好,便于移植。但是,其目标程序占存储单元多,执行时间长;在其目标程序占存储单元多,执行时间长;在MCS-51系系列单片机开发应用中,单片机的列单片机开发应用中,单片机的C语言语言C51正得到越来正得到越来越广泛的应用。越广泛的应用。4-1-2 4-1-2 汇编语言的语句结构汇编语言的语句结构二、汇编语言的语句格式二、汇编语言的语句格式汇编语言一般由四部分组成。格式如下:汇编语言一般由四部分组成。格式如下: 标号:标号: 操作码操作码 操作数操作数 ; 注释注释 START: MOV A, 30H

5、 ;A(30H) 各部分之间须用分隔符,即在标号之后要加冒号各部分之间须用分隔符,即在标号之后要加冒号“:”;在操;在操作作码与操作数之间用空格间隔;在操作数内部用逗号码与操作数之间用空格间隔;在操作数内部用逗号“,”将源操将源操作作数和目的操作数隔开;注释段用分号(;)隔开。数和目的操作数隔开;注释段用分号(;)隔开。 一一. 汇编语言指令类型汇编语言指令类型1.1.机器指令机器指令: 指令系统中的全部指令,每条指令有对应的机器代码。指令系统中的全部指令,每条指令有对应的机器代码。2 2. 伪指令伪指令: 汇编控制指令,仅提供汇编信息,没有指令代码。汇编控制指令,仅提供汇编信息,没有指令代码

6、。 4-1-3 4-1-3 伪指令伪指令 常用伪指令及其功能:常用伪指令及其功能:1. 1. ORGORG起始地址指令:指明程序和数据块起始地址。起始地址指令:指明程序和数据块起始地址。指令地址指令地址 机器码机器码源程序源程序ORGORG 2000H 2000H 2000H 78 30 2000H 78 30 MAIN MAIN:MOV R0MOV R0,#30H#30H 2002H E6 2002H E6MOV AMOV A,R0R0 ORG 3000HORG 3000H 3000H 23 3000H 23DB 23HDB 23H,100100,A A 3001H 64 3001H 64

7、3002H 3002H4141 2 2 . . D B D B 定 义 字 节 型 常 数 指 令 。定 义 字 节 型 常 数 指 令 。例:例: DB 12HDB 12H,100100,AA 4.4. EQU EQU 赋值。为标号或标识符赋值。赋值。为标号或标识符赋值。 X1 X1 EQU 2000HEQU 2000H X2 EQU 0FHX2 EQU 0FH MAIN:MAIN:MOV DPTRMOV DPTR,#X1#X1 ADD AADD A,#X2#X2 5.5. BITBIT 位定义。位定义。 例:例:FLAG BIT 30H FLAG BIT 30H 3. 3. DW DW 定

8、义字型常数指令。定义字型常数指令。例:例: DW 1234HDW 1234H,5678H5678H 6.6. ENDEND 结束汇编指令。结束汇编指令。 DS:定义存储区从指定单元开始,保留一定数量存储单元ORG 0500HDS 84-2 4-2 汇编语言程序设计汇编语言程序设计一一. .分析问题,建立数学模型分析问题,建立数学模型二二. .确定算法确定算法三三. .画程序流程图画程序流程图 四四. .分配内存单元分配内存单元 五五. .编制源程序编制源程序 六六. .调试程序调试程序开始开始1 YN? 常用程序结构常用程序结构 顺序程序、分支程序、循环程序、子程序顺序程序、分支程序、循环程序

9、、子程序4-2-2 4-2-2 顺序程序顺序程序 顺序程序又称简单程序,程序走向只有一条路径。顺序程序又称简单程序,程序走向只有一条路径。例例1 1:双字节求补程序双字节求补程序( (设数据在设数据在R4R5R4R5中中) ):MOVMOV A A,R5R5;取低字节取低字节CPLCPL A AADDADD A A,#01H#01H;低字节变补低字节变补MOVMOV R5 R5,A AMOVMOV A A,R4R4;取高字节取高字节CPLCPL A AADDC AADDC A,#00H#00H;高字节变补高字节变补MOVMOV R4 R4,A A例例2 2:将将30H单元内的两位单元内的两位B

10、CD码拆开并转换成码拆开并转换成ASCII码,存入码,存入RAM两个单元中。两个单元中。ORG 2000HMOV A ,30H ;取值取值ANL A,#0FH ;取低四位取低四位ADDA,#30H, ;转换成转换成ASCII码码MOV 32H ,A ;保存结果保存结果MOV A ,30H ;取值取值SWAP A ;高高4位与低四位互换位与低四位互换ANLA,#0FH ;取低四位(原高取低四位(原高4位)位)ADD A,#30H, ; 转换成转换成ASCII码码MOV 31H ,A ;保存结果保存结果 SJMP $ END 结束取数据低4位转换成ASCII码存ASCII码取数据高4位转换成ASC

11、II码存ASCII码开始4-2-34-2-3 分支程序分支程序由条件转移指令构成程序判断框部分,形成程序分支结构。由条件转移指令构成程序判断框部分,形成程序分支结构。单重分支程序单重分支程序一个判断决策框,程序有两条出路。一个判断决策框,程序有两条出路。两种分支结构:两种分支结构:条件满足?N影响条件Y处理段条件满足?N影响条件Y处理1处理2例例1 1: 求求R2R2中补码绝对值,正数中补码绝对值,正数 不变,负数变补。不变,负数变补。 ORG 1000H ORG 1000H MOV A MOV A,R2R2 JNB ACC.7 JNB ACC.7,NEXTNEXT;为正数?为正数? CPL

12、A CPL A ;负数变补负数变补 INC AINC A MOV R2 MOV R2,A ANEXTNEXT:END END ;结束结束 多重分支程序多重分支程序一多次使用条件转移指令,形成两个以上判断框。一多次使用条件转移指令,形成两个以上判断框。例例2 2: 求符号函数求符号函数Y=SGN(X)Y=SGN(X) +1 +1 当当 X0X0SGN(X)= 0 SGN(X)= 0 当当 X=0X=0 -1 -1 当当 X0X0X0?Y取XNY= 0Y= + 1开始Y=1X0?NY保存Y结束ORG 0100HSYMB: MOV A,40H ;取取X JZ STOR ;X=0,Y=X JB ACC

13、7,MINUS;X0 MOV A,# 1 ;X0,Y=+1 SJMP STORMINUS:MOV A,#FFH;X0,Y= -1STOR: MOV 41H,A ;保存保存Y RET二按分支号转移二按分支号转移如:分支号如:分支号=0,程序转移到,程序转移到ADDR0处;当分支号处;当分支号=1,程序转移到程序转移到ADDR1处;处; 。(1)用地址表法。用地址表法。例例3:设分支号已存入设分支号已存入A。MTJS:MOV DPTR,#1000HB ;取表首地址取表首地址 CLR C ;分支号分支号2 RLC A MOV R2,A MOVC A,A+DPTR;取分支地址低位取分支地址低位 PUS

14、H ACC ;入栈保存入栈保存 MOV A,R2 INC A MOVC A,A+DPTR;取分支地址高位取分支地址高位 PUSH ACC ;入栈保存入栈保存 RET ;分支地址分支地址PC,转移转移1000H: DW ADDR0 ;分支地址表分支地址表 DW ADDR1 ADDR0: ;程序段程序段0 A = ?0处理一处理二处理1n(2)转移表法。转移表法。用分支转移指令用分支转移指令 JMP A+DPTRJMP A+DPTR。例例4: 根据根据R0的值转向的值转向6个分支程序。个分支程序。 R010,转向转向SUB0; R020,转向转向SUB1; R060,转向转向SUB5;K=?转SU

15、B0转SUB1转SUB5K=0 K=1 K=5开始 ORG2000H MOV DPTR,#TAB;转移指令表首地址转移指令表首地址 MOV A, R0 ;取数取数 MOV B, #10 DIV AB ;A除除10,商在,商在A中中 CLR C RLC A ;A2A JMP A+DPTR ;PC A+DPTRTAB: AJMP SUB0 ;转移指令表转移指令表 AJMP SUB1 AJMP SUB2 AJMP SUB54-2-44-2-4 循环程序循环程序包含多次重复执行的程序段,循环结构使程序紧凑。包含多次重复执行的程序段,循环结构使程序紧凑。循环程序的构成循环程序的构成循环控制 ?循环工作循

16、环结束循环初始化YN一初始化部分一初始化部分循环准备工作。如:清结果单元、循环准备工作。如:清结果单元、设指针、设循环控制变量初值等。设指针、设循环控制变量初值等。二循环体二循环体需多次重复处理的程序段。需多次重复处理的程序段。三三. .循环控制部分循环控制部分1.1.修改指针和循环控制变量。修改指针和循环控制变量。2.2.检测循环条件:满足循环条件,继续循环,否则退出循环。检测循环条件:满足循环条件,继续循环,否则退出循环。四四. .结束部分结束部分 处理和保存循环结果。处理和保存循环结果。循环程序按结构形式,分为循环程序按结构形式,分为单重循环单重循环与与多重循环多重循环。 单重循环单重循

17、环简单循环结构:循环体中不套循环。简单循环结构:循环体中不套循环。例例1 1:求求n n个单字节数据的累加,设数据串已在个单字节数据的累加,设数据串已在4343H H起始单元,起始单元,数据串长度在数据串长度在4242H H单元,累加和不超过单元,累加和不超过2 2个字节。个字节。SUMSUM: MOVMOVR0R0,#42H#42H;设指针设指针MOVMOVA A,R0R0MOVMOVR2R2,A A ;循环计数器循环计数器n nCLRCLRA A ;结果单元清结果单元清0 0MOVMOVR3R3,A AADD1ADD1:INCINCR0R0 ;修改指针修改指针ADDADDA A,R0 R0

18、 ;累加累加JNC NEXTJNC NEXT ;处理进位处理进位INCINCR3R3 ;有进位,高字节加有进位,高字节加1 1NEXT:NEXT: DJNZ DJNZ R2,ADD1 R2,ADD1 ;循环控制:数据是否加完?循环控制:数据是否加完?MOVMOV40H40H,A A ;循环结束,保存结果循环结束,保存结果MOVMOV41H41H,R3R3RETRET循环控制方法:计数控制、特征标志控制。循环控制方法:计数控制、特征标志控制。一一. .计数控制:计数控制:设循环计数器,控制循环次数。正计数和倒计数两种方式。设循环计数器,控制循环次数。正计数和倒计数两种方式。例例2 2:为一串为一

19、串7 7位位ASCIIASCII码数据的码数据的D D7 7位加上奇校验,设数据存位加上奇校验,设数据存放在片外放在片外RAMRAM的的21012101H H起始单元,数据长度在起始单元,数据长度在21002100H H单元。单元。片外RAM2102H011010002101H001011012100HnMOV DPTRMOV DPTR,#2100H#2100HMOVX AMOVX A,DPTRDPTRMOV R2MOV R2,A ANEXTNEXT:INC DPTRINC DPTRMOVX AMOVX A,DPTRDPTRORL AORL A,#80H#80HJNB PJNB P,PASSP

20、ASSMOVX DPTRMOVX DPTR,A APASSPASS:DJNZ R2DJNZ R2,NEXTNEXTDONEDONE:SJMP DONESJMP DONE二二. .特征控制:特征控制:设定循环结束标志实现循环控制。设定循环结束标志实现循环控制。例例3 3:找正数表最小值。正数表存在片外找正数表最小值。正数表存在片外RAMRAM中以中以LISTLIST为为起始单元,用起始单元,用-1-1作为结束标志。作为结束标志。STARTSTART:MOVMOVDPTRDPTR,#LIST#LIST ;数表首地址数表首地址 MOVMOVB B,#127#127 ;预置最小值预置最小值NEXTNE

21、XT: MOVX A MOVX A,DPTRDPTR ;取数取数 INCINCDPTRDPTR ;修改指针修改指针 CJNE ACJNE A,#-1#-1,NEXT1NEXT1;是否为数表结尾?是否为数表结尾? SJMP DONESJMP DONE ;循环结束循环结束NEXT1NEXT1:CJNE ACJNE A,B B,NEXT2NEXT2 ;比较比较NEXT2NEXT2:JNCJNCNEXTNEXT MOV MOVB B,A A ;保存较小值保存较小值 SJMP NEXTSJMP NEXTDONEDONE: SJMP DONE SJMP DONE习题:习题:统计一班考试为统计一班考试为10

22、0100分和不及格人数,成绩在分和不及格人数,成绩在4141H H起始单元。起始单元。多重循环多重循环循环体中套循环结构。以双重循环使用较多。循环体中套循环结构。以双重循环使用较多。例例4 4:将内存一串单字节无符号数升序排序。将内存一串单字节无符号数升序排序。步骤:步骤:每次取相邻单元的两个数比较,决定是否需要交换数据位置。每次取相邻单元的两个数比较,决定是否需要交换数据位置。第一次循环,比较第一次循环,比较N-1N-1次,取到数据表中最大值。次,取到数据表中最大值。第二次循环,比较第二次循环,比较N-2N-2次,取到次大值。次,取到次大值。 第第N-1N-1次循环:比较一次,排序结束。次循

23、环:比较一次,排序结束。片内RAMMAX5241TAB3内循环控制内循环控制 ?循环工作循环工作循环结束循环结束外循环控制外循环控制 ?内循环初始化内循环初始化开始开始外循环初始化外循环初始化SORTSORT: MOV MOV A A,#N-1#N-1;N N个数据排序个数据排序 MOVMOV R4 R4,A A;外循外循环次数环次数LOOP1LOOP1: MOV MOV A A,R4R4 MOV MOV R3 R3,A A;内循内循环次数环次数 MOVMOV R0 R0,#TAB#TAB;设数据指针设数据指针LOOP2LOOP2: MOV MOV A A,R0R0;取二数取二数 MOVMOV

24、 B B,A A INC INC R0 R0 MOV MOV A A,R0R0 CJNE A CJNE A,B B,L1L1;比较比较L1L1: JNC JNC UNEX UNEX;ABAB,不交换不交换 DECDEC R0 R0;否则交换数据否则交换数据 XCHXCH A A ,R0R0 INC INC R0 R0 MOV MOV R0 R0,A AUNEXUNEX: DJNZ R3 DJNZ R3,LOOP2LOOP2;内循环结束?内循环结束? DJNZ R4DJNZ R4,LOOP1LOOP1;外循环结束?外循环结束? RETRETR3R31=0 ?B (R0) A ( R0 + 1 )

25、循环结束循环结束外循环次数外循环次数R4R4R41=0 ?内循环次数内循环次数R3表首表首TABR0开始开始A BA B?( (R0)(R0+1)R0)(R0+1)R0 R0+1R0 R0+1Y YN N软件延时程序软件延时程序用循环程序将指令重复多次执行,实现软件延时。用循环程序将指令重复多次执行,实现软件延时。试计算延时程序的执行时间。试计算延时程序的执行时间。源程序源程序指令周期指令周期( (M) M) 指令执行次数指令执行次数习题:习题:DELAYDELAY:MOV R6MOV R6,#100#1001 1D1D1: MOV R7 MOV R7,#10#101 1D2D2: NOP N

26、OP1 1 DJNZ R7DJNZ R7,D2D22 2 DJNZ R6 DJNZ R6,D1D12 2 RET RET2 2计算延时程序的执行时间计算延时程序的执行时间( (设时钟设时钟f=6MHz,M=1s)f=6MHz,M=1s)。DELAYDELAY:MOV R6MOV R6,#64H#64H1 1I1I1: MOV R7 MOV R7,#0FFH#0FFH1 1I2I2: DJNZ R7 DJNZ R7,I2I22 2 DJNZ R6 DJNZ R6,I1I12 2 RET RET2 2延时时间计算:(设时钟延时时间计算:(设时钟f=12MHzf=12MHz)t=(1t=(11+11

27、+1100+2100+2100100255+2255+2100+2100+21)1)M=51.3 M=51.3 msms1 11001001001002552551001001 14-2-5 4-2-5 子程序子程序子程序:子程序:能完成某项特定功能的独立程序段,可被反复调用。能完成某项特定功能的独立程序段,可被反复调用。调用子程序:调用子程序:就是暂时中断主程序的执行,而转到子程序的入就是暂时中断主程序的执行,而转到子程序的入口地址去执行子程序。子程序执行完毕,自动返回主程序,主口地址去执行子程序。子程序执行完毕,自动返回主程序,主程序再继续往下执行。程序再继续往下执行。子程序设计子程序设计

28、一子程序入口用标号作为子程序名。一子程序入口用标号作为子程序名。二调用子程序之前设置好堆栈。二调用子程序之前设置好堆栈。三用返回指令三用返回指令RETRET结束子程序,并保结束子程序,并保 证堆栈栈顶为调用程序的返回地址。证堆栈栈顶为调用程序的返回地址。四四. .子程序嵌套须考虑堆栈容量。子程序嵌套须考虑堆栈容量。五五. .提供足够的调用信息提供足够的调用信息: :如:子程序名、子程序功能、入口如:子程序名、子程序功能、入口参数和出口参数、子程序占用的硬参数和出口参数、子程序占用的硬件资源、子程序中调用的其他子程件资源、子程序中调用的其他子程序名。序名。主程序CALL SCALL S子程序SR

29、ET子程序的类型子程序的类型按子程序与主程序之间传递参数的方式分类。按子程序与主程序之间传递参数的方式分类。入口参数:入口参数:调用子程序之前,需要传给子程序的参数。调用子程序之前,需要传给子程序的参数。出口参数:出口参数:子程序送回调用程序的结果参数。子程序送回调用程序的结果参数。选用不同的参数传递方式。选用不同的参数传递方式。 1.1.寄存器传送参数寄存器传送参数2.2.存储器传送参数存储器传送参数3.3.堆栈传送参数堆栈传送参数设计子程序应满足通用性的要求,不针对具体数据编程。设计子程序应满足通用性的要求,不针对具体数据编程。如:如:1.1.子程序功能为求单字节数的立方:子程序功能为求单

30、字节数的立方: A A A A3 3,入口参数和出口参数为入口参数和出口参数为A A。 2.2.子程序功能为求单字节数的子程序功能为求单字节数的n n次方:次方:(41(41H)(42H)H)(42H) (40H)(40H)A A,入口参数为入口参数为(40(40H)H)和和A A,出口参数为出口参数为(42(42H)(41H)H)(41H)。例例1 1:将将R4R5R6R4R5R6中三个字节数据对半分解,变成中三个字节数据对半分解,变成6 6个字节,个字节, 存入显示缓冲区存入显示缓冲区( (DISMEM0DISMEM0DISMEM5)DISMEM5)。1 1)子程序)子程序UFOR1UFOR1的功能:将的功能:将A A累加器累加器中单字节数据,对半分解成两个字中单字节数据,对半分解成两个字节,存入节,存入R0R0所指向的相邻两个单元所指向的相邻两个单元UFOR1UFOR1:MOV R0MOV R0,#0#0 XCHD A XCHD A,R0R0 ;保存低保存低半字节半字节 INC R0INC R0 ;修改指针修改指针 MOV R0MOV R0,#0#0 SWAP A SWAP A XCHD A XCHD A,R0R0 ;保存高保存高半字节半字节 RET

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论