《汇编语言程序设计49课件》由会员分享,可在线阅读,更多相关《汇编语言程序设计49课件(43页珍藏版)》请在金锄头文库上搜索。
1、第三章第三章 MCS-51汇编语言程序设计汇编语言程序设计3.1 概述概述 MCS-51单片机的编程语言单片机的编程语言 : 汇汇编编语语言言 : 产产生生的的目目标标程程序序简简短短,占占用用存存储储空空间间小小,用用于于接接口口控控制制和和数数据据传传输输,能能充充分分发发挥挥单片机的硬件功能;单片机的硬件功能; 高高级级语语言言 : 如如C语语言言,编编程程方方便便,用用于于过过程程控控制和算法实现制和算法实现 。连接连接/定位器定位器L51汇编语言汇编语言源程序源程序汇编器汇编器A51符号转换程序符号转换程序OHS51绝对地址绝对地址目标程序目标程序 .BINC语言程序语言程序浮浮动动
2、地地址址目目标标程程序序编译器编译器C51 HEX图图 3-1 两种语言源程序转换成目标程序两种语言源程序转换成目标程序写入单片机的目标程序有两种文件格式:写入单片机的目标程序有两种文件格式: BIN文文件件是是由由编编译译器器生生成成的的二二进进制制文文件件,是是程程序序的的机器码机器码.HEX文文件件是是由由INTEL公公司司定定义义的的一一种种格格式式。HEX文文件需通过符号转换程序件需通过符号转换程序OHS51进行转换进行转换 目目前前很很多多公公司司将将编编辑辑器器、汇汇编编器器、编编译译器器、连连接接/定定位位器器、符符号号转转换换程程序序做做成成集集成成软软件件包包,用用户户进进
3、入入该该集集成成环环境境,编编辑辑好好程程序序后后,只只需需点点击击相相应应菜菜单单就可以完成上述的各步,如就可以完成上述的各步,如WAVE、KEIL。1)确定程序中每条汇编语言指令的指令机器码确定程序中每条汇编语言指令的指令机器码2)确定每条指令在存储器中的存放地址确定每条指令在存储器中的存放地址3)提供错误信息提供错误信息4)提供目标执行文件提供目标执行文件(*.OBJ/*.HEX)和列表文件和列表文件(*.LST) 地址地址 机器码机器码源程序源程序 ORG 2000H 2000H 78 30 MAIN: MOV R0,#30H 2002H E6 MOV A,R0 汇编程序的主要工作:汇
4、编程序的主要工作:1. 机器指令:指令系统中的全部指令。每条机器机器指令:指令系统中的全部指令。每条机器指令都有对应的机器代码,可以被指令都有对应的机器代码,可以被CPU执行。执行。2. 伪指令:伪指令: 汇编控制指令,没有指令代码,只用汇编控制指令,没有指令代码,只用于汇编过程,为汇编程序提供汇编信息。于汇编过程,为汇编程序提供汇编信息。一一. 汇编语言指令类型汇编语言指令类型3 3. 宏指令宏指令 宏汇编功能:将需要反复多次执行的程序段定义宏汇编功能:将需要反复多次执行的程序段定义成一个宏指令名(宏定义)。编程时,可在程序中成一个宏指令名(宏定义)。编程时,可在程序中使用宏指令名来替代被定
5、义的程序段(宏调用)。使用宏指令名来替代被定义的程序段(宏调用)。宏定义格式宏定义格式:宏调用格式:宏调用格式: 宏指令名宏指令名 实际参数实际参数 宏指令名宏指令名 实际参数实际参数宏指令名宏指令名 MACRO 形式参数形式参数 ;被定义的程序段;被定义的程序段 ENDM二常用伪指令及功能:二常用伪指令及功能:1.起始指令起始指令 ORG nn功能:定义程序或数据块的起始地址。功能:定义程序或数据块的起始地址。指示此语句后指示此语句后面的程序或数据块以面的程序或数据块以nn为起始地址,连续存放在程序为起始地址,连续存放在程序存储器中。存储器中。 指令地址指令地址 机器码机器码源程序源程序OR
6、G 2000H 2000H 78 30 MAIN:MOV R0,#30H 2002H E6 MOV A,R0 ORG 3000H 3000H 23 TAB: DB 23H,100,A 3001H 64 3002H 412.字节定义字节定义 标号:标号: DB(字节常数,或字符或表达式)(字节常数,或字符或表达式)功能:功能:指示在程序存储器中以标号指示在程序存储器中以标号为起始地址的单元里存放的数为为起始地址的单元里存放的数为字节数据。字节数据。例如例如 LN:DB 32,C,25H,-1;LNLN+3 地址单元依次存放地址单元依次存放 地址地址 数据数据LN20LN+143LN+225LN+
7、3FF3. 字定义字定义 标号:标号:DW (字常数或表达式)(字常数或表达式)作用:作用: 指示在程序存储器中以标号为指示在程序存储器中以标号为起始地址的单元里存放的数为字数据起始地址的单元里存放的数为字数据例如:例如:GH :DW 1234H,5678H,08GH1234GH+25678GH+40008 5. 等值指令等值指令 标号标号 EQU(数值表达式)(数值表达式) 定义常量,一般用于为标号或标识符赋值。定义常量,一般用于为标号或标识符赋值。例如:例如: X1 EQU 2000H X2 EQU 0FH MAIN:MOV DPTR,#X1 ; DPTR=2000H ADD A,#X2
8、; A=A+0FH4保留字节保留字节 标号:标号:DS (数值表达式)(数值表达式)作用:作用: 指示在程序存储器中保留以标号为起始地指示在程序存储器中保留以标号为起始地址的若干字节单元,其单元个数由数值表达式指定。址的若干字节单元,其单元个数由数值表达式指定。例如例如 L1:DS 32 ; 从从L1地址开始保留地址开始保留32个存储单元。个存储单元。6. 位定义位定义 标号标号 BIT 位地址位地址 作用:作用: 同同EQU指令,不过定义的是位操作地址。指令,不过定义的是位操作地址。例如例如 AIC BIT P1.1。7.汇编结束汇编结束 END作用:作用: 指示源程序段结束。指示源程序段结
9、束。 END指令放在程序的最后。指令放在程序的最后。3-3 顺序程序设计顺序程序设计顺序程序顺序程序(简单程序简单程序),程序走向只有一条路径。如前面,程序走向只有一条路径。如前面介绍的查表法求平方值等介绍的查表法求平方值等例例3-3 分解压缩型分解压缩型BCD码码,使其成为非压缩型使其成为非压缩型BCD码。码。ORG 0100HMOV R0,#40H;设指针;设指针MOV A,R0;取一个字节;取一个字节MOV R2,A;暂存;暂存ANL A,#0FH;高四位清;高四位清0INC R0MOV R0,A ;保存个位数据;保存个位数据片内片内RAM42H41H40H65MOV A,R2SWAP
10、A ;十位换到低四位;十位换到低四位ANL A,#0FHINC R0MOV R0,A ;保存十位数据;保存十位数据END05050606 ORG 0100H ORG 0100H MOV A,R2 JNB ACC.7,N ;为正数?;为正数? CPL A ;负数变补;负数变补 INC A MOV R2,AN: SJMP $ ;结束;结束3.4 3.4 分支程序的设计分支程序的设计由条件转移指令构成程序判断框部分由条件转移指令构成程序判断框部分,形成分支结构形成分支结构3.5.1 3.5.1 单分支程序单分支程序一个判断决策框,两种分支结构图。一个判断决策框,两种分支结构图。条件满足条件满足?N影
11、响条件影响条件Y处理段处理段条件满足条件满足?N影响条件影响条件Y处理处理1处理处理2例例1 1 求求8 8位有符号数的绝对值。位有符号数的绝对值。方法方法:正数不变正数不变,负数变补负数变补(按位取反,末位按位取反,末位加加1) 多分支散转程序的设计多分支散转程序的设计 有一类分支程序有一类分支程序,它根据不同的输入条件或它根据不同的输入条件或不同的运算结果不同的运算结果,转向不同的处理程序转向不同的处理程序,称之为称之为散转程序。有如下两种设计方法:散转程序。有如下两种设计方法: 1. 查查 转移地址转移地址 表表: 将将转移地址转移地址列成表格,将表格的内容作转移列成表格,将表格的内容作
12、转移的目标地址。的目标地址。 2. 查查 转移指令转移指令 表表: 将转移到不同程序的将转移到不同程序的转移指令转移指令列成表,判列成表,判断条件后查表,转到表中指令执行。断条件后查表,转到表中指令执行。1. 利用转移地址表实现转移利用转移地址表实现转移 例例3-7 根据根据R3的内容转向对应的程序,的内容转向对应的程序,R3的内容为的内容为0n (n128),处理程序的入口地址处理程序的入口地址(符号地址符号地址)分别为分别为PR0PRn 。分析:将分析:将PR0PRn入口地址入口地址(16位位)存在表格中,每一项占两个字存在表格中,每一项占两个字节,节,PRi在表中的偏移量为在表中的偏移量
13、为2i,因此将,因此将R3的内容乘的内容乘2即得即得PRi在表在表中的偏移地址,从偏移地址中的偏移地址,从偏移地址2i和和2i+1两个单元分别取出两个单元分别取出PRi的高八的高八位地址和低八位地址送位地址和低八位地址送DPTR寄存器,用间接转移指令寄存器,用间接转移指令 JMP 即即转移到转移到PRi入口地址执行。入口地址执行。 这里设这里设PR0-PRn值值 PR0 EQU 0110H ;用伪指令用伪指令org 定义定义PRn的具体地址的具体地址 PR1 EQU 0220H PR2 EQU 0330HORG 0000HMOV A,R3 ;R3AADD A,ACC ;A*2MOV DPTR,
14、#TABPUSH ACCMOVC A,A+DPTR ;取地址表中高字节MOV B,A ;暂存于BINC DPLPOP ACCMOVC A,A+DPTR ;取地址表中低字节MOV DPL,AMOV DPH,B ;DPTR0220HCLR A ;A=0JMP A+DPTR ;转移TAB:DW PR0,PR1,PR2,.,PRn ;转移地址表END01100220.TABTAB+2DPH DPL例如例如 R3=1的操作的操作0220 当程序中的某些指令需要反复执行多次时,采用循环当程序中的某些指令需要反复执行多次时,采用循环程序的方式,这样会使程序缩短,节省存储单元。程序的方式,这样会使程序缩短,节
15、省存储单元。 循环程序的类型循环程序的类型:第一种第一种先判断后执行:即先判断是否满足循环条件,满足则执行先判断后执行:即先判断是否满足循环条件,满足则执行第二种第二种先执行后判断:即循环执行一遍后,再判断条件是否满足。先执行后判断:即循环执行一遍后,再判断条件是否满足。3.5 循循 环环 程程 序序 设设 计计例例 3-9 设计一个延时设计一个延时10ms的延时子程序,已知单片机使用的晶振为的延时子程序,已知单片机使用的晶振为6MHz。 采用循环实现软件延时,精挑一些指令,通过计算指令周期,采用循环实现软件延时,精挑一些指令,通过计算指令周期,然后乘以循环次数。一般采用双循环实现。然后乘以循
16、环次数。一般采用双循环实现。 延时时间与两个因素有关延时时间与两个因素有关 : 晶振频率和循环次数。由于晶振晶振频率和循环次数。由于晶振采用采用6MHz,一个机器周期是,一个机器周期是2s,可用内循环实现,可用内循环实现1ms延时,外延时,外循环循环10次即可达次即可达10ms延时。延时。 内循环实现内循环实现1ms延时,内循环的次数用未知数延时,内循环的次数用未知数MT表示,从表示,从附录附录A查每条指令机器周期,计算程序的执行时间。查每条指令机器周期,计算程序的执行时间。 ORG 0020H MOV R0,#0AH ;外循环;外循环10次次 DL2: MOV R1,#MT ;内循环次数待定;内循环次数待定 DL1: NOP NOP ;空操作指令;空操作指令 DJNZ R1,DL1 DJNZ R0,DL2 RET111122内循环内循环DL1到指令到指令DJNZ R1,DL1的计算:的计算: (1+1+2)2SMT=1000S MT=125=7DH将将7DH代入上面程序的代入上面程序的MT,计算总的延时时间:,计算总的延时时间: 1+1+(1+1+2)125+2102S =10062S=10.062mS若需要延时更长时间,可以采用多重循环。若需要延时更长时间,可以采用多重循环。机器周期数机器周期数内内外外