单片微机原理及应用课件第4章汇编语言程序设计.ppt_第1页
单片微机原理及应用课件第4章汇编语言程序设计.ppt_第2页
单片微机原理及应用课件第4章汇编语言程序设计.ppt_第3页
单片微机原理及应用课件第4章汇编语言程序设计.ppt_第4页
单片微机原理及应用课件第4章汇编语言程序设计.ppt_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

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

文档简介

第4章 汇编语言程序设计,4.1 汇编语言基本概念 4.2 汇编语言程序设计,4.1 汇编语言基本概念,4.1.1 程序设计语言 4.1.2 汇编语言的语句结构 4.1.3 伪指令,返回本章首页,4.1.1 程序设计语言,按照语言的结构及其功能可以分为三种: 1机器语言:机器语言是用二进制代码0和1表示指令和数据的最原始的程序设计语言。 2汇编语言:在汇编语言中,指令用助记符表示,地址、操作数可用标号、符号地址及字符等形式来描述。 3高级语言:高级语言是接近于人的自然语言,面向过程而独立于机器的通用语言。,返回本节,汇编语言源程序:用汇编语言编写的程序称为汇编语言源程序,简称源程序。计算机不能直接识别和执行源程序。 汇编(过程):将汇编语言源程序翻译成机器码目标程序的过程,称为汇编过程,或简称为汇编。 汇编程序:它是计算机的系统软件之一,用于将汇编语言源程序翻译成目标程序。,4.1.2 汇编语言的语句结构,1汇编语言的指令类型 MCS-51单片机汇编语言,包含两类不同性质的指令。 (1)基本指令:即指令系统中的指令。它们都是机器能够执行的指令,每一条指令都有对应的机器码。 (2)伪指令:汇编时用于控制汇编的指令。它们都是机器不执行的指令,无机器码。,汇编语言及汇编过程,汇编程序功能,源程序 (汇编指令程序),目标程序 (机器码指令程序),汇编指令与机器码指令有一一对应的关系。 汇编程序是一种翻译程序,将源程序翻译成目标序。,汇编程序的汇编过程 汇编有两种方法:手工汇编、机器汇编。,1、手工汇编: 第一次汇编:确定地址,翻译成各条机器码,字符标号原样写出; 第二次汇编:标号代真,将字符标号用所计算出的具体地址值或偏移量代换。,源程序,目标程序,地址,ORG 1000H START:MOV R0,2FH MOV R2,#00H MOV A,R0 MOV R3,A INC R3 SJMP NEXT LOOP:INC R0 CJNE R0,#44H,NEXT INC R2 NEXT:DJNZ R3,LOOP MOV 2AH,R2 SJMP $ END,第一次汇编,第二次汇编,1000 A82F 1002 7A00 1004 E6 1005 FB 1006 0B 1007 80NEXT 1009 08 100A B644NEXT 100D 0A 100E DBLOOP 1010 8A2A 1012 80FE,A82F 7A00 E6 FB 0B 8005 08 B64401 0A DBF9 8A2A 80FE,两次扫描过程。 第一次扫描:检查语法错误,确定符号名字; 建立使用的全部符号名字表; 每一符号名字后跟一对应值(地址或 数)。 第二次扫描:是在第一次扫描基础上,将符号地址转 换成地址(代真); 利用操作码表将助记符转换成相应的目 标码。,2、机器汇编,2汇编语言的语句格式 汇编语言源程序是由汇编语句(即指令) 组成的。汇编语言一般由四部分组成。 其典型的汇编语句格式如下: 标号: 操作码 操作数 ;注释 START: MOV A,30H ;A(30H) 各段之间必须用定界符隔开。,返回本节,1、标号段 标号是用户给指令语句设定的一个符号,在汇编产生目标程序时,汇编程序将把标号所指的指令语句目标码首地址值赋给该标号。于是,标号便可作为地址或数据在其它语句的操作数段中引用。 标号是以字母开头的18个字母或数字串组成,注意,不能使用指令助记符、伪指令或寄存器名来作标号,标号不能重复定义。,2、操作码段 操作码指出指令操作的性质或控制要求。该段可以是指令助记符或伪指令助记符。 3、操作数段 操作数是指令操作码操作的对象,它是参加操作的数或是操作数据所在的地址。 操作数有三种类型的信息: 立即数、寄存器和地址。,信息表示方法: 二进制(B) 十六进制(H) 十进制(D或无字尾) PC现行值($) ASCII码( ) 指令标号等。 为区分数字和字符,凡数字以09开头。 如:MOV A,#0A4H 4、注释段 为了便于阅读和交流,对程序进行注释。汇编时对注释部分不予理会。,4.1.3 伪指令,1ORG:汇编起始地址 用来说明程序段或数据存储区的起始地址。 格式为: ORG 十六位地址 例如程序: ORG 1000H START: MOV A,#20H MOV B,#30H 说明程序从1000H开始存放。在一个源程序中,可以多次使用ORG指令。但不能重叠。,2EQU:赋值(或等值指令),给变量标号赋予一个确定的数值。其值在整个程序中不改变,且可多次使用。 格式为:标号(字符名称) EQU 数或汇编符号 例如,COUNT EQU 16H ; COUNT=16H ADDR EQU 3000H ; ADDR=3000H MOV A,COUNT ;A=16H COUNT赋值后,当作直接地址使用。 ADDR被定义为十六位地址。 注意:必须先赋值,后使用。,返回本节,3DB:定义字节数据(Define Byte),把数据以字节数的形式存放在存储器单元中。常用于定义数据常数表。 格式如下: 标号: DB 字节常数表 例如, ORG 2000H TAB: DB 14H,26,A DB 0AFH,BC 汇编结果:(2000H)=14H (2001H)=1AH =26 (2002H)=41H (2003H)=AFH (2004H)=42H (2005H)=43H,4DW:定义字数据 (Define Word),按字的形式把数据存放在存储单元中。其中高字节数存入低位地址。 格式如下: 标号: DB 字常数表 例如, ORG 2000H TAB: DW 7423H, 00ABH, 20 汇编结果:(2000H)=74H (2001H)=23H (2002H)=00H (2003H)=ABH (2004H)=00H (2005H)=14H,5DS:定义存储区(Define Store),从指定的地址单元开始,保留一定数量存储单元。 格式如下: 标号: DS 表达式 其中,表达式一般是数值,即要保留的内存单元数。 例如, ORG 1000H DS 5 DB 23H 汇编结果:从地址1000H开始,保留5个字节的内存单元, 而(1005H )=23H。,6BIT:位定义,把位地址赋给确定的字符名称。常用于定义位符号地址。 格式如下: 字符名称 BIT 位地址 例如, AA BIT P1.0 BB BIT P2.0 汇编后,把位地址P1.0、 P2.0分别赋给变量AA和BB,在程序中它们就是位地址了。,7. DATA 数据地址赋值指令,将数据地址或代码赋给所规定的标号。 格式如下: 标号: DATA 表达式 例如,MN: DATA 1000H 汇编后, MN的值为1000H。 DATA与EQU的主要区别在于:用DATA定义的标识符在汇编时作为标号登记在符号表中,所以可先使用后定义。而EQU定义的标识符在汇编时不登记在符号表中,因此必须先定义后使用。,8END:汇编结束 源程序结束指令。在END以后所写的指令,汇编程序都不予处理。一个源程序只能有一个END指令,放在程序结尾。,4.2 汇编语言程序设计,4.2.1 汇编语方程序设计步骤 4.2.2 顺序程序 4.2.3 分支程序 4.2.4 循环程序 4.2.5 子程序 4.2.6 位操作程序,返回本章首页,4.2.1 汇编语言程序设计步骤,1分析问题 2确定算法 3设计程序流程图 4分配内存单元 5编写汇编语言源程序 6调试程序,返回本节,流程图符号,端点框 ;表示程序的起点和终点。 处理框 ;表示处理功能。 判断框 ;表示判断功能,框内标 明检测条件。 子程序框 ;表示被调用的子程序。 流程线 ;表示程序的走向。,4.2.2 顺序程序,顺序程序是一种最简单,最基本的程序。 特点:程序按编写的顺序依次往下执行每一条指令,直到最后一条。 【例4.1】 将30H单元内的两位BCD码拆开并转换成ASCII码,存入RAM两个单元中。程序流程如图4-1所示。参考程序如下:p71,图4-1 拆字程序流程图,ORG 2000H MOV A,30H ;取值 ANL A,#0FH ;取低4位 ADD A,#30H ;转换成ASCII码 MOV 32H,A ;保存结果 MOV A,30H ;取值 SWAP A ;高4位与低4位互换 ANL A,#0FH ;取低4位(原来的高4位) ADD A,#30H ;转换成ASCII码 MOV 31H,A ;保存结果 SJMP $ END,4.2.3 分支程序,1分支程序的基本形式 分支程序有三种基本形式,如图4-3所示。 分支程序的设计要点如下: (1)先建立可供条件转移指令测试的条件。 (2)选用合适的条件转移指令。 (3)在转移的目的地址处设定标号。,图4-3 分支程序结构流程图,2双向分支程序设计举例 【例4.2】 设X存在30H单元中,根据下式 X+2 X0 Y = 100 X=0 求出Y值,将Y值存入31H单元。 X X0 解:根据数据的符号位判别该数的正负,若最高位为0,再判别该数是否为0。程序流程如图所示。 参考程序如下:,图程序流程图,Y,ORG 1000H MOV A,30H ;取数 JB ACC.7,NEG ;负数,转NEG JZ ZER0 ;为零,转ZER0 ADD A,#02H ;为正数,求X+2 AJMP SAVE ;转到SAVE,保存数据 ZER0:MOV A,# 64H ;数据为零,Y=100 AJMP SAVE ;转到SAVE,保存数据 NEG: DEC A ; CPL A ;求X SAVE:MOV 31H,A ;保存数据 SJMP ;暂停,3多向分支程序设计举例,【例4.3】 根据R0的值转向7个分支程序。 R010,转向SUB0; R020,转向SUB1; R060,转向SUB5; R0 =60,转向SUB6; 解:利用JMP A+DPTR 指令直接给PC赋值,使程序实现转移。程序流程如图4-5所示。,图4-5 多向分支程序流程图,返回本节,参考程序如下: ORG 2000H MOV DPTR,#TAB ;转移指令表首地址 MOV A,R0 ;取数 MOV B,#10 DIV AB ;A/10,商在A中 CLR C RLC A ;A2A JMP A+DPTR ;PC A+DPTR TAB: AJMP SUB0 ;转移指令表 AJMP SUB1 AJMP SUB2 AJMP SUB5 AJMP SUB6,小结: 1、汇编程序有哪三种基本结构? 2、构成分支程序,常用到哪些判断语句?,顺序程序 每条指令只执行一次; 分支程序 根据不同条件,会跳过一些指令,而转去 执行另一些指令 共同点:每条指令至多执行一次。但是,实际中有时要求某程 序段多次重复执行,则需要采用循环结构。,4.2.4 循环程序,1循环程序的结构(如图4-6所示) 循环程序一般包括如下四个部分: (1)初始化 (2)循环体 (3)循环控制 (4)结束 循环程序按结构形式,有单重循环与多重循环。 在多重循环中,只允许外重循环嵌套内重循环。 不允许循环相互交叉,也不允许从循环程序的外部跳入循环程序的内部(如图4-7所示)。,循环结构不但使程序简练,而且大大节省存储空间。 循环程序包含四部分: 、初始化部分 (循环计数器、变量置初值) 、循环处理部分(主体,需要重复执行的部分) 、循环控制部分(修改地址指针、修改变量、检测 循环结束条件) 、循环结束部分(对结果分析、处理,存放结果),先处理,后判断:,先判断,后处理:,如图4-6 循环程序的结构,图4-7 多重循环示意图,2循环程序设计举例,【例4.】有一数据块从片内RAM的30H单元开始存入,设数据块长度为10个单元。根据下式: X+2 X0 Y= 100 X=0 求出Y值,并将Y值放回原处。 X X0 解:设置一个计数器控制循环次数,每处理完一个数据,计数器减1。程序流程如图4-8所示。,例4. 4的程序流程图,返回本节,参考源程序如下:,ORG 2000H MOV R0,#10 MOV R1,#30H START:MOV A,R1 ;取数 JB ACC.7,NEG ;若为负数,转NEG JZ ZER0 ;若为零,转ZER0 ADD A,#02H ;若为正数,求X+2 AJMP SAVE ;转到SAVE,保存数据 ZER0: MOV A,# 64H ;数据为零,Y=100 AJMP SAVE ;转到SAVE,保存数据 NEG: DEC A CPL A ;求X SAVE: MOV R1,A ;保存数据 INC R1 ;地址指针指向下一个地址 DJNZ R0,START ;数据未处理完,继续处理 SJMP ;暂停,多重循环设计 循环体中还包含着一个或多个循环结构,即双重或多重循环。 【例4.5】设8031使用12MHz晶振,试设计延迟100ms的延时程序。,2、多重循环设计 循环体中还包含着一个或多个循环结构,即双重或多重循环。 例4.6 设8031使用12MHz晶振,试设计延迟100ms的延时程序。,内循环延时: (1 + 2 CTR)T = 500us(假设) 则CTR = 250 实际延时:1 + 2 250 1us = 501us 外循环延时:T +(501 + 2T) CTS = 100ms = 100 000us 所以 , CTS = 198.8 取 199 实际延时:1 + (501 + 2)199 = 1000.98ms,4.2.5 子程序,1子程序概念 所谓调用子程序:即暂时中断主程序的执行,而转到子程序的入 口地址去执行子程序。如图4-10所示。 子程序设计时注意事项: (1) 给子程序赋一个名字。实际为入口地址代号。 (2) 要能正确传递参数: 入口条件:子程序中要处理的数据如何给予。 出口条件:子程序处理结果如何存放。 (寄存器、存储器、堆栈方式) (3) 保护与恢复现场: 保护现场:压栈指令PUSH 恢复现场:弹出指令POP (4)子程序可以嵌套,图4-10 子程序的调用与返回,图4-11 子程序的嵌套调用与返回,2子程序设计举例,【例4.7】 将例4.改为子程序结构。 解:数据块中的十个数都需要进行符号判断并 作相应处理,可把一部分工作交给子程序完成, 主程序只负责读取数据、调用判断处理子程序、 保存数据、循环控制工作。 源程序如下:,ORG 0000H MOV R0,#10 MOV R1,#30H START:MOV A,R1 ;取数 ACALL DISPOSE ;调用判断、处理子程序 SAVE: MOV R1,A ;保存数据 INC R1 ;修改地址指针,指向下一个地址 DJNZ R0,START ;数据未处理完,继续处理 SJMP ;暂停,ORG 0200H DISPOSE:JB ACC.7,NEG ;若为负数,转NEG JZ ZER0 ;若为零,转ZER0 ADD A,#02H ;若为正数,求X+2 AJMP BACK ;转到SAVE,保存数据 ZER0: MOV A,#64H ;数据为零,Y=100 AJMP BACK ;转到SAVE,保存数据 NEG: DEC A CPL A ;求X BACK: RET,返回本节,4.2.6 位操作程序,【例4.8】 编写一程序,实现下图中的逻辑运算电路。其中P3.1、P1.1、P1.0分别是单片机端口线上的信息,RS0、RS1是PSW寄存器中的两个标志位,30H、31H是两个位地址,运算结果由P1.0输出。,硬件逻辑硬件电路图,返回本节,P1.0 =(P3.1 P1.1 ) (30H + 31H) RS1 RS0,(P3.1 P1.1 ) (30H + 31H) RS1 RS0= P1.0,程序如下: ORG 0000H MOV C,P3.1 ANL C,P1.1 CPL C MOV 20H,C ;暂存数据 MOV C,30H ORL C,/31H ANL C,RS1 ANL C,20H ANL C,RS0 MOV P1.0,C ;输出结果 SJMP $,软件实验一 S1.ASM,Block equ 6000h mov dptr, #Block ; 起始地址 mov r0, #0 ; clr a Loop:movx dptr, a inc dptr ; 指向下一个地址 djnz r0, Loop ; 记数减一 ljmp $ end,一、实验要求,指定存储器中某块的起始地址和长度,要求能将其内容清零。 二、程序框图,软件实验二 S2.ASM,Result equ 20h org 0 ljmp Start BinToBCD: mov b, #100 div ab mov Result, a mov a, b mov b, #10,div ab mov Result+1, a mov Result+2, b ret Start: mov sp, #40h mov a, #123 lcall BinToBCD Sjmp $ end,二进制到BCD 码转换,将A 拆为三个 BCD 码, 并存入 Result 开始的叁个单元。 程序框图,二进制到ASCII码转换,将A 拆为二个 ASCII 码, 并存入 Result 开始的二个单元,软件实验三 S3.ASM,Result equ 20h org 0 ljmp Start ASCIITab: db 0123456789ABCDEF ; 定义数字对应的ASCII表 BinToHex: mov dptr, #ASCIITab mov b, a ; 暂存 A swap a anl a, #0fh ; 取高四位,movc a, a+dptr ; 查ASCII表 mov Result, a mov a, b ; 恢复 A anl a, #0fh ; 取低四位 movc a, a+dptr ; 查ASCII表 mov Result+1, a ret Start: mov sp, #40h mov a, #1ah call BinToHex ljmp $ end,软件实验四 内存块移动 S4.ASM,移动 3000H 4000H, 256 字节 mov r0, #30h mov r1, #00h mov r2, #40h mov r3, #00h mov r7, #0 Loop: mov dph, r0 mov dpl, r1 movx a, dptr mov dph, r2,mov dpl, r3 movx dptr, a cjne r1, #0ffh, Goon1 inc r0 Goon1: inc r1 cjne r3, #0ffh, Goo

温馨提示

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

评论

0/150

提交评论