第四章MCS-51汇编语言程序设计_第1页
第四章MCS-51汇编语言程序设计_第2页
第四章MCS-51汇编语言程序设计_第3页
第四章MCS-51汇编语言程序设计_第4页
第四章MCS-51汇编语言程序设计_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

1、第四章 MCS-51汇编语言程序设计4.1 4.1 汇编语言及汇编过程汇编语言及汇编过程4.1.14.1.1汇编程序功能汇编程序功能 源程序源程序 (汇编指令程序)(汇编指令程序) 汇编汇编 目标程序目标程序(机器码指令程序)(机器码指令程序) 汇编指令与机器码指令有一一对应的关系。汇编指令与机器码指令有一一对应的关系。汇编程序是一种翻译程序,将源程序翻译成目标程序。汇编程序是一种翻译程序,将源程序翻译成目标程序。 4.1.24.1.2汇编程序的汇编过程汇编程序的汇编过程 汇编有两种方法:手工汇编、机器汇编。汇编有两种方法:手工汇编、机器汇编。 1 1、手工汇编:、手工汇编:第一次汇编:确定地

2、址,翻译成各条机器码,字符标号第一次汇编:确定地址,翻译成各条机器码,字符标号原样写出;原样写出;第二次汇编:标号代真,将字符标号用所计算出的具体第二次汇编:标号代真,将字符标号用所计算出的具体地址值或偏移量代换。地址值或偏移量代换。 源程序源程序 目标程序目标程序 地址地址 ORG 1000HORG 1000H START START:MOV R0MOV R0,2FH 2FH MOV R2 MOV R2,#00H #00H MOV A MOV A,R0 R0 MOV R3 MOV R3,A A INC R3 INC R3 SJMP NEXT SJMP NEXT LOOP LOOP:INC R

3、0 INC R0 CJNE R0 CJNE R0,#44H#44H,NEXT NEXT INC R2 INC R2 NEXT NEXT:DJNZ R3DJNZ R3,LOOP LOOP MOV 2AH MOV 2AH,R2 R2 SJMP $ SJMP $ END END 第一次汇编第一次汇编第二次汇编第二次汇编1000 A82F1002 7A001004 E61005 FB1006 0B1007 80NEXT1009 08100A B644NEXT100D 0A100E DBLOOP1010 8A2A1012 80FEA82F7A00E6FB0B800508B644010ADBF98A2A8

4、0FE2 2、机器汇编、机器汇编两次扫描过程。两次扫描过程。第一次扫描:检查语法错误,确定符号名字;第一次扫描:检查语法错误,确定符号名字; 建立使用的全部符号名字表;建立使用的全部符号名字表; 每一符号名字后跟一对应值(地址或数)。每一符号名字后跟一对应值(地址或数)。第二次扫描:是在第一次扫描基础上,将符号地址转换成第二次扫描:是在第一次扫描基础上,将符号地址转换成 地址(代真);地址(代真); 利用操作码表将助记符转换成相应的目标码。利用操作码表将助记符转换成相应的目标码。 4.1.34.1.3伪指令伪指令 伪指令是告诉汇编程序,如何汇编源程序的指令。伪指令是告诉汇编程序,如何汇编源程序

5、的指令。 伪指令既不控制机器的操作,也不能被汇编成机器代码,伪指令既不控制机器的操作,也不能被汇编成机器代码, 故称为伪指令。故称为伪指令。 1 1、起始地址伪指令、起始地址伪指令 ORGORG ORG addr16ORG addr16 用于规定目标程序段或数据块的起始地址,用于规定目标程序段或数据块的起始地址, 设置在程序开始处。设置在程序开始处。 2 2、汇编结束伪指令、汇编结束伪指令 ENDEND 告诉汇编程序,对源程序的汇编到此结束。告诉汇编程序,对源程序的汇编到此结束。 一个程序中只出现一一个程序中只出现一 次,在末尾。次,在末尾。 3 3、赋值伪指令、赋值伪指令 EQUEQU 告诉

