收藏 分享(赏)

【单片机课程设计】第04章 汇编语言程序设计.ppt

上传人:鼎天工程图书馆 文档编号:20235718 上传时间:2023-12-08 格式:PPT 页数:66 大小:538KB
下载 相关 举报
【单片机课程设计】第04章 汇编语言程序设计.ppt_第1页
第1页 / 共66页
【单片机课程设计】第04章 汇编语言程序设计.ppt_第2页
第2页 / 共66页
【单片机课程设计】第04章 汇编语言程序设计.ppt_第3页
第3页 / 共66页
【单片机课程设计】第04章 汇编语言程序设计.ppt_第4页
第4页 / 共66页
亲,该文档总共66页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、 算术运算程序设计算术运算程序设计汇编语言程序的结构汇编语言程序的结构汇编语言概述汇编语言概述第4章 汇编语言程序设计 非数值操作程序设计非数值操作程序设计第4章 汇编语言程序设计第一节 汇编语言概述4.14.1汇编语言概述汇编语言概述汇编语言是面向机器硬件的语言,要求程序汇编语言是面向机器硬件的语言,要求程序设计者对设计者对MCS-51MCS-51单片机具有很好的单片机具有很好的“软,硬软,硬结合结合”的功底。的功底。第4章 汇编语言程序设计1.汇编语言与汇编的概念汇编语言与汇编的概念1.1.机器语言机器语言 (machine languagemachine language)2.2.汇编语

2、言汇编语言 (assembly languageassembly language)由助记符、保留字和伪指令等组成,容由助记符、保留字和伪指令等组成,容易被人们识别、记忆和读写,也称为符号易被人们识别、记忆和读写,也称为符号语言或汇编语言。将汇编语言程序转换成语言或汇编语言。将汇编语言程序转换成为二进制代码表示的机器语言程序称为汇为二进制代码表示的机器语言程序称为汇编程序。经汇编程序编程序。经汇编程序“汇编汇编(翻译翻译)”)”得到得到的机器语言程序称为目标程序,原来的汇的机器语言程序称为目标程序,原来的汇编语言程序称为源程序。编语言程序称为源程序。3.3.高级语言高级语言 (high-lev

3、el language)(high-level language)第一节 汇编语言概述第4章 汇编语言程序设计2.汇编语言源程序的格式汇编语言源程序的格式 采用汇编语言编写的程序称为汇编语采用汇编语言编写的程序称为汇编语言源程序。程序不能被计算机直接识别和言源程序。程序不能被计算机直接识别和执行,需人工或机器翻译成机器语言才能执行,需人工或机器翻译成机器语言才能被计算机执行。为了使机器能识别和正确被计算机执行。为了使机器能识别和正确汇编,用户在程序设计时必须严格遵循汇汇编,用户在程序设计时必须严格遵循汇编语言格式和语法规则,才能编写符合要编语言格式和语法规则,才能编写符合要求的汇编语言源程序。

4、求的汇编语言源程序。对MCS-51来说,汇编语言源程序有两种基本类型:指令语句和伪指令语句指令语句和伪指令语句。第一节 汇编语言概述第4章 汇编语言程序设计(1)指令语句)指令语句已在第已在第3 3章介绍每一条指令语句在汇编时都产章介绍每一条指令语句在汇编时都产生一个指令代码生一个指令代码机器代码。机器代码。(2)伪指令语句)伪指令语句是为汇编服务的,在汇编时没有机器代码与之是为汇编服务的,在汇编时没有机器代码与之对应。对应。第一节 汇编语言概述第4章 汇编语言程序设计(3 3)MCS-51MCS-51的汇编语言中每条语句典型的四分段格式的汇编语言中每条语句典型的四分段格式 标号字段:标号字段

5、:操作码字段操作码字段 ,操作数字段,操作数字段 ;注释字段;注释字段规则:规则:标号字段和操作字码段之间要有冒号标号字段和操作字码段之间要有冒号“:”相隔;相隔;2)2)操作码字段和操作数字段间的分界符是空格;操作码字段和操作数字段间的分界符是空格;3)3)双操作数之间用逗号相隔;双操作数之间用逗号相隔;4)4)操作数字段和注释字段之间的分界符用分号操作数字段和注释字段之间的分界符用分号“;”相隔。相隔。操作码字段为必选项操作码字段为必选项,其余各段为任选项。其余各段为任选项。第一节 汇编语言概述第4章 汇编语言程序设计(3 3)MCS-51MCS-51的汇编语言中每条语句典型的四分段格式的

