最新单片机培训四汇编语言程序设计.ppt
《最新单片机培训四汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《最新单片机培训四汇编语言程序设计.ppt(70页珍藏版)》请在三一办公上搜索。
1、1,第4章 汇编语言程序设计,周剑峰,2,汇编语言简介,汇编语言格式,计算机所能执行的每条指令都对应一组二进制代码。为了容易理解和记忆计算机的指令,人们用一些英语的单词和字符以及数字作为助记符来描述每一条指令的功能。用助记符描述的指令系统,称为机器的汇编语言系统,简称汇编语言。汇编语言也是面向机器的,每种计算机系统也都有它自己的汇编语言,用汇编语言编写的程序,称为汇编语言源程序或汇编源程序。,由操作助记符和操作数字段组成汇编指令指能汇编成机器语言代码的指令。格式:操作码 操作数1,操作数2,操作数3,3,汇编伪指令,伪指令:汇编时不产生机器语言代码的指令,仅提供汇编控制信息。,一、定位伪指令,
2、ORG m m:一般为十六进制数。m指出在该伪指令后的指令的汇编地址,即生成的机器指令起始存贮器地址。显然,当使用多条ORG m伪指令时,应注意其后生成的机器指令存放地址不应重叠。例如:ORG 0START:SJMP MAIN ORG 0BH LJMP PTFO ORG 40H MAIN:,4,二、定义字节伪指令 标号:DB X1、X2 Xn,例如:ORG 1000HDB 0AAH SR-DATA:DB25,25H DZX-DATA:DBMCS-51经汇编后,从地址1000H处存贮器的内容为:(1000H)=AAH(1001H)=19H(1002H)=25H(1003H)=4DH(1004H)
3、=43H(1005H)=53H(1006H)=2DH(1007H)=35H(1008H)=31H,5,三、字定义伪指令 标号:DW Y1、Y2 Yn,通知汇编程序从当前ROM地址开始,保留存贮单元,并存入DW后面的数据。存放时高8位在前,低8位在后。例如:ORG 1000H DW1234HSR_DATA:DW56H,2000经汇编后,从地址1000H处存贮器的内容为:(1000H)=12H(1001H)=34H(1002H)=00H(1003H)=56H(1004H)=07H(1005H)=D0H,6,四、EQU 赋值伪指令 字符名称 EQU 项(数或汇编符号),EQU伪指令是把“项”赋给“字
4、符名称”,注意这里的“字符名称”不同于标号(其后没有冒号),但它是必须的。用EQU赋过值的符号名可以用作数据地址、代码地址、位地址或是一个立即数。,例如:AAEQUR1MOVA,AA D10EQU10ADD_YEQU07ABHMOVA,D10LCALLADD_Y,7,五、DS定义存贮空间伪指令 DS 表达式,在汇编时,从指定地址开始保留DS之后“表达式”的值所规定的存贮单元。,例如:ORG1000HDS07HDB20H,20 DW12H 经汇编后,从地址1000H开始保留7个单元,然后从1007H处存贮器的内容为:(1007H)=20H(1008H)=14H(1009H)=00H(100AH)
5、=12H,8,六、DATA数据地址赋值伪指令 字符名称 DATA 表达式,这里的“字符名称”与标号不同(其后没有冒号),但它是必须的,其功能是把“表达式”的值赋给左边的“字符名称”。DATA伪指令与EQU伪指令的主要区别是:EQU定义的“字符名称”必须先定义后使用,而DATA定义的“字符名称”没有这种限制,故DATA伪指令通常用在源程序的开头或末尾。,例如:ORG0100H AA DATA 35H DPTRA DATA0AA00H MOVA,AA;(35H)A MOVDPTR,#DPTRA;0AA00H DPTR,9,七、BIT定义位地址符号伪指令 字符名称 BIT 位地址,这里的“字符名称”
6、与标号不同(其后没有冒号),但它是必须的,其功能是把BIT之后的“位地址”值赋给“字符名称”。,例如:P11BITP1.1A2BIT02HMOVC,P11MOVA2,C,八、汇编结束伪指令 END指出汇编结束,其后即使还有指令,汇编程序也不作处理。,10,汇编语言程序设计,汇编语言程序设计方法,程序设计步骤,根据设计任务要求,采用汇编语言编制程序的过程。,应用程序设计步骤:1.拟定任务书 2.建立数学模型 3.建立算法 4.绘制程序流程图 5.编制汇编语言源程序 6.上机调试,注意:汇编调试需要多次试验,往往调试占整个任务的大部分时间,11,程序设计要求及基本方法,可靠性高、可读性好、效率高、
7、占用存储容量小和执行速度快,汇编程序结构设计的基本方法:,汇编程序结构设计的基本要求:,1.顺序程序的设计 2.分支程序设计 3.循环程序设计 4.子程序设计5.查表程序设计6.散转程序设计,12,一、顺序程序,顺序程序是最简单的程序结构,在顺序程序中没有任何的转移指令,以下是一个典型的例子。例1:字节(双字)加法。将内部RAM 30H开始的4个单元中存放的4字节十六进制数和内部RAM 40H单元开始的4个单元中存放的4字节十六进制数相加,结果存放到40H开始的单元中。(如0a0ab234fh存放在片内RAM30h开始的4个单元如图所示),13,题意分析示意图,(1)题意分析。题目的要求如图所
8、示。,14,ORG0200HMOVA,30HADD A,40HMOV40H,A;最低字节加法并送结果MOVA,31HADDC A,41HMOV41H,A;第二字节加法并送结果,(2)汇编语言源程序。按照双字节加法的思路,实现4字节加法的源程序如下:,15,MOVA,32HADDC A,42HMOV42H,A;第三字节加法并送结果MOVA,33HADDCA,43HMOV43H,A;第四字节加法并送结果,进位 位在CY中 SJMP$END,16,分支程序,分支程序可以分为:单分支双分支多分支,17,单分支,单分支程序的基本结构:,18,双分支,双分支程序的基本结构:,19,多分支,多分支程序的基本
9、结构:,20,例:如图所示,设计一段程序实现功能:如果(A)中1的个数为奇数,所有的二极管发光;如果全0,则只让VD0-VD3发光;否则全灭。,单分支程序举例,21,ORG 0200H JB P,JISHU JZ QUAN MOV P2,#00H SJMP TOendJISHU:MOV P2,#0FFH SJMP TOendQUAN:MOV P2,#0FHTOend:SJMP$END,流程图:,源程序:,判断奇偶标志位的值,判断(A)的值是否为0,(A)有偶数个1,二极管灭,(A)有奇数个1,二极管全亮,(A)为0,VD0-VD3亮,注意:在MCS-51单片机中,实现单分支常用的指令有:JZ、
10、JNZ、DJNZ、CJNE、JC、JNC、JB、JNB、JBC等。,虚线框代表一个单分支,22,双分支程序设计例:内部RAM的40H单元和50H单元各存放了一个8位无符号数,请比较这两个数的大小,比较结果用发光二极管显示(LED为低有效):若(40H)(50H),则P1.0管脚连接的LED1发光;若(40H)(50H),则P1.1管脚连接的LED2发光。,23,题意分析:本例是典型的分支程序,根据两个无符号数的比较结果(判断条件),分别点亮相应的发光二极管。比较两个无符号数常用的方法是将两个数相减,然后判断有否借位CY。若CY=0,无借位,则XY;若CY=1,有借位,则XY。程序的流程图如下图
11、所示。,24,两数比较流程图,25,源程序如下:X DATA 40H;数据地址赋值伪指令DATA Y DATA 50H ORG1000H MOV A,X;(X)A CLRC;CY=0 SUBBA,Y;带借位减法,A-(Y)-CYA,26,JC L1;CY=1,转移到L1 CLRP1.0;CY=0,(40H)(50H),点亮P1.0 连 接的LED1 SJMP FIN;直接跳转到结束等待 L1:CLR P1.1;(40H)(50H),点亮P1.1接的LED2 FIN:SJMP$END,27,多分支程序举例,例:在某单片机系统中,按下一按键,键值(代表哪个键被按下)存放在内部RAM的40H单元内。
12、设计一段程序实现功能:如果(40H)=00H,调用子程序SUB1;如果(40H)=01H,调用子程序SUB2;如果(40H)=02H,调用子程序SUB3;如果(40H)=03H,调用子程序SUB4;如果(40H)=04H,调用子程序SUB5。,28,流程图,29,程序清单,MOV 40H,A MOV DPTR,#TAB RL A ADD A,40H JMP A+DPTR TAB:LCALL SUB1 LCALL SUB2 LCALL SUB3 LCALL SUB4 LCALL SUB5,设定表格首地址,40H3 传送给A,查表转移,转移地址表,30,循环程序设计,循环程序设计,循环程序的特点是
13、程序中含有可以重复执行的程序段,该程序段通常称为循环体。例如,求100个数的累加和是没有必要连续安排100条加法指令的,可以只用一条加法指令并使之循环执行100次。循环程序设计不仅可以大大缩短所编程序长度和使程序所占存储单元数最少,也能使程序结构紧凑和可读性变好。应注意循环程序设计并不能缩短完成任务的程序执行时间。,循环程序的组成(四部分):.循环初始化 循环初始化程序段位于循环程序开头,用于完成循环前的准备工作,例如:循环体中循环计数器和各工作寄存器设置初值,其中循环计数器用于控制循环次数。,.循环处理 这部分程序位于循环体内,是循环程序的工作程序,需要重复执行。要求编写得尽可能简练,提高程
14、序执行速度。,31,.循环控制 循环控制程序也在循环体内,常常由修改循环计数器内容的语句和条件转移语句等组成,用于控制循环执行次数。,.循环结束 这部分程序用于存放执行循环程序所得结果以及恢复各工作单元循环前的初值。,循环程序通常有两种编制方法:一种是先循环处理后循环控制(即先处理后判断),如图4-3(a)所示;另一种是先循环控制后循环处理(即先判断后处理),如图4-3(b)所示。,32,(a)先处理后判断(b)先判断后处理 循环程序结构类型,33,例1:设计一段程序实现功能:统计(A)中1的个数,把结果存入30H单元中。,循环程序举例,解题思路:要统计1的个数,可以利用RLC指令把A带上Cy
15、循环左移,如果移入Cy的是1,就让(30H)加1,重复8次,可以统计出结果。,MOV 30H,#00H MOV R2,#08H LOOP:RLC A JNC NEXT INC 30H NEXT:DJNZ R2,LOOP,30H赋初始值,置循环次数,移位,判断Cy是否为1,为1则30H自加1,判断是否结束,34,例:将内部RAM单元中20H单元到2FH单元的数传到外部RAM中的2000H到200FH单元中.,R2 10H,R0 20HDPTR 2000H,N,A R0 DPTR AR0(R0)+1DPTR(DPTR)+1,(R2)-1=0?,END,Y,流程图:,35,源程序:ORG 1000H
16、 MOV R0,#20H MOV DPTR,#2000H MOV R2,#10HLOOP:MOV A,R0 MOVX DPTR,A INC R0 INC DPTR DJNZ R2,LOOP SJMP$END,设置进行数据传送的内部和外部RAM的首地址,利用ACC进行数据传送,设定循环次数,RAM地址加“1”,循环次数判定,36,查表程序设计,查表是根据存放在ROM中数据表格的项数来查找和它对应的表中值。方法简便,可缩短程序长度和提高程序执行效率。,注意:MOVC A,A+DPTR指令可以实现64K地址范围内的数据查寻,而MOVC A,A+PC指令只能实现256字节范围内的数据查寻。,例 已知B
17、LOCK1为起始地址的数据块(数据块长度在LEN单元),数块中每个存储单元中的高、低4位分别为两个十六进制数,请编程把它们转换为相应ASCII码,并存放在BLOCK2开始的连续存储单元(低4位ASCII码在前,高4位ASCII码在后)。,37,解:由于每个存储单元中放有两个十六进制数,因此每个存储单元中十六进制数应分别转换成ASCII码。这就需要两次使用查表指令MOVC A,A+PC,这两条查表指令在程序中位置是不相同的,故两次对PC调整的值也不相同。在编程时,可以先把整个程序编完,然后再计算两条加法指令中的data修正值并填入相应位置。,相应参考程序为:ORG 1000H LEN DATA
18、30H BLOCK1 DATA 31H BLOCK2 DATA 51H MOV R0,#BLOCK1;BLOCK1送R0 MOV R1,#BLOCK2;BLOCK2送R1 LOOP:MOV A,R0;取源数据块中数 ANL A,#0FH;取出低4位,38,ADD A,#17;第一次地址调整 MOVC A,A+PC;第一次查表 MOV R1,A;存第一次转换结果 MOV A,R0;重新取出被转换数 SWAP A;高4位调入低4位 ANL A,#0FH;取出低4位 ADD A,#09;第二次地址调整 MOVC A,A+PC;第二次查表 INC R1;修改目的数据块指针 MOV R1,A;存第二次转
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 单片机 培训 汇编语言 程序设计
链接地址:https://www.31ppt.com/p-5939916.html