6、汇编程序,将汇编语句操作数的值赋予本语句的标号。告诉汇编程序,将汇编语句操作数的值赋予本语句的标号。 格式:格式: 标号名称标号名称 EQU EQU 数值或汇编符号数值或汇编符号 “ “标号名称标号名称”在源程序中可以作数值使用,也可以作数据地址、在源程序中可以作数值使用,也可以作数据地址、 位地址使用。位地址使用。 先定义后使用,放在程序开头。先定义后使用,放在程序开头。4 4、定义字节伪指令、定义字节伪指令 DBDB 告诉汇编程序从指定的地址单元开始,定义若干字节存储单告诉汇编程序从指定的地址单元开始,定义若干字节存储单 元并赋初值。元并赋初值。 格式:格式: 标号:标号: DB DB 字

7、节数据或字节数据表字节数据或字节数据表5 5、定义字伪指令、定义字伪指令 DWDW 从指定地址开始,定义若干个从指定地址开始,定义若干个1616个位数据,高八位存入低地址;个位数据,高八位存入低地址;低八位存入高地址。低八位存入高地址。 例、例、 ORG 1000HORG 1000H PIOI PIOI:DW 7654HDW 7654H,40H40H、1212、ABAB 6 6、数据地址赋值伪指令、数据地址赋值伪指令 DATADATA 将表达式指定的数据地址赋予规定的字符名称将表达式指定的数据地址赋予规定的字符名称 格式:格式: 字符名称字符名称 DATA DATA 表达式表达式注:该指令与注

8、:该指令与EQUEQU指令相似,只是,可先使用后定义,指令相似,只是,可先使用后定义, 放于程序开头、结尾均可。放于程序开头、结尾均可。7 7、定义空间伪指令、定义空间伪指令 DSDS 从指定地址开始,保留由表达式指定的若干字节空间作从指定地址开始,保留由表达式指定的若干字节空间作 为备用空间。为备用空间。 格式:格式: 标号:标号: DS DS 表达式表达式例例2 2、 ORG 1000HORG 1000H DS 0AH DS 0AH DB 71H DB 71H,11H11H,11H 11H ;从;从100BH100BH开始存放开始存放 ;71H11H71H11H、11H11H。 注:注:D

9、BDB、DWDW、DS DS 只能用于程序存储器;只能用于程序存储器; 而不能用于数据存储器。而不能用于数据存储器。 8 8、位地址赋值伪指令、位地址赋值伪指令 BITBIT将位地址赋予规定的字符名称。将位地址赋予规定的字符名称。格式:格式: 字符名称字符名称 BIT BIT 位地址位地址 例例3 3、 X1 BIT P1.2X1 BIT P1.2 相当于相当于 X1 EQU 92HX1 EQU 92H 小结:小结:1 1、为什么要对汇编程序进行汇编?、为什么要对汇编程序进行汇编? 2 2、机器汇编的过程是怎样的?、机器汇编的过程是怎样的? 3 3、常用伪指令的功能各是什么?、常用伪指令的功能

10、各是什么? 4.2 4.2 汇编语言程序的基本结构及应用举例汇编语言程序的基本结构及应用举例 程序编写做到:占用存储空间少;运行时间短;程序编写做到:占用存储空间少;运行时间短; 程序的编制、调试及排错所需时间短;结构清晰,易读、易于程序的编制、调试及排错所需时间短;结构清晰,易读、易于移植。移植。 按结构化程序设计思想,任何复杂程序都可由按结构化程序设计思想,任何复杂程序都可由顺序结构、顺序结构、分支结构、分支结构、循环结构循环结构 等构成。等构成。 语句 3语句 2顺序结构顺序结构 入口入口语句 1 出口出口分支结构分支结构入口入口条件满足否? 分支 1 出口出口YN 分支 2循环结构循环

11、结构入口入口 处理 修改条件条件满足否?Y 出口出口N4.2.14.2.1顺序程序举例顺序程序举例例例1 1、设在外、设在外RAMRAM的的60H60H单元存有单元存有1 1个字节代码,要求将其分解成两个个字节代码,要求将其分解成两个4 4位字段,高位字段,高4 4位存入原单元的低位存入原单元的低4 4位,其低位,其低4 4位存入位存入61H61H单元的低单元的低4 4位,位,且要求这两个单元的高且要求这两个单元的高4 4位均为位均为0 0,试编制完整程序。,试编制完整程序。 分析:# # # # ¥ ¥解:解:核心指令核心指令 ANLANL ORG 1000H ORG 1000H MODE