6、汇编语言中每条语句典型的四分段格式 例:例:ORG 0080HORG 0080H START START:MOV AMOV A,#00H#00H;0A0A MOV R1 MOV R1,#0AH#0AH;10R110R1 MOV R2 MOV R2,#00000011B#00000011B;3R23R2 LOOP LOOP:ADD AADD A,R2 R2;A+R2AA+R2A DJNZ R1 DJNZ R1,LOOPLOOP;R1R1内容减内容减1 1不为零,则循环不为零,则循环 NOPNOP HERE HERE:SJMP HERESJMP HERE END END程序共由程序共由9 9条语句

7、组成,第条语句组成,第1 1、9 9两条是指示性语句两条是指示性语句(伪指令),其余为指令性语句。第(伪指令),其余为指令性语句。第2 2、5 5两条是四两条是四分段齐全的语句,第分段齐全的语句,第3 3、4 4、6 6、7 7等四条是缺省标号等四条是缺省标号段的语句,第段的语句,第7 7、9 9两条只有操作码字段。两条只有操作码字段。第一节 汇编语言概述第4章 汇编语言程序设计(4 4)基本语法规则)基本语法规则 1)1)标号字段标号字段 位于一条语句的开头,是语句位于一条语句的开头,是语句所在内存单元地址的标志符号。所在内存单元地址的标志符号。(1)(1)标号后边必须跟以冒号标号后边必须跟

8、以冒号“:”;(2)(2)由由1 18 8个个ASCIIASCII字符组成字符组成(3)(3)同一标号在一个程序中只能定义一次同一标号在一个程序中只能定义一次 (4)(4)不能使用汇编语言已经定义的符号作为标不能使用汇编语言已经定义的符号作为标号号第一节 汇编语言概述第4章 汇编语言程序设计(4 4)基本语法规则)基本语法规则 2)2)操作码字段操作码字段 是指令的保留字(如上述程序是指令的保留字(如上述程序中的中的MOVMOV、ADDADD和和NOPNOP等),也可以是伪指令和等),也可以是伪指令和宏指令的助记符宏指令的助记符(如如ORGORG和和END)END)。汇编语言指令。汇编语言指令

9、中唯一不能空缺的部分,汇编程序就是根据这中唯一不能空缺的部分,汇编程序就是根据这一字段来生成机器代码的。一字段来生成机器代码的。第一节 汇编语言概述第4章 汇编语言程序设计(4 4)基本语法规则)基本语法规则 3)3)操作数字段操作数字段 用于存放指令的操作数或操作数用于存放指令的操作数或操作数地址,可以采用字母和数字等形式。通常有单操地址,可以采用字母和数字等形式。通常有单操作数,双操作数和无操作数三种情况。如果是双作数,双操作数和无操作数三种情况。如果是双操作数,则操作数之间,要以逗号隔开。操作数,则操作数之间,要以逗号隔开。(1)(1)十六进制、二进制和十进制形式的操作数表示十六进制、二

10、进制和十进制形式的操作数表示 。(2)(2)工作寄存器和特殊功能寄存器的表示。工作寄存器和特殊功能寄存器的表示。采用工采用工作寄存器和特殊功能寄存器的代号来表示,也可用其作寄存器和特殊功能寄存器的代号来表示,也可用其地址来表示。地址来表示。(3)(3)采用符号采用符号$。美元符号美元符号$常在转移类指令的操作常在转移类指令的操作数字段中使用数字段中使用 用于表示该转移指令操作码所在的存用于表示该转移指令操作码所在的存储单元地址。储单元地址。4 4)注释字段)注释字段 第一节 汇编语言概述第4章 汇编语言程序设计3.伪指令伪指令 指示性语句又称伪指令,简称伪指令。指示性语句又称伪指令,简称伪指令

11、。每种汇编语言都有自己的伪指令,伪每种汇编语言都有自己的伪指令,伪指令和指令是完全不同的,伪指令不是真指令和指令是完全不同的,伪指令不是真正的指令。是用来对汇编语言过程进行某正的指令。是用来对汇编语言过程进行某种控制,或者对符号和标号进行赋值等,种控制,或者对符号和标号进行赋值等,也称为汇编程序控制命令。只有在汇编前也称为汇编程序控制命令。只有在汇编前的源程序中才有伪指令,经过汇编得到目的源程序中才有伪指令,经过汇编得到目标程序标程序(机器代码机器代码),伪指令没有相应的机,伪指令没有相应的机器代码产生。器代码产生。第一节 汇编语言概述第4章 汇编语言程序设计(1 1)汇编起始地址伪指令汇编起

