MCS-51汇编语言程序设计.ppt
《MCS-51汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《MCS-51汇编语言程序设计.ppt(68页珍藏版)》请在三一文库上搜索。
1、1,第五章 51单片机汇编语言程序设计,5.1 汇编语言源程序的格式 5.2 伪指令 5.3 汇编语言源程序的人工汇编 5.4 MCS-51汇编语言程序的基本结构 与设计举例,2,引言,计算机能够直接执行的是:0和1组成的机器码指令程序。,上一章在讲解指令时的程序,其特点是:,1、指令是采用助记符,而不是用机器码表示; 2、地址是采用标号地址(符号地址),而不是真正的实际地址。,汇编语言源程序:用助记符和标号地址编写的程序。,汇编语言面向机器,要经过汇编。,高级语言 面向算法、过程、对象,类似自然语言,可移植性好,须经解释或翻译后才能被执行。,3,汇编,汇编,机器语言目标程序,汇编语言源程序,
2、汇编程序,汇编:将汇编语言源程序转换成机器语言目标程序的过程称为汇编。(可人工汇编或机器汇编) 汇编程序:能将汇编语言源程序转换成机器语言目标程序的软件称为汇编程序。(机器汇编),4,5.1 汇编语言源程序的格式,MCS-51的汇编语言的四分段格式如下:,标号: 操作码 操作数;注释 规则: (1)标号字段和操作字码段之间要有冒号“:”相隔; (2)操作码字段和操作数字段间的分界符是空格; (3)多操作数之间用逗号相隔; (4)操作数字段和注释字段之间的分界符用分号“;”相隔。 操作码字段为必选项,其余各段为任选项。 例如: START: MOV A,#00H ;0A NOP,5,基本语法规则
3、:,1标号 是语句所在地址的标志符号。命名规范如下: (1)由18个字母、数字与下划线“-”组成; (2)首字符为字母; (3)同一标号在一个程序中只能定义一次; (4)绝对不允许把指令的保留字、寄存器及伪指令字符作为语句的标号。 2操作码字段 是汇编语言指令中唯一不能空缺的部分。汇编程序就是根据这一字段来生成机器代码的。 操作码段也可以是伪指令的助记符,在汇编时起作用。,6,基本语法规则2,3操作数 可以采用字母或数字等多种表示形式。 操作数是立即数,可用二进制、十进制和十六进制形式: 十六进制,后缀“H” 。 二进制,后缀“B” 。 十进制,后缀“D”,也可省略。 若十六进制的操作数以字符
4、AF中的某个开头时,则需在它前面加一个 “0”,以便在汇编时把它和字符AF区别开来。 注意数字前加“#”。 带加、减运算符的表达式: 例如:MOV A, #100-1,7,基本语法规则3,对于直接地址direct,有多种选择: (1)直接数据地址(各种进制),如MOV A、30H等; (2)标号地址,如MOV A,SUM等, SUM应该在程序中某处加以定义; (3)带有加减的表达式,设SUM为已定义的标号地址, 如MOV A,SUM十13; (4)特殊功能寄存器名,如MOV A,P2等。,4、 注释段:注释指令或程序的含义,便于阅读程序、维护程序。 必须用“;”隔开,续行时,也必须以“;”开头
5、 。,8,基本语法规则4,美元符号$的使用 用于表示该转移指令操作码所在的地址。例如,如下指令: JNB F0, $ 与如下指令是等价的: HERE:JNB F0,HERE,9,5.2 伪指令,只有在汇编前的源程序中才有伪指令。经过汇编得到目标程序(机器代码)后,伪指令已无存在的必要,所以“伪”体现在汇编时,伪指令没有相应的机器代码产生。,伪指令是告诉汇编程序,如何汇编源程序的指令。不属于指令系统中的指令。 用来对汇编过程进行某种控制,或者对符号、标号赋值。,不同版本的汇编语言,基本用法类似,但稍有不同。,10,伪指令,(1)起始地址伪指令,功能:用于设定目标程序段或数据块的起始地址。注意:地
6、址从小到大,且不能重叠。它放在一段源程序(主程序、子程序)或数据块的前面,说明紧跟在其后的程序段或数据块的起始地址就是伪指令中的16位绝对地址或用标号、表达式表示的地址。一般默认从0000开始。 例如: ORG 2000H START: MOV A, #7FH 它表明标号为START的目标程序是从2000H单元开始存放的。,格式: 标号: ORG 16位地址,11,(2)定义字节伪指令 DB 格式: 标号: DB 8位数据表 功能:用于从指定的地址开始,在程序存储器的连续单元中定义字节数据。8位数表可以是一字节常数或字符,或用逗号分开的字节串,或用引号括起来的字符串。 例如: ORG 2000
7、H TAB1: DB 30H, 8AH, 7FH, 73 DB 5, a, BCD,30H,2008H,8AH,2007H,7FH,2006H,49H,2005H,35H,2004H,61H,2003H,42H,2002H,43H,2001H,44H,2000H,由于ORG 2000H,所以TAB1的地址为2000H,因此以上伪指令经汇编以后,将对2000H开始的若干内存单元赋值。,12,(3)定义数据字伪指令 DW 格式: 标号: DW 16位数据表 功能:用于从指定地址开始,在程序存储器的连续单元中定义16位的数据字。存放时,数据字的高8位在前(低地址),低 8位在后(高地址)。 例如,
8、DW “AA” ;存入41H,41H DW “A” ;存入00H,41H DW “ABC” ; 超过两字节,不合法 DW 100H, 1ACH, -804 ;按顺序存入01H、00H、01H、0ACH、0FCH、0DCH,13,例如: ORG 1500H TAB2: DW 1234H, 80H 汇编以后: (1500H)=12H (1501H)=34H (1502H)=00H (1503H)=80H。,12H,1503H,34H,1502H,00H,1501H,80H,1500H,14,(4) 预留存储空间伪指令 DS 格式: 标号: DS 表达式 功能:用于从指定地址开始,在程序存储器中保留
9、指定数目的字节单元作为预留存储区,供程序运行使用。源程序汇编时,对预留单元不赋值。 例如: ADDRTABL: DS 20 ;从标号ADDRTABL代表的地址开始,预留20个连续的地址单元 ORG 8100H DS 08H ;从8100H地址开始,保留8个连续的地址单元,15,例如: ORG 1000H DS 20H DB 30H, 8FH 汇编后:从1000H开始,预留 32(20H)个字节的内存单元,然后从1020H开始,按照下一条DB指令赋值,即(1020H)=30H,(1021H)=8FH。,8FH,1021H,30H,1020H,101FH,1001H,1000H,1002H,16,
10、(5) 等值伪指令EQU 格式: 字符名称 EQU 赋值项 功能:用于给字符名称赋值。赋值后,其值在整个程序中有效(不能再改变)。其中可以是常数、 地址、标号或表达式,工作寄存器,其值为8位或16位二进制数。赋值以后的字符名称既可以作地址使用,也可以作立即数使用。先定义后使用。 例如: TAB EQU 1000H TAB1 EQU TAB 前一条伪指令表示TAB地址的值为1000H,后一条表示符号地址TAB1与TAB等值(可以互换)。,17,(6) 位地址符号定义伪指令 BIT 格式: 字符名称 BIT 位地址 功能:用于给字符名称赋以位地址。经赋值后就可用指令中BIT左面的字符名称来代替BI
11、T右边所指出的位。 其中可以是绝对地址,也可以是符号地址(位符号名称)。 例如: FLG BIT F0 AI BIT P1.0 经以上伪指令定义后,在编程中就可以把FLG和AI作为位地址来使用。,18,(7)结束汇编伪指令END 格式: 标号: END 功能:END是汇编语言源程序的结束标志,表示汇编结束。在END以后所写的指令,汇编程序都不予以处理。 在一个源程序中只能有1条END命令。在同时包含有主程序和子程序的源程序中,也只能有一个END命令,并放到所有指令的最后;否则,就有一部分指令不能被汇编。 也是选择项,当源程序为主程序时才具有,且其值为主程序第1条指令的符号地址;当源程序不是主程
12、序时,END命令不应带项。,19,格式: 符号 DATA 直接字节地址 功能:该伪指令用于给片内RAM字节单元地址赋予DATA前面的符号,赋值后可用该符号代替DATA后面的片内RAM字节单元地址。,(8) DATA伪指令,【例】 RESULT DATA 60H MOV RESULT,A 汇编后,RESULT就表示片内RAM的60H单元,程序后面用片内RAM的60H单元的地方就可以用RESULT。,20,【例】 PORT1 XDATA 2000H MOV DPTR,#PORT1 MOVX DPTR,A 汇编后,符号PORT1就表示片外RAM的2000H单元地址,程序后面可通过符号PORT1表示片
13、外RAM的2000H单元地址。,(9) XDATA伪指令,格式: 符号 XDATA 直接字节地址 该伪指令与DATA伪指令基本相同,只是它针对的是片外RAM字节单元。,21,判断正误,ORG 0000 LEN1 DATA 31H LEN2 EQU 32H MOV A, LEN1+1 MOV B,LEN2+1 MOV R1,#LEN1 MOV R2,#LEN2,MOV R2,#LEN2+LEN1 ;CNT1 DATA R5 CNT2 EQU R6 ;CNT EQU ADD MOV R3,#LEN1+1 MOV R4,#LEN2+1 MOV DPTR,#TOEND TOEND:SJMP $ LEN
14、1 DATA 31H LEN2 EQU 32H END,不能重复定义! 要有先定义的习惯。,22,5.3 汇编语言源程序的人工汇编,汇编程序的汇编过程 汇编有两种方法:手工汇编、机器汇编。,手工汇编过程: 第一次汇编:确定地址,翻译成各条机器码,字符标号原样写出; 第二次汇编:标号代真,将字符标号用所计算出的具体地址值或偏移量代换。,23,源程序,目标程序,地址,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:D
15、JNZ 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,24,5.4 MCS-51汇编语言程序的基本结构 与设计举例,主要知识点:顺序程序;分支程序;循环程序; 查表程序;子程序;运算程序 ;,用汇编语言与用高级语言进行程序
16、设计很相似。对于比较复杂的问题可以先根据题目的要求作出流程图,然后再根据流程图来编写程序。对于比较简单的问题则可以不作流程因而直接编程。 两者的差别还是很大的。一个很重要的差别就在于用汇编语言编程时,对于数据的存放位置,以及工作单元的安排等都要由编程者自己安排。而用高级语言编程时,这些问题都是由计算机安排的,编程者则不必过问。,25,程序框架,ORG 0000H LJMP MAIN ;跳转至主程序 ORG 0003H LJMP INT0_INT ;跳转至外部中断0的中断服务程序 ORG 000BH LJMP T0_INT ;跳转至定时器0的中断服务程序 ORG 0013H LJMP INT1_
17、INT ;跳转至外部中断1的中断服务程序 ORG 0030H MAIN: ;开始写主程序 END,中断入口地址,主程序开始,26,程序设计的学习目标,理解程序结构(顺序、分支、循环、子程序); 熟练掌握程序设计的思路方法和技巧; 要求掌握典型算法;,找到分析问题和解决问题的着眼点; 学会抓住不同问题的规律性; 举一反三,独立思考,有创意,有新意,独到。,27,汇编语言程序设计的要点:,一、分清指令和伪指令及其功能; 二、高级语言程序设计方法的比较与迁移; 三、特别注意汇编语言是面向机器的, 要记住 CPU的资源; 存储器结构与寻址方式; I/O口、定时/计数器、中断系统等关键的参数; 寄存器间
18、接寻址中指针的选择和使用技巧。 四、从宏观了解MCS-51汇编语言程序的整体结构, 从微观上理解微机中各组成部分是如何通过程序联系起来。,28,汇编语言程序的基本结构,顺序结构,分支程序结构,循环程序结构,29,5.4.1 顺序程序设计,顺序程序是程序设计中的基本模块。顺序程序没有分支,从第一条指令开始依次执行每一条指令,直到最后一条,程序就算执行完毕。 特点:比较简单,能完成一定的功能,是构成复杂程序的基础。,看几个例题。,30,例1 功能:将单字节压缩BCD码(存于数据内存30H单元)分离转换成ASCII码放在31H、32H单元。,-,30H,-,31H,-,32H,-,33H,-,34H
19、,-,35H,36H,36H,38H,37H,68H,38H,MOV 30H,#68H MOV A,30H;用除法分离 MOV B,#10H DIV AB;商6在A,余数8在B中 MOV 31H,B;转换成分离的BCD MOV 32H,A ORL 31H,#30H;存结果 ORL 32H,#30H,31,例2 功能:将8位二进制数(存于数据内存30H单元)转换成三位分离的BCD码放在31H、32H 、32H单元。,-,30H,-,31H,-,32H,-,33H,-,34H,02H,35H,05H,36H,04H,37H,FEH,38H,MOV A,30H;用除法分离 MOV B,#10 DIV
20、 AB;商25在A,余数4个位在B中 MOV 31H,B MOV B,#10 DIV AB;商2百位在A,余数5十位在B中 MOV 32H,B ;存结果 MOV 33H,A,个,十,百,32,例3 功能(例2的逆运算):将三位分离的BCD码放在31H、32H 、32H单元转换成8位二进制数(存于数据内存30H单元) 。,-,30H,-,31H,-,32H,-,33H,-,34H,02H,35H,05H,36H,04H,37H,FEH,38H,MOV A,33H; MOV B,#10 MUL AB;积BA,最大20 ADD A,32H;百位乘以10加十位,在A中 MOV B,#10 MUL AB
21、;再乘以10 ADD A,31H ;存结果 MOV 30H,A,个,十,百,33,处理过程:将30H单元的内容高3位屏蔽;31H单元内容的高5位屏蔽,高低四位交换,左移一位;然后与30H单元的内容相或,拼装后放到40H单元。,【例4】数据的拼拆 设在30H和31H单元中各有一个8位数据:,(30H)=X7X6 X5X4X3X2X1X0 (3lH)=Y7Y6Y5Y4Y3Y2Y1Y0,现在要从30H单元中取出低5位,并从31H单元中取出低3位完成拼装,拼装结果送40H单元保存,并且规定:,(40H)=Y2Y1Y0X4X3X2X1X0,34,程序如下: ORG 0100H MOV A,30H ANL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MCS 51 汇编 语言程序设计
链接地址:https://www.31doc.com/p-2893466.html