最新单片机汇编语言程序设计1ppt课件.ppt
《最新单片机汇编语言程序设计1ppt课件.ppt》由会员分享,可在线阅读,更多相关《最新单片机汇编语言程序设计1ppt课件.ppt(66页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、24.1 汇编语言及格式9ORG 0000LJMP M_START ORG 0100HABC: DB 01H,02H,03H,04HM_START:MOV SP,#60H 数据表ABC首地址在0100H而程序在数据之后(0100H+4=0104H)102、定义字节伪指令(1 1)格式:)格式:标号:标号:DB X1, X2, XDB X1, X2, X(2 2)功能:定义字节数据、或字符数据常数。)功能:定义字节数据、或字符数据常数。 其中,其中,DBDB是伪指令,是伪指令,X1X1,X2X2是一个字节数据,或是一个字节数据,或一个字符串。一个字符串。 每个数据占用一个字节;每个数据占用一个字
2、节; 字符串必须用单引号将它括起来,字符串中的每一个字字符串必须用单引号将它括起来,字符串中的每一个字符占用一个字节,用它的符占用一个字节,用它的ASCIIASCII码表示。码表示。11(3)字节定义举例ORG 2000HDATA:DB 01H,02H,ACHAR:DB CDE经过汇编后,由于伪指令经过汇编后,由于伪指令ORG定义定义DATA的首地址为的首地址为2000H,存储器从存储器从2000H开始存放以上两组数据开始存放以上两组数据2000H:01H2001H:02H2003H:41H2004H:43H2005H:44H2006H:45HA的ASCII码字符串中CDE ,每个字符的ASC
3、II码占用一个字节DATA表从2000H开始存放,DATA=2000H,CHAR=2004H123 3、定义双字节伪指令、定义双字节伪指令(1 1)格式:标号:)格式:标号:DW X1DW X1,X2X2,XnXn(2 2)功能:它用于定义)功能:它用于定义1616位的数据。位的数据。(3 3)举例:)举例:ORG 1000HABC:DW 1234H,56H汇编后,数据的存放汇编后,数据的存放1000H: 12H 34H 00H 56H注意:注意:l 对对DWDW定义的双字节数据,高定义的双字节数据,高位在前,低位在后存放。位在前,低位在后存放。l 不足两字节,高位补不足两字节,高位补0 0l
4、 数据可使用数据可使用1616进制、十进制、进制、十进制、八进制、二进制方式进行定义,用八进制、二进制方式进行定义,用后缀区分。没有后缀是默认的十进后缀区分。没有后缀是默认的十进制数据。制数据。12在前34在高位地址134、预留存贮区伪指令(1 1)格式:)格式: :DS DS (2 2)功能:)功能:DS nDS n从标号指定单元开始,预留从标号指定单元开始,预留n n个单元的存贮个单元的存贮区。存储单元的个数由表达式的值确定(常数或者可求值的区。存储单元的个数由表达式的值确定(常数或者可求值的表达式),它可以使一个具体的数值。表达式),它可以使一个具体的数值。(3 3)例)例ORG 300
5、0HORG 3000HSEG : DS 16SEG : DS 16ABC: DB 12H, 34HABC: DB 12H, 34H从从 3000H开始预留开始预留16字节,字节,从从3016开始存放后面定义开始存放后面定义的数据的数据3000H : -3016H : 12H3017H: 23H预留16字节145、符号赋值伪指令格式:符号格式:符号 EQU EQU 数值或汇编符号数值或汇编符号功能:功能:给一个符号赋值。给一个符号赋值。利用该指令,我们可以将具体的地址、或常数,用一个符号地利用该指令,我们可以将具体的地址、或常数,用一个符号地址或符号常数来表示。址或符号常数来表示。(3 3)例:
6、)例:DATA1 EQU 1234DATA1 EQU 1234 INPOT EQU 2000H INPOT EQU 2000H数据常数1234可以用DATA1代替在程序设计中输入端口地址2000H可以用符号代替使用符号的好处是:符号一般定义在程序的头部,或头文件里,使用符号的好处是:符号一般定义在程序的头部,或头文件里,当需要重新分配资源、或修改数据常数时,只需要修改定义部当需要重新分配资源、或修改数据常数时,只需要修改定义部分,不必在整个程序中去查找修改。否则每一处都得修改。分,不必在整个程序中去查找修改。否则每一处都得修改。15EQU 指令还可以将一个汇编符号赋值给另一个符号。指令还可以将
7、一个汇编符号赋值给另一个符号。例如例如 ABC EQU R7 ;符号;符号ABC与寄存器符号与寄存器符号R7等值等值 ;它的具体地址已居于工作寄存;它的具体地址已居于工作寄存 ;器取得选择;器取得选择定义了符号后,在程序设计中,我们就可以使用这些符号。定义了符号后,在程序设计中,我们就可以使用这些符号。例如例如 MOV DPTR, #INPOT MOVX A,DPTR,A从输入端口从输入端口INPOT读入端口状态。读入端口状态。实际上,我们使用的实际上,我们使用的P0P3等符号,也是这样定义的,只不过等符号,也是这样定义的,只不过它是汇编工具软件定义的默认符号。它是汇编工具软件定义的默认符号。
8、166. DATA伪指令(1 1)格式:)格式: 符号符号 DATA DATA 数据或表达式数据或表达式(2 2)与)与EQUEQU基本类似。基本类似。不同的地方是:不同的地方是: EQU EQU 必须先定义后使用,必须先定义后使用,DATADATA则可以先使用后定义则可以先使用后定义(使用的语句在前,定义域据在后)(使用的语句在前,定义域据在后) DATA DATA语句只能将一个数据赋值给一个符号,不能将另一语句只能将一个数据赋值给一个符号,不能将另一个已定义的符号赋值给一个新的符号;个已定义的符号赋值给一个新的符号; 表达式是可以求值的。表达式是可以求值的。177. 位地址符号定义位地址符
9、号定义(1 1)格式:)格式: 符号符号 BIT BIT 位地址位地址(2 2)功能:)功能: 给位地址定义一个符号名给位地址定义一个符号名(3 3)例)例 LED BIT P1.7LED BIT P1.7; POST BIT 00HPOST BIT 00H;位地址;位地址00H00H可以用可以用POSTPOST符号符号注意:也可以使用注意:也可以使用EQUEQU指令定义为地址指令定义为地址 POST EQU 00HPOST EQU 00H 只要程序设计中,将只要程序设计中,将POSTPOST用位操作指令处理。但这用位操作指令处理。但这样对程序的阅读不直观,建议还是使用位地址定义指令样对程序的
10、阅读不直观,建议还是使用位地址定义指令定义为地址,这样设计的程序给人的感觉比较好。定义为地址,这样设计的程序给人的感觉比较好。188. 结束汇编指令194.2 汇编语言程序设计4.2.1 单片机汇编语言程序设计的基本步骤单片机汇编语言程序设计的基本步骤分析问题,确定解决问题的思路和计算方法;分析问题,确定解决问题的思路和计算方法;依据解题思路和算法确定运算步骤和顺序,把运算过程用依据解题思路和算法确定运算步骤和顺序,把运算过程用程序流程框图表示;程序流程框图表示;确定所需数据、工作单元的数量,分配寄存器和存储单元;确定所需数据、工作单元的数量,分配寄存器和存储单元;根据流程图编写程序;根据流程
11、图编写程序;调试程序,发现并修正错误;调试程序,发现并修正错误;固化程序。固化程序。 编写程序的相关说明编写程序的相关说明20举例举例求单字节带符号二进制数的补码。求单字节带符号二进制数的补码。求补码的算法:求补码的算法:资源分配:资源分配:输入数据:在输入数据:在DATA单元单元结果:保存在结果:保存在SULT单元单元使用子程序结构使用子程序结构程序流程图程序流程图开始A(DATA)A0?N除符号位外,A=(A)+1YNEG_F(A)SULT结束A压栈A弹出)(010除符号位补XXXXX21求补码的程序代码复位入口定位在0地址外部中断0入口地址主程序开始地址求补码子程序程序的其它功能22NE
12、GSUB: PUSH ACC MOV A , DATA JNB ACC.7 , NEG_E ;(;(A)0,不需要转换,不需要转换 CLR ACC.7 ;先取反一次,再取反一;先取反一次,再取反一 ;次相当于保存符号为不变;次相当于保存符号为不变 CPL A ADD A , #1NEG_ E : MOV SULT,A ;保存结果;保存结果 POP ACC RET END该行只有注释,为了阅读方便对齐234.2.2 程序的基本结构及程序流程框图1。基本程序结构。基本程序结构 最基本的程序结构:顺序结构、分支结构、循环结构。最基本的程序结构:顺序结构、分支结构、循环结构。 子程序、中断服务程序是一
13、种特殊的程序,它们也是由子程序、中断服务程序是一种特殊的程序,它们也是由以上三种基本结构构成的。这三种结构用流程图表示为:以上三种基本结构构成的。这三种结构用流程图表示为:AB顺序结构判断BBNY分支结构i=初值A修改并判断i YN循环结构242。程序流程框图。程序流程框图 程序设计实际上是程序流程图的设计。程序代码的编制程序设计实际上是程序流程图的设计。程序代码的编制只是依据程序流程图,用一定的程序设计语言来实现程序流只是依据程序流程图,用一定的程序设计语言来实现程序流程图所表达的的程序设计思想。程图所表达的的程序设计思想。 对于一个稍微复杂的程序,先设计流程图,再编写代码,对于一个稍微复杂
14、的程序,先设计流程图,再编写代码,其程序设计效率要高许多,同时程序的质量也会好许多,也其程序设计效率要高许多,同时程序的质量也会好许多,也便于程序的阅读、调试、修改。便于程序的阅读、调试、修改。 要求你们在程序设计时,首先写出算法,然后画出程序要求你们在程序设计时,首先写出算法,然后画出程序流程图,在这之后再编写程序代码。流程图,在这之后再编写程序代码。253。程序流程图的画法 在前面已经接触到了一些程序流程图,它是由一些基本图在前面已经接触到了一些程序流程图,它是由一些基本图框符号,以及表示程序执行方向的有向线段组成。框符号,以及表示程序执行方向的有向线段组成。(1)基本符号)基本符号 程序
15、的开始与结束符号框程序的开始与结束符号框 程序的处理过程符号框程序的处理过程符号框 判断符号框判断符号框 表示程序执行方向的有向线段表示程序执行方向的有向线段 有这些基本符号,就可以画出程序流程框图。还有有这些基本符号,就可以画出程序流程框图。还有一些其它的符号,我们不要求,需要时查相关资料。一些其它的符号,我们不要求,需要时查相关资料。 判断判断26 当一张图不能表示一个完整的程序流程时,可以用多张当一张图不能表示一个完整的程序流程时,可以用多张图表示,这时,出现在不同位置的图,用一个连接符号图表示,这时,出现在不同位置的图,用一个连接符号进行连接,例如进行连接,例如符号AA2第一页AA3第
16、二页2位于不同位置并顺序连接的两个连接符号具有相同的编号。编号可以用数字,也可以用字符串。274。流程图的画法。流程图的画法(1)依据算法,将一个问题分解为一系列的计算、或判断步)依据算法,将一个问题分解为一系列的计算、或判断步骤,用图框符号表示每一步的处理、或判断过程;骤,用图框符号表示每一步的处理、或判断过程;(2)按照算法顺序,用有向线段将这些图框符号表示的处理)按照算法顺序,用有向线段将这些图框符号表示的处理过程连接起来,箭头表示的是处理过程的执行方向。过程连接起来,箭头表示的是处理过程的执行方向。(3)对于判断框,在它的分支出标出条件:用)对于判断框,在它的分支出标出条件:用Y 表示
17、判断结表示判断结果为果为“是是”执行该分支,执行该分支,“N”表示判断结果为非执行;表示判断结果为非执行;(4)对于转移目标,一般应该给出一个符号,作为编写程序)对于转移目标,一般应该给出一个符号,作为编写程序代码是的转移符号地址(标号)。例如前面给出的求补码子代码是的转移符号地址(标号)。例如前面给出的求补码子程序。程序。28开始A(DATA)A0?N除符号位外,A=(A)+1YNEG_E(A)SULT结束A压栈A弹出判断A0转移到NEG_E判断不满足A0则执行负数求补运算NGE_E作为转移地址,例如前面的求补码程序例如前面的求补码程序294.2.3 简单程序设计简单程序设计 简单程序就是不
18、存在转移类指令的程序,程序的执行过简单程序就是不存在转移类指令的程序,程序的执行过程没有转移,严格按照先后顺序,中间没有分支、循环、也程没有转移,严格按照先后顺序,中间没有分支、循环、也不存在子程序的调用。不存在子程序的调用。例例 :将内部数据存储器:将内部数据存储器50H单元中的一个单元中的一个8位二进制数拆开,位二进制数拆开,分成两个分成两个4位数,高四位存入位数,高四位存入61H单元,低四位存入单元,低四位存入60H单元,单元,60H,61H的高的高4位清位清0。 算法很简单:取出所要处理的字节,将它的高算法很简单:取出所要处理的字节,将它的高4位清位清“0”后存后存入入60H,将低,将
19、低4位清位清“0”并将高低并将高低4位做半字节交换后存入位做半字节交换后存入61H。程序流程图:程序流程图:30例4.5 程序流程图程序代码:程序代码:CZCX: MOV R0,#50H ; 源地址源地址 MOV R1,#60H ;目的地址;目的地址 MOV A,R0 ;取源数据取源数据 ANL A,#0FH ;高高4位清位清0 MOV R1,A ;保存低保存低4位位 INC R1 ;修改目的地址修改目的地址 MOV A,R0 ;取源数据;取源数据 ANL A,#0F0H ;低;低4位清位清0 SWAP A ;半字节交换;半字节交换 MOV R1,A ;保存高;保存高4位位 SJMP $ ;在
20、该处无限循环在该处无限循环开始Ro#50HR1#60HA(R0)A(A)FH(R1)(A),R1(R1)+1A(R0)A(A)F0HA半字节交换后,送(R1)结束该符号表示转移到当前指令执行31程序代码:程序代码:CZCX: MOV R0,#50H ; 源地址源地址 MOV R1,#60H ;目的地址目的地址 MOV A,R0 ;取源数据取源数据 ANL A,#0FH ;高高4位清位清0 MOV R1,A ;保存低保存低4位位 INC R1 ;修改目的地址修改目的地址 MOV A,R0 ;取源数据取源数据 ANL A,#0F0H ;低低4位清位清0 SWAP A ;半字节交换半字节
21、交换 MOV R1,A ;保存高保存高4位位 SJMP $ ;在该处无限循环在该处无限循环正常程序设计时,不能有这样的死循环,这个例子只表示前面的代码已完成了所要求的功能。32例4.6 单字节十六进制转换成BCD码 将存放在将存放在56H单元的一个十六进制(二进制)数转换成单元的一个十六进制(二进制)数转换成BCD码。码。 教材上有一种算法,它适合于单字节的运算。教材上有一种算法,它适合于单字节的运算。算法分析:一个十六进制数,其十进制值在算法分析:一个十六进制数,其十进制值在0255之间,一之间,一种算法是:该数除以种算法是:该数除以100,得到的商为十进制的百位数,剩下,得到的商为十进制的
22、百位数,剩下的余数再除以的余数再除以10,得到的商为十进制数的十位,剩下的余数,得到的商为十进制数的十位,剩下的余数(除以(除以1)是十进制数的个位。)是十进制数的个位。 教材上教材上75页给出了该程序。页给出了该程序。 如果是任意位二进制数,这种算法就有困难。如果是任意位二进制数,这种算法就有困难。 我们来看另外一个算法。我们来看另外一个算法。33通用二进制BCD码转换算法710710702.222iiiDbbbb展开后展开后7610.Db bb b对于一个二进制数据对于一个二进制数据34762107621076210772108822.2222(2(.2(2).)2(2(.2(2*0).)
23、Dbbbbbbbbbbbbbb ii次乘2, 7次加b (1或加0)运算次乘2,次加b (1或加0)运算逐步将2提出来,它可以表达为:35对于任意k字节的二进制数据1个字节8位,k个字节,k*8位这是一个非常规则的迭代运算公式,从二进制数的最高位开始利用循环程序可以很方便编出程序,现我们先看简单程序(顺序程序)如何实现。以一字节为例*8 1*8 2210*8 1*8 2210*8 1*8 2210*8 1*8 1*8 1210,*8*822.2222(2(.2(2).)2(2(.2(2*0).)kkkkkkkkkkkDbbbbbbbbbbbbbb ii次乘2,次加b (1或加0)运算另扩充一位
24、0次乘2,次加b (1或加0)运算 36我们可以这样计算我们可以这样计算1. 1. 令令 D D0 0=0=0;2. D2. D1 1=2D=2D0 0+b+b7 7; ; D D2 2=2D=2D1 1+b+b6 6=2(b=2(b7 7)+b)+b6 6 ; ; D D3 3=2D=2D2 2+b+b5 5=2(2b=2(2b7 7+b+b6 6)+b)+b5 5 ; ; D D4 4=2D=2D3 3+b+b4 4; ; D D5 5=2D=2D4 4+b+b3 3; ; D D6 6=2D=2D5 5+b+b2 2; ; D D7 7=2D=2D6 6+b+b1 1; ; D D8 8
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 单片机 汇编语言 程序设计 ppt 课件
限制150内