12、始地址伪指令ORG(ORiGin)指令格式:指令格式:ORG 16ORG 16位地址或标号;规定下面的目标程位地址或标号;规定下面的目标程序的起始地址序的起始地址常用于汇编语言源程序或数据块的开头,用一条常用于汇编语言源程序或数据块的开头,用一条ORGORG伪指伪指令来实现规定程序的起始地址。在一个源程序中,可以令来实现规定程序的起始地址。在一个源程序中,可以多次使用多次使用ORGORG指令,用来规定不同程序段的起始地址。但,指令,用来规定不同程序段的起始地址。但,规定的地址必须是从小到大,不容许各程序段之间地址规定的地址必须是从小到大,不容许各程序段之间地址重叠。一个源程序如不用重叠。一个源

13、程序如不用ORGORG规定,则汇编得到的目标程规定,则汇编得到的目标程序将从序将从0000H0000H开始。开始。例:例:ORG 3000HORG 3000HSTARTSTART:MOV AMOV A,#12H#12H;规定标号;规定标号STARTSTART代表地址为代表地址为3000H3000H开始存放。开始存放。第一节 汇编语言概述第4章 汇编语言程序设计(2 2)汇编结束伪指令汇编结束伪指令END(END of assembly)END(END of assembly)指令格式:指令格式:END END ;END END 标号标号 ;ENDEND指令是汇编语言源程序的结束标志,用于指令是

14、汇编语言源程序的结束标志,用于终止源程序的汇编工作。一个源程序只能有一终止源程序的汇编工作。一个源程序只能有一个个ENDEND命令,且位于程序的最后,在命令,且位于程序的最后,在ENDEND以后写以后写的指令,汇编程序都不给予处理。的指令,汇编程序都不给予处理。第一节 汇编语言概述第4章 汇编语言程序设计(3 3)定义字节命令)定义字节命令DB(DefineDB(Define Byte)Byte)指令格式:指令格式:标号:标号:DB DB 八位二进制数表八位二进制数表 ;从标号指定的地址单元开始,定义若干个;从标号指定的地址单元开始,定义若干个8 8位内存单元的内容。位内存单元的内容。例:例:

15、ORG 3000HORG 3000HTABLTABL:DB 30HDB 30H,31H31H,32H32H,33H33H,34H 34H;0 04 4的的ASCIIASCII码码汇编后:汇编后:3000H=30H3000H=30H,3001H=31H 3001H=31H,3002H=32H3002H=32H,3003H=33H3003H=33H,3004H=34H3004H=34H。第一节 汇编语言概述第4章 汇编语言程序设计(4 4)定义数据字命令)定义数据字命令DW(Define Word)DW(Define Word)指令格式:指令格式:标号:标号:DW DW 十六位二进制数表十六位二进

16、制数表 ;从标号指定的地址单元开始,定义若干个;从标号指定的地址单元开始,定义若干个1616位数位数据。一个据。一个1616位数占据两个内存单元,其中,高位数占据两个内存单元,其中,高8 8位位存入低地址字节,低存入低地址字节,低8 8位存入高地址字节。位存入高地址字节。例:例:ORG 3010HORG 3010HTABTAB:DW 1234HDW 1234H,5678H5678H,2010H2010H汇编后从汇编后从3010H3010H开始连续开始连续6 6个存储单元的内容为:个存储单元的内容为:3010H=12H 3010H=12H,3011H=34H 3011H=34H,3012H=56

17、H 3012H=56H,3013H=78H 3013H=78H,3014H=20H 3014H=20H,3015H=10H3015H=10H。第一节 汇编语言概述第4章 汇编语言程序设计(5 5)赋值命令赋值命令EQU(EQUateEQU(EQUate)指令格式:变量名称指令格式:变量名称 EQU EQU 数或汇编符号;将一个数或汇编符号;将一个数或者特定的汇编符号赋予规定的变量名称。数或者特定的汇编符号赋予规定的变量名称。“变量名称变量名称”不是标号,不能用不是标号,不能用“:”来做分来做分隔符。用隔符。用EQUEQU赋值以后的变量可以用做数据地址、赋值以后的变量可以用做数据地址、代码地址、

18、位地址或者单做一个立即数来用。变量代码地址、位地址或者单做一个立即数来用。变量需赋值以后方可以使用,不能先使用后赋值。同时,需赋值以后方可以使用,不能先使用后赋值。同时,变量名称不能和汇编语言关键字同名。变量名称不能和汇编语言关键字同名。例:例:TEST EQU 2010H TEST EQU 2010H 表示标号表示标号TEST=2010HTEST=2010H,在汇编时,凡是遇到标号,在汇编时,凡是遇到标号TESTTEST时,均以时,均以2010H2010H来代替。来代替。第一节 汇编语言概述第4章 汇编语言程序设计4.源程序的汇编源程序的汇编汇编语言源程序汇编语言源程序“翻译翻译”成机器代码

19、成机器代码(指指令代码令代码)的过程称为的过程称为“汇编汇编”。汇编可分为。汇编可分为手工汇编和机器汇编两类:手工汇编和机器汇编两类:(1 1)手工汇编)手工汇编人工查表翻译指令。但遇到的相对转移指令的偏移人工查表翻译指令。但遇到的相对转移指令的偏移量的计算,要根据转移的目标地址计算偏移量,不量的计算,要根据转移的目标地址计算偏移量,不但麻烦,且容易出错。两次汇编过程。但麻烦,且容易出错。两次汇编过程。第一次汇编:确定地址,翻译成各条机器码,字符第一次汇编:确定地址,翻译成各条机器码,字符标号原样写出;标号原样写出;第二次汇编:标号代真,将字符标号用所计算出的第二次汇编:标号代真,将字符标号用