12、MODE:MOV R0MOV R0,#60H#60H MOVX A MOVX A,R0R0 MOV B MOV B,A A ANL A ANL A,#0F0H#0F0H SWAP A SWAP A MOVX R0 MOVX R0,A A ANL B ANL B,#0FH#0FH MOV A MOV A,B B INC R0 INC R0 MOVX R0 MOVX R0,A A END END4.2.24.2.2分支结构与分支程序设计分支结构与分支程序设计结构:根据不同的条件,进行相应的处理。结构:根据不同的条件,进行相应的处理。通常用条件转移指令形成简单分支结构。通常用条件转移指令形成简单分支

13、结构。如:如: 判(判(A A) = Z = Z 或或 NZ NZ ,转移,转移 判(判(CYCY)= 1 = 1 或或 0 0 ,转移,转移 判(判(bitbit)=1 =1 或或 0 0 ,转移,转移 CJNE CJNE 比较不相等转移比较不相等转移 例例3 3、设、设a a存放在存放在A A中,中,b b存放在寄存器存放在寄存器B B中,要求按下式中,要求按下式 计算计算Y Y值,并将结果值,并将结果Y Y存于累加器存于累加器A A中,试编写程序。中,试编写程序。 a-b a-b (a0a0) Y = Y = a+b a+b (a 0a NBNA NB时,将内部时,将内部RAMRAM的的

14、42H42H单元清单元清0 0;否则,将该单元置成全;否则,将该单元置成全1 1,试编程。,试编程。解法解法I I:因为无:因为无1616位数的比较指令,所以,只能用位数的比较指令,所以,只能用8 8位数的比较位数的比较 指令。指令。 (画出流程框图)(画出流程框图)解:解:ORG 2000HORG 2000H CMP CMP:MOV AMOV A,50H50H CJNE A CJNE A,40H40H,CMP1CMP1 MOV A MOV A,51H51H CJNE A CJNE A,41H41H,CMP1CMP1 SJMP NHIGHE SJMP NHIGHE CMP1 CMP1:JC H

15、IGHEJC HIGHE NHIGHE NHIGHE:MOV 42HMOV 42H,#0FFH#0FFH SJMP DONE SJMP DONE HIGHE HIGHE:MOV 42HMOV 42H,#00H#00H DONE DONE:SJMP SJMP ENDEND解法解法IIII:先假设:先假设NA NBNA NB,再来判断是否,再来判断是否NA NBNA NB ORG 3000H ORG 3000H CMP2 CMP2:MOV R0MOV R0,#00H#00H MOV A MOV A,50H50H CJNE A CJNE A,40H40H,CMP3CMP3 MOV A MOV A,5

16、1H51H CJNE A CJNE A,41H41H,CMP3CMP3 SJMP NHIGHE SJMP NHIGHE CMP3 CMP3:JC HIGHEJC HIGHE NHIGHE NHIGHE:MOV R0MOV R0,#0FFH #0FFH ;不大于标志;不大于标志 HIGHEHIGHE:MOV 42HMOV 42H,R0R0 SJMP SJMP ENDEND 小结:小结: 1 1、汇编程序有哪三种基本结构?、汇编程序有哪三种基本结构? 2 2、构成分支程序,常用到哪些判断语句?、构成分支程序,常用到哪些判断语句? * *顺序程序顺序程序 每条指令只执行一次;每条指令只执行一次;*

17、*分支程序分支程序 根据不同条件,会跳过一些指令,而转去根据不同条件,会跳过一些指令,而转去 执行另一些指令执行另一些指令共同点:每条指令至多执行一次。但是,实际中有时要求某程共同点:每条指令至多执行一次。但是,实际中有时要求某程序段多次重复执行,需要采用循环结构。序段多次重复执行,需要采用循环结构。 * *循环结构不但使程序简练,而且大大节省存储空间。循环结构不但使程序简练,而且大大节省存储空间。循环程序包含四部分:循环程序包含四部分:、初始化部分(循环计数器、变量置初值)、初始化部分(循环计数器、变量置初值)、循环处理部分(主体,需要重复执行的部分)、循环处理部分(主体,需要重复执行的部分

18、) 、循环控制部分(修改地址指针、修改变量、检测、循环控制部分(修改地址指针、修改变量、检测循环结束条件)循环结束条件)、循环结束部分(对结果分析、处理,存放结果)、循环结束部分(对结果分析、处理,存放结果) 4.2.3 4.2.3循环结构循环结构先处理,后判断:先处理,后判断: 开始初始化部分处理部分修改变量循环结束?结束部分结束先判断,后处理:先判断,后处理: 开始初始化部分修改变量循环结束?结束部分结束处理部分循环有:单循环、多重循环。循环有:单循环、多重循环。循环次数已知,可用计数器控制循环次数;循环次数已知,可用计数器控制循环次数;循环次数未知,按问题条件控制循环是否结束。循环次数未

19、知,按问题条件控制循环是否结束。 1 1、单循环程序、单循环程序(1 1)循环次数是已知的程序)循环次数是已知的程序例例1 1、已知片外、已知片外RAMRAM的的10H10H单元存放单元存放8 8位二进制数,要求将其转移成相位二进制数,要求将其转移成相应的应的ASCIIASCII码,并以高位在前,低位在后的顺序,依次存放到片外码,并以高位在前,低位在后的顺序,依次存放到片外RAMRAM以以11H11H为首地址的连续单元中,试编程。为首地址的连续单元中,试编程。解:解:先将中间单元置成先将中间单元置成30H30H,然后判欲转换位是否为,然后判欲转换位是否为1 1, 若是,则将中间单元内容加若是,

20、则将中间单元内容加1 1;否则,中间单元内容保持不变。;否则,中间单元内容保持不变。 通过左移指令实现由高到低的顺序进行转换。通过左移指令实现由高到低的顺序进行转换。 START START:MOV R2MOV R2,#08H #08H ;循环计数初值(循环次数已知);循环计数初值(循环次数已知) MOV R0MOV R0,#10H #10H ;地址指针初值;地址指针初值 MOVX AMOVX A,R0 R0 ;取数;取数 MOV BMOV B,A A ;暂存;暂存B B中中 LOOPLOOP:MOV AMOV A,#30H #30H ;将中间单元(;将中间单元(A A)置成)置成30H30H

21、 JNB B.7 JNB B.7,NA NA ;判断转换的二进制位为;判断转换的二进制位为0 0否?否? INC A INC A ;若为;若为1 1,则变成,则变成1 1的的ASCIIASCII码码“31H”31H” NA NA:INC R0 INC R0 ;修改地址指针;修改地址指针 MOVX R0MOVX R0,A A ;存放转换的结果;存放转换的结果 MOV AMOV A,B B RL A RL A ;作好准备,判断下一位;作好准备,判断下一位 MOV BMOV B,A A ;暂存;暂存 DJNZ R2DJNZ R2,LOOP LOOP ;判断转换结束否?未完继续;判断转换结束否?未完继

22、续 SJMP SJMP (2 2)循环次数未知的程序)循环次数未知的程序例例2 2、设用户用键盘输入长度不超过设用户用键盘输入长度不超过100100字节的字符串放在字节的字符串放在80318031单片单片机外部机外部RAMRAM以以20H20H为首地址的连续单元,该字符串用回车符为首地址的连续单元,该字符串用回车符CRCR(CR= 0DHCR= 0DH)作为结束标志,要求统计此字符串的长度并存入)作为结束标志,要求统计此字符串的长度并存入内部内部RAMRAM的的1FH1FH单元中。单元中。解:从首单元开始取数,每取一数判断其是否为解:从首单元开始取数,每取一数判断其是否为CRCR,是则结束。,

23、是则结束。 ORG 1000HORG 1000HSTADA DATA 20HSTADA DATA 20HSLANG DATA 1FHSLANG DATA 1FHCMCR2CMCR2:MOV R0MOV R0,#STADA-1#STADA-1 MOV B MOV B,#0FFH#0FFH CRLOPCRLOP:INC R0INC R0 INC B INC B MOVX A MOVX A,R0R0 CJNE A CJNE A,#0DH#0DH,CRLOPCRLOP MOV SLANG MOV SLANG,B B SJMP SJMP ENDEND 2 2、多重循环设计、多重循环设计循环体中还包含着一

24、个或多个循环结构,即双重或多重循环。循环体中还包含着一个或多个循环结构,即双重或多重循环。例例3 3、设、设80318031使用使用12MHz12MHz晶振,试设计延迟晶振,试设计延迟100ms100ms的延时程序。的延时程序。解:延时程序的延迟时间就是该程序的执行时间,通常采用解:延时程序的延迟时间就是该程序的执行时间,通常采用MOV MOV 和和DJNZDJNZ二指令。二指令。 T = 12 / foscT = 12 / fosc = 12 / = 12 / (121210106 6)= 1us= 1us ORG 1000H ORG 1000H DELAYDELAY:MOV R2MOV R

25、2,#CTS #CTS ;T = 1usT = 1us LOOPS LOOPS:MOV BMOV B,#CTR #CTR ;T = 1us T = 1us LOOPR LOOPR:DJNZ BDJNZ B,LOOPR LOOPR ;2T = 2us 2T = 2us DJNZ R2 DJNZ R2,LOOPS LOOPS ;2T = 2us 2T = 2us ENDEND 内循环内循环外循环外循环内循环延时:内循环延时:(1 + 2 1 + 2 CTR CTR)T = 500usT = 500us(假设)(假设)则则CTR = 250CTR = 250 实际延时:实际延时:1 + 2 1 +

26、2 250 250 1us = 501us 1us = 501us外循环延时:外循环延时:T +T +(501 + 2T501 + 2T) CTS = 100ms = 100 000us CTS = 100ms = 100 000us 所以所以 , CTS = 198.8 CTS = 198.8 取取 199199 实际延时:实际延时:1 + 1 + (501 + 2501 + 2)199 = 100.98ms199 = 100.98ms 例例4 4、设在、设在80318031内部内部RAMRAM中存一无符号数的数组,其长度为中存一无符号数的数组,其长度为100100,起,起始地址是始地址是3

27、0H30H,要求将它们从大到小排序,排序后仍存放在原区域,要求将它们从大到小排序,排序后仍存放在原区域中,试编者按程。中,试编者按程。 解:先举四个数排序的例子解:先举四个数排序的例子内内RAM RAM 第一次外循环第一次外循环 第二次外循环第二次外循环 第三次外循环第三次外循环 30H 0 0 0 3 0 3 0 630H 0 0 0 3 0 3 0 6 31H 0 3 0 2 0 6 0 3 31H 0 3 0 2 0 6 0 3 32H 0 2 0 6 0 2 0 2 32H 0 2 0 6 0 2 0 2 33H 0 6 0 0 0 0 0 0 33H 0 6 0 0 0 0 0 0共

28、共4 1 = 3 次外循环次外循环这就是所谓的这就是所谓的“冒泡法冒泡法”。4 4个数排序最多经过个数排序最多经过 3 3 次外循环就可排出次外循环就可排出, ,每次外循环都包含每次外循环都包含3 3次次内循环。实际上大多情况不用内循环。实际上大多情况不用 3 3 次外循环就可排完。次外循环就可排完。对于对于100100个数排序也是如此,用不到个数排序也是如此,用不到9999次循环,排序就结束。为了次循环,排序就结束。为了提高排序速度,程序中可设一交换标志位,如提高排序速度,程序中可设一交换标志位,如10H10H位,位,每次循环中:若有交换则每次循环中:若有交换则 SETB 10HSETB 1

29、0H 若无交换则若无交换则 CLR 10HCLR 10H 每次循环结束时,测每次循环结束时,测10H10H位,判断排序是否结束位,判断排序是否结束。 ORG 1000H ORG 1000HBUBBLEBUBBLE:MOV R0MOV R0,#30H#30H MOV B MOV B,#64H#64H CLR 10H CLR 10H DEC B DEC B ;长度计数;长度计数 LOOPLOOP:MOV AMOV A,R0 R0 ;内循环的入口;内循环的入口 MOV 20HMOV 20H,A A ;暂存,为交换作准备;暂存,为交换作准备 INC R0INC R0 MOV 21H MOV 21H,R0R0 CJNE A

温馨提示

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

评论

0/150

提交评论