单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第5章 汇编语言程序设计简介,*,/30,第5章 汇编语言程序设计简介,5.1 单片机程序设计语言概述,5.2 汇编语言基本结构,11/20/2024,第5章 汇编语言程序设计简介,第5章 汇编语言程序设计简介 5.1 单片机程序设计语言概述,1,5.1,单片机程序设计语言概述,第5章 汇编语言程序设计简介,11/20/2024,第5章 汇编语言程序设计简介,5.1 单片机程序设计语言概述第5章 汇编语言程序设计简介,2,5.1.1 单片机常用的三种程序设计语言,机器语言,指直接用机器码编写程序、能够被计算机直接执行的语言。,汇编语言,指用指令助记符代替机器码的编程语言,高级语言,广泛应用的高级语言是C语言,每当有新型单片机推出时,都有相配套的C编译器加以支持。高级语言编写程序的缺点是实时性不高,结构不紧凑,编译后占用存储空间比较大,这一点在存储器有限的单片机应用系统中没有优势。,11/20/2024,第5章 汇编语言程序设计简介,5.1.1 单片机常用的三种程序设计语言机器语言 10/7/,3,5.1.2 汇编语言语句的种类和格式,1.指令种类,(1)指令语句,每一条指令语句在汇编时都产生一个指令代码机器码。,(2)伪指令语句,伪指令语句是为汇编服务的。在汇编时没有机器代码与之对应。伪指令语句是控制汇编程序如何完成汇编工作的指示,包括控制汇编程序的输入/输出,定义数据和符号,条件汇编,分配存储空间等。这些指示信息就是伪指令。,11/20/2024,第5章 汇编语言程序设计简介,5.1.2 汇编语言语句的种类和格式1.指令种类10/7/,4,伪指令 是 对汇编过程 起控制作用,但本身并没有对应的机器代码的指令。,(1)汇编起始指令 ORG,指令格式为:,ORG nn,该指令的作用是指明后面的程序或数据块的起始地址,它总是出现在每段源程序或数据块的开始。式中,nn为 16 位地址,汇编时nn确定了此语句后面第一条指令或第一个数据的地址,此后的源程序或数据块就依次连续存放在以后的地址内,直到遇到另一个ORG指令为止。,2.,伪指令,11/20/2024,第5章 汇编语言程序设计简介,(1)汇编起始指令 ORG2.伪指令 1,5,例:,ORG 2000H,MOV SP,60H,MOV R0,2FH,MOV R2,0FFH,ORG伪指令说明其后面程序的目标代码在存储器中存放的起始地址是2000H,即,存储器地址 目标程序,2000H 75 81 60,2003H 78 2F,2005H 7A FF,11/20/2024,第5章 汇编语言程序设计简介,例:,6,(2)等值指令EQU,指令格式:,字符名称 EQU 数字或汇编符号,例:PA8155 EQU 8001H,;即给标号PA8155赋值为8001H,使指令中的字符名称等价于给定的数字或汇编符号。,如果在程序中要多次使用到某一地址,由EQU指令将其赋值给一个字符名称,一旦需要对其进行变动,只要改变EQU命令后面的数字即可。,注意:,由 EQU等值的字符名称必须先赋值后使用,且在同一个源程序中,同一个标号只能赋值一次。,11/20/2024,第5章 汇编语言程序设计简介,(2)等值指令EQU10/7/2023第5,7,(3)定义字节指令DB,指令格式:,标号:DB 8位二进制数表,功能:,把 8 位二进制数表依次存入从标号开始的连续的存储单元中。,标号区段可有可无,DB指令之后的 8 位二进制数表是字节常数或用逗号隔开的字节串,也可以是用引号括起来的ASCII码字符串 (一个 ASCII字符相当于一个字节)。,11/20/2024,第5章 汇编语言程序设计简介,(3)定义字节指令DB10/7/2023,8,例:ORG 1000H,BUF1:DB 38H,7FH,80H,BUF2:DB 45H,66H,ORG伪指令指定了标号BUF1的地址为1000H,而DB伪指令是将其后的二进制数表38H,7FH,80H依次存放在1000H,1001H,1002H 3 个连续单元之中,BUF2也是一个标号,其地址与前一条伪指令连续,即1003H,1004H地址单元中依次存放 45H,66H。,11/20/2024,第5章 汇编语言程序设计简介,例:ORG 1000H10/7/2023第5章 汇编语,9,(4)定义字指令DW,指令格式:,标号:DW 16 位数据表,该指令的功能与DB相似,区别仅在于从指定地址开始存放的是指令中的 16 位数据,而不是字节串。每个 16 位数据要占两个存储单元,高8 位先存,低 8 位后存,这和MCS-51指令中的16位数据存放顺序是一致的。,11/20/2024,第5章 汇编语言程序设计简介,(4)定义字指令DW1,10,DW 定义字命令,ORG 1500H,TABLE:DW 7234H,8AH,10H,经汇编后(1500H)=72H,,(1501H)=34H,,(1502H)=00H,,(1503H)=8AH,,(1504H)=00H,,(1505H)=10H,,11/20/2024,第5章 汇编语言程序设计简介,DW 定义字命令 ORG,11,DS 定义存储空间命令,格式:DS 表达式,功能:在汇编时,从指定地址开始保留DS之后表达式的值所规定的存储单元以备后用。,例如:ORG 1000H,DS 08H,DB 30H,8AH,汇编后,从1000H保留8个单元,然后从1008H按DB命令给内存赋值,,即(1008H)=30H (1009H)=8AH,11/20/2024,第5章 汇编语言程序设计简介,DS 定义存储空间命令格式:DS 表达式10/7/20,12,BIT 位地址符号命令,格式:字符名 BIT 位地址,功能:把BIT后的位地址值赋给字符名。其中字符名不是标号,其后没有冒号,但字符名是必须的。,例如:A1 BIT P1.0,A2 BIT 02H,汇编后,P1,口第0位的位地址90H就赋给了A1,而A2的值则为02H。,11/20/2024,第5章 汇编语言程序设计简介,BIT 位地址符号命令格式:字符名 BIT 位地址,13,例:分析下段程序,试求2008H200FH单元的内容,ORG 2000H,DS 08H,DB 30H,8AH,10,B,DW 54H,1F80H,(2008H)=30H(2009H)=8AH,(200AH)=0AH(200BH)=42H,(200CH)=00H(200DH)=54H,(200EH)=1FH(200FH)=80H,11/20/2024,第5章 汇编语言程序设计简介,例:分析下段程序,试求2008H200FH单元的内容ORG,14,(5)汇编结束指令END,指令格式:,标号:END 地址或标号,格式中标号以及END后面的地址或标号可有可无。功能:提供汇编结束标志。汇编程序遇到 END后就停止汇编,对 END以后的语句不予处理,故 END应放在程序的结束处。,11/20/2024,第5章 汇编语言程序设计简介,(5)汇编结束指令END10/7/2023第,15,5.2 汇编语言基本结构,第5章 汇编语言程序设计简介,11/20/2024,第5章 汇编语言程序设计简介,5.2 汇编语言基本结构第5章 汇编语言程序设计简介 10/,16,5.2.1 顺序程序设计,例 1 两个无符号双字节数相加。,设被加数存放于内部RAM的40H(高位字节),41H(低位字节),加数存放于50H(高位字节),51H(低位字节),和数存入 40H和41H单元中。,11/20/2024,第5章 汇编语言程序设计简介,5.2.1 顺序程序设计 例 1 两个无符号,17,程序如下:,START:CLR C ;将Cy清零,MOV R0,41H ;将被加数地址送数据指针R0,MOV R1,51H ;将加数地址送数据指针R1,AD1:MOV A,R0 ;被加数低字节的内容送入A,ADD A,R1 ;两个低字节相加,MOV R0,A ;低字节的和存入被加数低字节中,DEC R0 ;指向被加数高位字节,DEC R1 ;指向加数高位字节,MOV A,R0 ;被加数高位字节送入A,ADDC A,R1 ;两个高位字节带Cy相加,MOV R0,A ;高位字节的和送被加数高位字节,RET,11/20/2024,第5章 汇编语言程序设计简介,程序如下:10/7/2023第5章 汇编,18,例2 三字节无符号数相加,被加数在内部RAM的50H,51H,52H单元中,加数在内部RAM的53H,54H,55H单元中,和存放在50H,51H 和52H单元中,进位存放在位寻址区的00H位中。,MOV R0,#52H,MOV R1,#55H,MOV A,R0,ADD A,R1,MOV R0,A,DEC R0,DEC R1,MOV A,R0,ADDC A,R1,MOV R0,A,DEC R0,DEC R1,MOV A,R0,ADDC A,R1,MOV R0,A,CLR A,ADDC A,#00H,MOV R0,#00H,MOV R0,A,11/20/2024,第5章 汇编语言程序设计简介,例2 三字节无符号数相加,被加数在内部RAM的50H,51H,19,例 3 将两个半字节数合并成一个一字节数。,设内部RAM 40H#,41H单元中分别存放着 8 位二进制数,要求取出两个单元中的低半字节,并成一个字节后,存入 50H单元中。程序如下:,START:MOV R1,40H ;设置R1为数据指针,MOV A,R1 ;取出第一个单元中的内容,ANL A,0FH ;取第一个数的低半字节,SWAP A ;移至高半字节,INC R1 ;修改数据指针,XCH A,R1 ;取第二个单元中的内容,ANL A,0FH ;取第二个数的低半字节,ORL A,R1 ;拼字,MOV 50H,A ;存放结果,RET,11/20/2024,第5章 汇编语言程序设计简介,例 3 将两个半字节数合并成一个一字节数。,20,5.2.2 分支程序设计,(a)单分支流程;(b)多分支流程,11/20/2024,第5章 汇编语言程序设计简介,5.2.2 分支程序设计(a)单分支流程;(b),21,例 3 x,y均为8位二进制数,设 x存入R0,y存入R1,求解:,MOV A,R0,JZ loop1 ;(A)=0时转移,JB ACC.7,loop2 ;ACC.7=1转移,MOV R1,#1,loop1,:MOV R1,#0,SJMP ENDF,loop2:MOV R1,#0FFH,ENDF:RET,11/20/2024,第5章 汇编语言程序设计简介,例 3 x,y均为8位二进制数,22,例 4 比较两个无符号数的大小。设外部 RAM 的存储单元 ST1和ST2中存放两个不带符号的二进制数,找出其中的大数存入外部 RAM 中的 ST3单元中。,11/20/2024,第5章 汇编语言程序设计简介,例 4 比较两个无符号数的大小。设外部,23,程序如下:,ORG 1000H ,ST1 EQU 2000H,ST2 EQU 2100H,ST3 EQU 2200H,START:CLR C ;清零Cy,MOV DPTR,ST1 ;第一个数的指针,MOVX A,DPTR ;取第一个数,MOV R2,A ;保存,MOV DPTR,ST2 ;第二个数的指针,MOVX A,DPTR ;取第二个数,CLR C,11/20/2024,第5章 汇编语言程序设计简介,程序如下:10/7/2023第5章 汇编语言程序设计简介,24,SUBB A,R2 ;两数比较,JNC BIG2 ;若Cy=0,转移,;即无借位,(A)(R2),第2个数大,XCH A,R2 ;第一个数大,BIG1:MOV DPTR,ST3,MOVX DPTR,A ;存大数,RET,BIG2:MOVX A,DPTR ;第二个数大,SJMP BIG1,RET,11/20/2024,第5章 汇编语言程序设