20、所计算出的具体地址值或偏移量代换。具体地址值或偏移量代换。第一节 汇编语言概述第4章 汇编语言程序设计(2 2)机器汇编)机器汇编 用编辑软件进行源程序的编辑。编辑完成后,生用编辑软件进行源程序的编辑。编辑完成后,生成一个成一个ASCIIASCII码文件,扩展名为码文件,扩展名为“.ASM”.ASM”。然后在。然后在微计算机上运行汇编程序,把汇编语言源程序翻译微计算机上运行汇编程序,把汇编语言源程序翻译成机器代码。两次扫描过程。成机器代码。两次扫描过程。第一次扫描:检查语法错误,确定符号名字;建立第一次扫描:检查语法错误,确定符号名字;建立使用的全部符号名字表;每一符号名字后跟一对应使用的全部

21、符号名字表;每一符号名字后跟一对应值(地址或数)。值(地址或数)。第二次扫描:是在第一次扫描基础上,将符号地址第二次扫描:是在第一次扫描基础上,将符号地址转换成地址(代真);利用操作码表将助记符转换转换成地址(代真);利用操作码表将助记符转换成相应的目标码。成相应的目标码。第一节 汇编语言概述第4章 汇编语言程序设计第二节 汇编语言程序的结构4.24.2汇编语言程序的结构汇编语言程序的结构1.1.汇编语言程序设计步骤汇编语言程序设计步骤汇编语言设计一个程序大致上可分为以下几汇编语言设计一个程序大致上可分为以下几个步骤。个步骤。1)1)分析题意,明确要求。解决问题之分析题意,明确要求。解决问题之

22、前,首先要明确所要解决的问题和要达到的前,首先要明确所要解决的问题和要达到的目的、技术指标等。目的、技术指标等。2)2)确定算法。根据实际问题的要求、确定算法。根据实际问题的要求、给出的条件及特点,找出规律性,最后确定给出的条件及特点,找出规律性,最后确定所采用的计算公式和计算方法,这就是一般所采用的计算公式和计算方法,这就是一般所说的算法。算法是进行程序设计的依据,所说的算法。算法是进行程序设计的依据,它决定了程序的正确性和程序的指令。它决定了程序的正确性和程序的指令。第4章 汇编语言程序设计1.1.汇编语言程序设计步骤汇编语言程序设计步骤3)3)画程序流程图,用图解来描述和说明解画程序流程

23、图,用图解来描述和说明解题步骤。题步骤。4)4)分配内存工作单元,确定程序与数据区分配内存工作单元,确定程序与数据区的存放地址。的存放地址。5)5)编写源程序。编写源程序。6)6)程序优化。程序优化。7)7)上机调试、修改和最后确定源程序。上机调试、修改和最后确定源程序。第二节 汇编语言程序的结构第4章 汇编语言程序设计2.2.顺序程序结构顺序程序结构顺序结构程序是一种最简单、最基本的程序顺序结构程序是一种最简单、最基本的程序 (也称为简单程序也称为简单程序 ),它是一种无分支的直,它是一种无分支的直线形程序,按照程序编写的顺序依次执行。线形程序,按照程序编写的顺序依次执行。第二节 汇编语言程

24、序的结构例:编写程序,将外部例:编写程序,将外部RAMRAM单元中单元中40H40H单元单元2 2位位BCDBCD数转换成数转换成ASCIIASCII码,送到内部码,送到内部RAMRAM单元单元60H 60H 61H61H之中。之中。解:根据解:根据ASCIIASCII字符表,十进制数字符表,十进制数0 0 9 9的的ASCIIASCII码和它码和它的的BCDBCD码之间仅相差码之间仅相差30H30H,本题需要把一个字节的两,本题需要把一个字节的两位位BCDBCD数进行拆分,然后分别和数进行拆分,然后分别和30H30H相加,即得到相相加,即得到相应的应的ASCIIASCII码。程序如下:码。程

25、序如下:第4章 汇编语言程序设计2.2.顺序程序结构顺序程序结构第二节 汇编语言程序的结构 ORG 0000H ORG 0000H ADDR1 DATA 0040HADDR1 DATA 0040HADDR2 EQUADDR2 EQUMOV DPTRMOV DPTR,#ADDR1#ADDR1;源地址;源地址 =DPTR=DPTRMOV R0MOV R0,#ADDR2#ADDR2;目标地址;目标地址 =R0 =R0 MOV MOV R0R0,#00H#00H;目标地址单元清零;目标地址单元清零MOVX AMOVX A,DPTRDPTR;源地址单元中;源地址单元中BCDBCD数送数送A AMOV B

26、MOV B,A A;ANL AANL A,#0FH#0FH;ORL AORL A,#30H#30H;完成低位;完成低位BCDBCD数转换数转换MOV MOV R0R0,A A;存入;存入60H60HINC R0INC R0MOV AMOV A,B BANL AANL A,#0F0H#0F0HSWAP ASWAP A;高位;高位BCDBCD数送低数送低4 4位位ORL AORL A,#30H#30H;完成高位;完成高位BCDBCD数转换数转换 MOV MOV R0R0,A A;存入;存入61H61HSJMP$SJMP$ENDEND第4章 汇编语言程序设计3.3.分支程序结构分支程序结构 分支程序

27、的特点是改变程序的执行顺序,分支程序的特点是改变程序的执行顺序,跳过一些指令,去执行另外一些指令。应注意:跳过一些指令,去执行另外一些指令。应注意:对每一个分支都要单独编写一段程序,每一分对每一个分支都要单独编写一段程序,每一分支的开始地址赋给一个标号。支的开始地址赋给一个标号。在编写分支程序时,关键是如何判断分支在编写分支程序时,关键是如何判断分支的条件。在的条件。在MCS-51MCS-51系列单片机中可以直接用来系列单片机中可以直接用来判断分支条件的指令并不多,只有累加器为零判断分支条件的指令并不多,只有累加器为零(或不为零)、比较条件转移指令(或不为零)、比较条件转移指令CJNECJNE

28、等,等,MCS-51MCS-51单片机还提供了位条件转移指令,如单片机还提供了位条件转移指令,如JCJC,JBJB等。把这些指令结合在一起使用,就可以等。把这些指令结合在一起使用,就可以完成各种各样的条件判断。完成各种各样的条件判断。第二节 汇编语言程序的结构第4章 汇编语言程序设计3.3.分支程序结构分支程序结构第二节 汇编语言程序的结构例:设计比较两个无符号例:设计比较两个无符号8 8位位二进制数大小,并将较大数二进制数大小,并将较大数存入高地址中的程序。设两存入高地址中的程序。设两数分别存入数分别存入30H30H和和31H31H中。并中。并设设(30H)=42H(30H)=42H,(31

29、H)=30H(31H)=30H。解:程序流程图如图所示,解:程序流程图如图所示,为选择结构程序中的单分支为选择结构程序中的单分支程序流程图。汇编语言程序程序流程图。汇编语言程序如下:如下:第4章 汇编语言程序设计3.3.分支程序结构分支程序结构第二节 汇编语言程序的结构解:解:ORGORG0000H0000HLJMPLJMPSTARSTARORGORG2000H2000HSTARSTAR:MOV MOV 30H30H,#42H#42H;30H42H30H42HMOV MOV 31H31H,#30H#30H ;31H30H31H30H CLR CLR C C;C0C0 MOV MOVA A,30

30、H30H ;A30HA30H SUBB SUBBA A,31H31H;作减法比较两数;作减法比较两数 JC JC NEXTNEXT ;31H30H31H30H转转 MOV MOV A A,30H30H;30H30H大则大则 XCH XCH A A,31H 31H ;大数存入;大数存入31H31H中中 MOVMOV30H30H,A A;小数存入;小数存入30H30H中中NEXTNEXT:SJMPSJMP$END END第4章 汇编语言程序设计4.4.循环程序结构循环程序结构顺序程序和分支程序中的指令,最多只执行顺序程序和分支程序中的指令,最多只执行一次。在实际问题中重复地做某些事的情况一次。在实

31、际问题中重复地做某些事的情况是很多的,用计算机来做这些事就要重复地是很多的,用计算机来做这些事就要重复地执行某些指令。重复地执行某些指令,最好执行某些指令。重复地执行某些指令,最好用循环程序实现。用循环程序实现。第二节 汇编语言程序的结构第4章 汇编语言程序设计4.4.循环程序结构循环程序结构循环程序一般由循环程序一般由4 4部分组成。部分组成。(1 1)置循环初值。即设置循环过程中有关)置循环初值。即设置循环过程中有关工作单元的初始值,如置循环次数、地址指工作单元的初始值,如置循环次数、地址指针及工作单元清零等。针及工作单元清零等。(2 2)循环体。即循环的工作部分,完成主)循环体。即循环的

32、工作部分,完成主要的计算或操作任务,是重复执行的程序段。要的计算或操作任务,是重复执行的程序段。(3 3)循环修改。每循环一次,就要修改循)循环修改。每循环一次,就要修改循环次数、数据及地址指针等。环次数、数据及地址指针等。(4 4)循环控制。根据循环结束条件,判断)循环控制。根据循环结束条件,判断是否结束循环。是否结束循环。第二节 汇编语言程序的结构第4章 汇编语言程序设计4.4.循环程序结构循环程序结构第二节 汇编语言程序的结构第4章 汇编语言程序设计4.4.循环程序结构循环程序结构第二节 汇编语言程序的结构例:多个单字节数求知。例:多个单字节数求知。已知有已知有1010个单字节数,依次存

33、放在内部个单字节数,依次存放在内部RAM RAM 40H40H单元开始的数据存储区中,求和并将结果单元开始的数据存储区中,求和并将结果存人寄存器存人寄存器R2R2、R3R3中中(高位存高位存R2R2,低位存,低位存R3)R3)。解:要重复进行加法运算,因此采用循环结构程序。解:要重复进行加法运算,因此采用循环结构程序。循环次数就是数据块字节数,这是已知的。在置初值循环次数就是数据块字节数,这是已知的。在置初值时,将数据块长度置人寄存器时,将数据块长度置人寄存器R5R5;将数据块首地址送;将数据块首地址送人寄存器人寄存器R0R0,即以,即以R0R0作为数据块的地址指针,采用间作为数据块的地址指针

34、,采用间接寻址方式:每做一次加法之后,修改地址指针,以接寻址方式:每做一次加法之后,修改地址指针,以便取出下一个数来相加,并且使计数器便取出下一个数来相加,并且使计数器R5R5减减l l。到。到R5R5减为减为0 0时,求和结束。时,求和结束。:第4章 汇编语言程序设计4.4.循环程序结构循环程序结构第二节 汇编语言程序的结构解:解:ORG 2000H SUM:MOV R0,#40H;设地址指针 MOV R5,#0AH;计数器初值送R5 SUM:MOV A,#00H MOV R2,A LP:ADD A,R0 JNC LP1 INC R2;若有进位,和的高八位+1 LP1:INC R0;地址指针

35、+1 DJNZ R5,LP;判循环结束条件 MOV R3,A;存和的低八位 END 第4章 汇编语言程序设计4.4.循环程序结构循环程序结构第二节 汇编语言程序的结构例:已知内部例:已知内部RAMRAM的的BLOCKBLOCK单元开始有一无符号单元开始有一无符号数据块,块长在数据块,块长在LENLEN单元。请编出求数据块中单元。请编出求数据块中各数累加和、并存入各数累加和、并存入SUMSUM单元的程序。单元的程序。为了使读者对两种循环结构有一个全面了解,为了使读者对两种循环结构有一个全面了解,以便进行分析比较,现给出两种设计方案。以便进行分析比较,现给出两种设计方案。求累加和参考程序:求累加和

36、参考程序:第4章 汇编语言程序设计4.4.循环程序结构循环程序结构第二节 汇编语言程序的结构解:解:1.先判断后处理(见图先判断后处理(见图4-6(a))ORG 1000H LEN DATA 20HSUM DATA 21HBLOCK DATA 22H CLR A ;A清零清零 MOV R2,LEN ;块长送;块长送R2 MOV R1,#BLOCK ;块始地址送;块始地址送R1 INC R2 ;块长;块长+1 SJMP CHECKLOOP:ADD A,R1 ;A+(R1)送送A INC R1 ;修改数据块指针;修改数据块指针R1CHECK:DJNZ R2,LOOP ;若未完,则转;若未完,则转L

37、OOP MOV SUM,A ;存累加和;存累加和 SJMP$END第4章 汇编语言程序设计4.4.循环程序结构循环程序结构第二节 汇编语言程序的结构解:解:2先处理后判断(见图先处理后判断(见图4-6(b))ORG 1000H LEN DATA 20H SUM DATA 21H BLOCK DATA 22H CLR A ;A清零清零 MOV R2,LEN ;块长送;块长送R2 MOV R1,#BLOCK ;数据始地址送;数据始地址送R1 NEXT:ADD A,R1 ;A+(R1)送送A INC R1 ;修改数据块指针;修改数据块指针R1 DJNZ R2,NEXT ;若未完,则转;若未完,则转N

38、EXT MOV SUM,A ;存累加和;存累加和 SJMP$END第4章 汇编语言程序设计5.5.主程序调用子程序结构主程序调用子程序结构 汇编语言编程时,应考虑到恰当地使用子程汇编语言编程时,应考虑到恰当地使用子程序,使整个程序的结构清楚,而且阅读和理解序,使整个程序的结构清楚,而且阅读和理解方便。使用子程序还可以减少源程序和目标程方便。使用子程序还可以减少源程序和目标程序的长度。在多次调用同样的程序段时,采用序的长度。在多次调用同样的程序段时,采用子程序就不必每次重复书写同样的指令,而只子程序就不必每次重复书写同样的指令,而只需书写一次。当然从程序的执行来看,每调用需书写一次。当然从程序的

39、执行来看,每调用一次子程序都要附加保护断点、进栈和出栈等一次子程序都要附加保护断点、进栈和出栈等操作,增加程序的执行时间。但一般来说,付操作,增加程序的执行时间。但一般来说,付出这些代价总是值得的。出这些代价总是值得的。在汇编语言源程序中使用子程序时,一般要在汇编语言源程序中使用子程序时,一般要注意两个问题:参数传递和现场保护注意两个问题:参数传递和现场保护 第二节 汇编语言程序的结构第4章 汇编语言程序设计5.5.主程序调用子程序结构主程序调用子程序结构第二节 汇编语言程序的结构参数传递一般可采用以下方法:参数传递一般可采用以下方法:传递数据。传递数据。传送地址。传送地址。通过堆栈传递参数。

40、通过堆栈传递参数。通过位地址传送参数通过位地址传送参数。第4章 汇编语言程序设计5.5.主程序调用子程序结构主程序调用子程序结构第二节 汇编语言程序的结构例:设计一程序,由它的主程序循环调用子程例:设计一程序,由它的主程序循环调用子程序序SHYSHY。子程序。子程序SHYSHY使连接到单片机使连接到单片机P1P1口上的口上的8 8个个LEDLED灯中的某个闪烁灯中的某个闪烁5 5次。主程序中的指令次。主程序中的指令RL RL A A将确定某个将确定某个LEDLED灯闪烁。灯闪烁。解:本例中的子程序入口地址是标号解:本例中的子程序入口地址是标号SHYSHY地址,子程地址,子程序返回指令是序返回指

41、令是RETRET,主程序调用该子程序的调用指令,主程序调用该子程序的调用指令是是ACALL SKYACALL SKY。为观察到。为观察到LEDLED灯的闪烁,要求状态时钟灯的闪烁,要求状态时钟信号频率低,为此,单片机可采用频率很低的外部振信号频率低,为此,单片机可采用频率很低的外部振荡器信号。荡器信号。第4章 汇编语言程序设计5.5.主程序调用子程序结构主程序调用子程序结构第二节 汇编语言程序的结构解:解:ORG 0000HORG 0000H MOV A MOV A,#0FEH#0FEH ;灯亮初值;灯亮初值STARSTAR:ACALL SKY ACALL SKY ;调用闪烁子程序;调用闪烁子

42、程序 RL A RL A ;左移;左移 SJMP STAR SJMP STAR ;短跳到;短跳到STAR,STAR,循环循环;以上程序段为主程序以上程序段为主程序,以下程序段为子程序,标号以下程序段为子程序,标号SHYSHY为其入口为其入口SKYSKY:MOV R2MOV R2,#5#5 ;闪烁子程序,闪烁;闪烁子程序,闪烁5 5次计数次计数SKY1SKY1:MOV P1MOV P1,A A ;点亮;点亮 NOP NOP ;延时;延时 MOV P1MOV P1,#0FFH#0FFH ;熄灭;熄灭 NOPNOP ;延时;延时 DJNZ R2DJNZ R2,SHY1 SHY1;循环;循环 RETR

43、ET ;子程序返回;子程序返回 ENDEND第4章 汇编语言程序设计5.5.主程序调用子程序结构主程序调用子程序结构第二节 汇编语言程序的结构例:将内部数据存储器某一单元中的一个字节例:将内部数据存储器某一单元中的一个字节的十六进制数转换成两位的十六进制数转换成两位ASCIIASCII码,结果存放码,结果存放在内部数据存储器的两个连续单元中。在内部数据存储器的两个连续单元中。假设一个字节的十六进制数在内部数据存储器假设一个字节的十六进制数在内部数据存储器40H40H单元,结果存于单元,结果存于41H41H、42H42H单元中,用堆栈单元中,用堆栈进行参数传递。进行参数传递。第4章 汇编语言程序

44、设计5.5.主程序调用子程序结构主程序调用子程序结构第二节 汇编语言程序的结构解:解:MAINMAIN:MOV SPMOV SP,#55H#55H MOV R1 MOV R1,#41H#41H;R1R1为存结果指针为存结果指针 MOV AMOV A,40H 40H;取要转换的数据;取要转换的数据 SWAP A SWAP A;先转换高位字节;先转换高位字节 PUSH ACC PUSH ACC;压栈;压栈 LCALL HEASC LCALL HEASC;调用低半字节转换成;调用低半字节转换成 第4章 汇编语言程序设计5.5.主程序调用子程序结构主程序调用子程序结构第二节 汇编语言程序的结构解:解:

45、ASCIIASCII码程序码程序 POP ACC POP ACC;要转换的数据出栈要转换的数据出栈 MOV R1 MOV R1,A A ;存高半字节转换结果;存高半字节转换结果 INC R1 INC R1 PUSH 40H LCALL HEASC PUSH 40H LCALL HEASC POP ACC POP ACC MOV MOV R1R1,A A;存低半字节转换结果;存低半字节转换结果 END END HEASCHEASC:MOV R0MOV R0,SP SP DEC R0 DEC R0 DEC R0 DEC R0 XCH A XCH A,R0 R0;取被转换数据;取被转换数据 AND

46、AAND A,#0FH#0FH;保留低半字节;保留低半字节 ADD AADD A,#2#2;修改;修改A A MOVC A MOVC A,A+PC A+PC;查表;查表 XCH AXCH A,R0 R0;结果送回堆栈;结果送回堆栈 RETRETTABTAB:DB 30HDB 30H,31H31H,32H32H,第4章 汇编语言程序设计第三节 算术运算程序设计4.34.3算术运算程序设计算术运算程序设计1.1.加法程序加法程序 5151指令系统中有加、减、乘、除、加指令系统中有加、减、乘、除、加1 1、减减1 1等指令,可通过设计程序来处理一般不等指令,可通过设计程序来处理一般不大复杂的算术运算

47、。设计中要注意程序执行大复杂的算术运算。设计中要注意程序执行对对PSWPSW的影响。的影响。多字节加、减运算是应用程序设计中经常要进多字节加、减运算是应用程序设计中经常要进行的一种运算,加、减运算程序可以分为无符行的一种运算,加、减运算程序可以分为无符号多字节数加减运算和带符号多字节数加减运号多字节数加减运算和带符号多字节数加减运算程序两种。算程序两种。第4章 汇编语言程序设计1.1.加法程序加法程序例:两个无符号双字节数相加。例:两个无符号双字节数相加。设被加数存放在内部存储器设被加数存放在内部存储器 40H 40H(高位字(高位字节)、节)、41H 41H(低位字节)单元,加数存放在内(低

48、位字节)单元,加数存放在内部存储器部存储器50H 50H(高位字节)、(高位字节)、51H 51H(低位字节)(低位字节)单元,和存入单元,和存入 40H 40H(高位字节)、(高位字节)、41H 41H(低(低位字节)单元。位字节)单元。第三节 算术运算程序设计第4章 汇编语言程序设计1.1.加法程序加法程序解:解:ORG 0000H ORG 0000H CLR C CLR C;将;将 C C 清零清零 MOV R0 MOV R0,#41H#41H;送被加数首址;送被加数首址 MOV R1 MOV R1,#51H#51H;送加数首址;送加数首址 MOV A MOV A,R0 R0;取被加数低

49、字节;取被加数低字节 ADD A ADD A,R1 R1;两个低字节相加;两个低字节相加 MOV MOV R0 R0,A A;低字节和存人被加数低字节;低字节和存人被加数低字节 DEC R0 DEC R0;修改指针,指向被加数高字节;修改指针,指向被加数高字节 DEC R1 DEC R1;修改指针,指向加数高字节;修改指针,指向加数高字节 MOV A MOV A,R0 R0;取被加数高字节;取被加数高字节 ADDC A ADDC A,R1 R1;高字节相加;高字节相加 MOV MOV R0 R0,A A;存结果;存结果 ENDEND 第三节 算术运算程序设计第4章 汇编语言程序设计1.1.加法

50、程序加法程序例:设在例:设在BLOCKBLOCK和和BLOCK+1BLOCK+1单元中有两个补码形单元中有两个补码形式的带符号数。请编出求两数之和,并把它放式的带符号数。请编出求两数之和,并把它放在在SUMSUM和和SUM+1SUM+1单元(低单元(低8 8位在位在SUMSUM单元)的子程单元)的子程序。序。解:解:在两个在两个8 8位二进制带符号数相加时,其和很可能会超过位二进制带符号数相加时,其和很可能会超过8 8位位数能表示的范围而需要采用数能表示的范围而需要采用1616位数形式来表示,因此,在进行位数形式来表示,因此,在进行加法时,可以预先把这两个加数扩张成加法时,可以预先把这两个加数

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 材料科学

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:文库网官方知乎号:文库网

经营许可证编号: 粤ICP备2021046453号世界地图

文库网官网©版权所有2025营业执照举报