第3章-汇编程序设计课件_002

上传人:无*** 文档编号:241612354 上传时间:2024-07-09 格式:PPT 页数:47 大小:651.04KB
返回 下载 相关 举报
第3章-汇编程序设计课件_002_第1页
第1页 / 共47页
第3章-汇编程序设计课件_002_第2页
第2页 / 共47页
第3章-汇编程序设计课件_002_第3页
第3页 / 共47页
点击查看更多>>
资源描述
第第3 3章章概概述述MCS-51MCS-51单片机的编程语言可单片机的编程语言可以是汇编语言也可以是高级语言如以是汇编语言也可以是高级语言如C C语言,高级语言编程快捷,但程序长,语言,高级语言编程快捷,但程序长,占用存储空间大,执行慢;汇编语言产占用存储空间大,执行慢;汇编语言产生的目标程序简短,占用存储空间小,生的目标程序简短,占用存储空间小,执行快,能充分发挥计算机的硬件功能。执行快,能充分发挥计算机的硬件功能。无论是高级语言还是汇编语言,源程序无论是高级语言还是汇编语言,源程序都要转换成目标程序机器语言单片都要转换成目标程序机器语言单片机才能执行。机才能执行。支持写入单片机或仿真调试的目标程序有两种文件格式:支持写入单片机或仿真调试的目标程序有两种文件格式:支持写入单片机或仿真调试的目标程序有两种文件格式:支持写入单片机或仿真调试的目标程序有两种文件格式:BINBIN文件和文件和文件和文件和 HEXHEX文件,文件,文件,文件,BINBIN文件是由编译器生成的二进制文件,是程序的机文件是由编译器生成的二进制文件,是程序的机文件是由编译器生成的二进制文件,是程序的机文件是由编译器生成的二进制文件,是程序的机器码,器码,器码,器码,HEX HEX文件是由文件是由文件是由文件是由INTELINTEL公司定义的一种格式,这种格公司定义的一种格式,这种格公司定义的一种格式,这种格公司定义的一种格式,这种格式包括地址、数据和校验码,并用式包括地址、数据和校验码,并用式包括地址、数据和校验码,并用式包括地址、数据和校验码,并用ASCIIASCII码来存储,可供码来存储,可供码来存储,可供码来存储,可供显示和打印。显示和打印。显示和打印。显示和打印。HEXHEX文件需通过符号转换程序文件需通过符号转换程序文件需通过符号转换程序文件需通过符号转换程序OHS51OHS51进行进行进行进行转换两种语言的操作过程见图转换两种语言的操作过程见图转换两种语言的操作过程见图转换两种语言的操作过程见图3-13-1。连接连接/定位器定位器L51汇编语言汇编语言源程序源程序汇编器汇编器A51符号转换程序符号转换程序OHS51绝对地址绝对地址目标程序目标程序.BINC语言程序语言程序浮浮动动地地址址目目标标程程序序编译器编译器C51 HEX图图 3-1 两种语言源程序转换成目标程序两种语言源程序转换成目标程序 汇编:汇编:将汇编语言源程序转换成机器语言目标程序的将汇编语言源程序转换成机器语言目标程序的过程称为汇编。过程称为汇编。(翻译翻译汇编程序:汇编程序:能将汇编语言源程序转换成机器语言目标程序能将汇编语言源程序转换成机器语言目标程序的系统软件称为汇编程序。的系统软件称为汇编程序。(翻译官翻译官 汇编语言源程序:用户用汇编语言助记符编的应用程汇编语言源程序:用户用汇编语言助记符编的应用程序。序。汇编编译的方法有两种:汇编编译的方法有两种:汇编编译的方法有两种:汇编编译的方法有两种:1.1.1.1.手工汇编:手工汇编:手工汇编:手工汇编:人工查指令表,查出程序中每条指令对应人工查指令表,查出程序中每条指令对应人工查指令表,查出程序中每条指令对应人工查指令表,查出程序中每条指令对应的机器代码。早期的计算机使用。的机器代码。早期的计算机使用。的机器代码。早期的计算机使用。的机器代码。早期的计算机使用。2.机器汇编机器汇编 用计算机中的汇编程序对用户源程序进行汇编。用计算机中的汇编程序对用户源程序进行汇编。用机器汇编要提供给汇编一些信息,遵循汇编程序的一用机器汇编要提供给汇编一些信息,遵循汇编程序的一些约定。这些由伪指令指定。些约定。这些由伪指令指定。目前很多公司将编辑器、汇编器、编译器、连接目前很多公司将编辑器、汇编器、编译器、连接/定位器、符号转换程序做成集成软件包,用户进入该集定位器、符号转换程序做成集成软件包,用户进入该集成环境,编辑好程序后,只需点击相应菜单就可以完成成环境,编辑好程序后,只需点击相应菜单就可以完成上述的各步,如上述的各步,如WAVE、KEIL。WAVE、KEIL集成软件的使用见教材附录。集成软件的使用见教材附录。汇编语言源程序设计步骤汇编语言源程序设计步骤1.确定方案和计算方法确定方案和计算方法2.了解应用系统的硬件配置、性能指标。了解应用系统的硬件配置、性能指标。3.建立系统数学模型,确定控制算法和操作步骤。建立系统数学模型,确定控制算法和操作步骤。4.画程序流程图画程序流程图,确定程序的流向。确定程序的流向。5.编制源程序。编制源程序。1合理分配存储器单元和了解合理分配存储器单元和了解I/O接口地址。接口地址。2按功能设计程序,明确各程序之间的相互关系。按功能设计程序,明确各程序之间的相互关系。3用注释行说明程序,便于阅读和修改调试和修改。用注释行说明程序,便于阅读和修改调试和修改。3.2 伪伪 指指 令令 常用伪指令及功能:常用伪指令及功能:常用伪指令及功能:常用伪指令及功能:1.1.起始指令起始指令起始指令起始指令ORG nnORG nn功能:定义程序或数据块的起始地址。功能:定义程序或数据块的起始地址。功能:定义程序或数据块的起始地址。功能:定义程序或数据块的起始地址。指示此语句后指示此语句后指示此语句后指示此语句后面的程序或数据块以面的程序或数据块以面的程序或数据块以面的程序或数据块以nnnn为起始地址,连续存放在程序为起始地址,连续存放在程序为起始地址,连续存放在程序为起始地址,连续存放在程序存储器中。存储器中。存储器中。存储器中。指令地址指令地址指令地址指令地址机器码机器码机器码机器码源程序源程序源程序源程序ORGORG 2000H 2000H 2000H 78 30 2000H 78 30 MAIN MAIN:MOV R0MOV R0,#30H#30H 2002H E6 2002H E6 MOV AMOV A,R0R0 ORG 3000HORG 3000H 3000H 23 3000H 23 TAB TAB:DB 23HDB 23H,100100,A A 3001H 64 3001H 64 3002H 41 3002H 412.2.2.2.字节定义字节定义字节定义字节定义标号:标号:标号:标号:DBDBDBDB字节常数,或字符或表达式字节常数,或字符或表达式字节常数,或字符或表达式字节常数,或字符或表达式功能:指示在程序存储器中以标号功能:指示在程序存储器中以标号功能:指示在程序存储器中以标号功能:指示在程序存储器中以标号为起始地址的单元里存放的数为为起始地址的单元里存放的数为为起始地址的单元里存放的数为为起始地址的单元里存放的数为字节数据八位二进制数。字节数据八位二进制数。字节数据八位二进制数。字节数据八位二进制数。例如例如例如例如LNLNLNLN:DB32DB32DB32DB32,CCCC,25H25H25H25H,-1-1-1-1;LNLNLNLNLN+2LN+2LN+2LN+2地址单元依次存放地址单元依次存放地址单元依次存放地址单元依次存放20H,43H,25H20H,43H,25H20H,43H,25H20H,43H,25H,FFHFFHFFHFFH地址地址地址地址 数据数据数据数据LNLN2020LN+1LN+14343LN+2LN+22525LN+3LN+3FFFF3.3.3.3.字定义字定义字定义字定义标号:标号:标号:标号:DWDWDWDW字常数或表达式字常数或表达式字常数或表达式字常数或表达式作用:指示在程序存储器中以标号为作用:指示在程序存储器中以标号为作用:指示在程序存储器中以标号为作用:指示在程序存储器中以标号为起始地址的单元里存放的数为字数据起始地址的单元里存放的数为字数据起始地址的单元里存放的数为字数据起始地址的单元里存放的数为字数据即即即即16161616位的二进制数,位的二进制数,位的二进制数,位的二进制数,例如:例如:例如:例如:GHGHGHGH:DW1234HDW1234HDW1234HDW1234H,5678H5678H5678H5678H,08080808GHGH12123434GH+2GH+256567878GH+4GH+4000008085.5.5.5.等值指令等值指令等值指令等值指令标号标号标号标号EQUEQUEQUEQU数值表达式数值表达式数值表达式数值表达式表示表示表示表示EQUEQUEQUEQU两边的量等值,用于为标号或标识符赋值。两边的量等值,用于为标号或标识符赋值。两边的量等值,用于为标号或标识符赋值。两边的量等值,用于为标号或标识符赋值。例如:例如:例如:例如:X1X1X1X1EQU2000HEQU2000HEQU2000HEQU2000HX2X2X2X2EQU0FHEQU0FHEQU0FHEQU0FHMAIN:MAIN:MAIN:MAIN:MOVDPTRMOVDPTRMOVDPTRMOVDPTR,#X1;DPTR=2000H#X1;DPTR=2000H#X1;DPTR=2000H#X1;DPTR=2000HADDAADDAADDAADDA,#X2;A=A+0FH#X2;A=A+0FH#X2;A=A+0FH#X2;A=A+0FH4保存字节保存字节 标号:标号:DS 数值表达式数值表达式作作用用:指指示示在在程程序序存存储储器器中中保保存存以以标标号号为为起起始始地地址址的的假设干字节单元,其单元个数由数值表达式指定。假设干字节单元,其单元个数由数值表达式指定。例如例如 L1:DS 32;从从L1地址开始保存地址开始保存32个存储单元。个存储单元。6.6.6.6.位定义位定义位定义位定义 标号标号标号标号 BIT BIT BIT BIT 位地址位地址位地址位地址 作用:作用:作用:作用:同同同同EQUEQU指令,不过定义的是位操作地址。指令,不过定义的是位操作地址。指令,不过定义的是位操作地址。指令,不过定义的是位操作地址。例如例如例如例如。7.汇编结束汇编结束 END作用:作用:指示源程序段结束。指示源程序段结束。END指令放在程序的最后。指令放在程序的最后。A51汇编程序还有一些其它的伪指令,列在教材表汇编程序还有一些其它的伪指令,列在教材表3-1中,以备查阅。中,以备查阅。例例例例3-1 3-1 编程将外部数据存储器的编程将外部数据存储器的编程将外部数据存储器的编程将外部数据存储器的000EH000EH和和和和000FH000FH单元的内容相单元的内容相单元的内容相单元的内容相换。换。换。换。分析分析分析分析:外部数据存储器的数据操作只能用外部数据存储器的数据操作只能用外部数据存储器的数据操作只能用外部数据存储器的数据操作只能用MOVXMOVX指令,且只能指令,且只能指令,且只能指令,且只能和和和和A A之间传送,因此必须用一个中间环节作暂存,设用之间传送,因此必须用一个中间环节作暂存,设用之间传送,因此必须用一个中间环节作暂存,设用之间传送,因此必须用一个中间环节作暂存,设用20H20H单元。用单元。用单元。用单元。用R0R0、R1R1指示两单元的低八位地址,高八位地址由指示两单元的低八位地址,高八位地址由指示两单元的低八位地址,高八位地址由指示两单元的低八位地址,高八位地址由P2P2指示。编程过程如下:指示。编程过程如下:指示。编程过程如下:指示。编程过程如下:常用程序结构常用程序结构 顺序程序、分支程序、循环程序、子程顺序程序、分支程序、循环程序、子程序序3.3 3.3 顺序程序设计顺序程序设计顺序程序设计顺序程序设计顺序结构顺序结构是按照逻辑操作顺序,从某一条指令开始逐条顺序是按照逻辑操作顺序,从某一条指令开始逐条顺序执行,直至某一条指令为止。执行,直至某一条指令为止。ORG 0000HORG 0000H MOV P2,#0H ;MOV P2,#0H ;送地址高八位至送地址高八位至送地址高八位至送地址高八位至P2P2口口口口MOV R0,#0EH ;R0=0EH MOV R0,#0EH ;R0=0EH MOV R1,#0FH ;R1=OFH MOV R1,#0FH ;R1=OFH MOVX A,R0 ;A=(000EH)MOVX A,R0 ;A=(000EH)MOV 20H,A ;(20H)=(000EH)MOV 20H,A ;(20H)=(000EH)MOVX A,R1 ;A=(000FH)MOVX A,R1 ;A=(000FH)XCH A,20H ;A=(000EH),(20H)=(000FH)XCH A,20H ;A=(000EH),(20H)=(000FH)MOVX R1,A MOVX R1,A MOV A,20H MOV A,20H MOVX R0,A ;MOVX R0,A ;交换后的数送各单元交换后的数送各单元交换后的数送各单元交换后的数送各单元SJMP$SJMP$END ENDORG 0000HORG 0000H MOV A MOV A,R4R4 JB ACC.7,CPLL JB ACC.7,CPLL ;判符号位;判符号位;判符号位;判符号位SJMP$;SJMP$;正数的补码原正数的补码原正数的补码原正数的补码原码码码码CPLL:MOV ACPLL:MOV A,R5 R5 ;取低字节;取低字节;取低字节;取低字节 CPL ACPL A ADD A ADD A,#1#1 ;低字节变补;低字节变补;低字节变补;低字节变补MOV R5MOV R5,A A MOV A MOV A,R4 R4 ;取高字节;取高字节;取高字节;取高字节CPL ACPL A ADDC A ADDC A,#0#0 ;高字节变补;高字节变补;高字节变补;高字节变补ORL A,#80H ;ORL A,#80H ;恢复负号恢复负号恢复负号恢复负号MOV R4MOV R4,A A SJMP$SJMP$例例例例3-23-2:将:将:将:将R4R5R4R5双字节有符号数求补码,结果送原双字节有符号数求补码,结果送原双字节有符号数求补码,结果送原双字节有符号数求补码,结果送原单元的程序。单元的程序。单元的程序。单元的程序。例例例例3-3 3-3 分解压缩式分解压缩式分解压缩式分解压缩式BCDBCD码码码码,使其成为非压缩式使其成为非压缩式使其成为非压缩式使其成为非压缩式BCDBCD码。码。码。码。片内片内片内片内RAMRAM42H42H41H41H40H40H6505050606ORG 0000HORG 0000HMOVMOV R0 R0,#40H#40H;设指针;设指针;设指针;设指针MOVMOV A A,R0R0;取一个字节;取一个字节;取一个字节;取一个字节MOVMOV R2 R2,A A;暂存;暂存;暂存;暂存ANLANL A A,#0FH#0FH;清;清;清;清0 0高半字节高半字节高半字节高半字节INCINC R0 R0MOVMOV R0 R0,A A ;保存数据个位;保存数据个位;保存数据个位;保存数据个位MOV A,R2SWAP A ;十位换到低半字节;十位换到低半字节ANL A,#0FHINC R0MOV R0,A;保存数据十位;保存数据十位SJMP$地址地址数据数据TABTAB0 0TAB+1TAB+11 1TAB+2TAB+24 4TAB+3TAB+39 9TAB+4TAB+416H16HTAB+5TAB+525H25H例例3-5 设变量放在片内设变量放在片内RAM的的20H单元单元,其值为其值为00H05H之间之间,要求编查表程序要求编查表程序,查出变量的平方值查出变量的平方值,并放入片内并放入片内RAM的的21H单元。单元。分析分析:在程序存储器安排一张平方表,首地址:在程序存储器安排一张平方表,首地址为为TAB,以,以DPTR指向表首址,指向表首址,A存放变量值,存放变量值,利用查表指令利用查表指令MOVC A,A+DPTR,即可求得。,即可求得。表中数据用表中数据用BCD码存放符合人们的习惯码存放符合人们的习惯.ORG 0000H MOV DPTR,#TAB MOV A,20H MOVC A,A+DPTR;查表查表 MOV 21H,A SJMP$TAB2:DB 00H,01H,04H,09H,16H,25H ENDDPTRA ORG 0000HORG 0000HORG 0000HORG 0000H MOV A MOV A,R2R2 ,N N ;为正数?;为正数?;为正数?;为正数?CPL ACPL A ;负数变补;负数变补;负数变补;负数变补 INC AINC A MOV R2MOV R2,A AN N:SJMP$SJMP$;结束;结束;结束;结束3.4 3.4 3.4 3.4 分支程序的设计分支程序的设计分支程序的设计分支程序的设计由条件转移指令构成程序判断框局部,形成分支结构由条件转移指令构成程序判断框局部,形成分支结构由条件转移指令构成程序判断框局部,形成分支结构由条件转移指令构成程序判断框局部,形成分支结构3.4.1 3.4.1 3.4.1 3.4.1 单分支程序单分支程序单分支程序单分支程序一个判断决策框,两种分支结构图。一个判断决策框,两种分支结构图。一个判断决策框,两种分支结构图。一个判断决策框,两种分支结构图。条件满足条件满足?N影响条件影响条件Y处理段处理段条件满足条件满足?N影响条件影响条件Y处理处理1处理处理2例例例例1 1 1 1 求求求求8 8 8 8位有符号数的绝对值。位有符号数的绝对值。位有符号数的绝对值。位有符号数的绝对值。方法:正数不变,负数变补方法:正数不变,负数变补方法:正数不变,负数变补方法:正数不变,负数变补G3+(G-5)2;当当G5M=G3 ;当;当G5 3G因重复使用,先暂存在因重复使用,先暂存在R2。流程。流程见左见左,程序如下:程序如下:例例例例2222用单片机加重力传感器作磅秤,秤出重量后算用单片机加重力传感器作磅秤,秤出重量后算用单片机加重力传感器作磅秤,秤出重量后算用单片机加重力传感器作磅秤,秤出重量后算出行李运费价格,其秤出的重量以出行李运费价格,其秤出的重量以出行李运费价格,其秤出的重量以出行李运费价格,其秤出的重量以10kg10kg10kg10kg为为为为1 1 1 1个计价单位个计价单位个计价单位个计价单位G,GG,GG,GG,G已存入已存入已存入已存入40H40H40H40H单元。单元。单元。单元。计价方法为计价方法为计价方法为计价方法为50kg50kg50kg50kg以内按以内按以内按以内按3 3 3 3元元元元,50kg50kg50kg50kg以上分段计价以上分段计价以上分段计价以上分段计价:50kg:50kg:50kg:50kg按按按按3 3 3 3元计价,元计价,元计价,元计价,超过局部按超过局部按超过局部按超过局部按2 2 2 2元计价。元计价。元计价。元计价。由此列出算式:由此列出算式:由此列出算式:由此列出算式:ORG0100HORG0100HORG0100HORG0100HFRTFRTFRTFRT:MOVAMOVAMOVAMOVA,40H40H40H40H;取行李重量计价单位;取行李重量计价单位;取行李重量计价单位;取行李重量计价单位G G G GMOVR3MOVR3MOVR3MOVR3,A A A AMOVBMOVBMOVBMOVB,#03H#03H#03H#03H;运费;运费;运费;运费M=G3M=G3M=G3M=G3MULABMULABMULABMULABMOVR2MOVR2MOVR2MOVR2,A A A A;暂存;暂存;暂存;暂存3G3G3G3GMOVAMOVAMOVAMOVA,R3R3R3R3;取回;取回;取回;取回G G G GCJNEACJNEACJNEACJNEA,#05H#05H#05H#05H,L1L1L1L1;G5?G5?G5?G5?SJMPWETCSJMPWETCSJMPWETCSJMPWETCL1L1L1L1:JCWETCJCWETCJCWETCJCWETC;是,转至;是,转至;是,转至;是,转至WETCWETCWETCWETCSUBBASUBBASUBBASUBBA,#05H#05H#05H#05H;否那么;否那么;否那么;否那么M=3G+2(G-5)M=3G+2(G-5)M=3G+2(G-5)M=3G+2(G-5)RLCARLCARLCARLCAADDAADDAADDAADDA,R2R2R2R2MOVR2MOVR2MOVR2MOVR2,A A A AWETCWETCWETCWETC:MOV41HMOV41HMOV41HMOV41H,R2R2R2R2;存运费;存运费;存运费;存运费MMMMRETRETRETRET3.4.2 多分支程序散转程序多分支程序散转程序有一类分支程序有一类分支程序,它根据不同的输入条件或不同的运它根据不同的输入条件或不同的运算结果算结果,转向不同的处理程序转向不同的处理程序,称之为散转程序。称之为散转程序。多分支散转程序的设计多分支散转程序的设计 这类程序通常利用这类程序通常利用JMP A+DPTR间接转移指令实现转移。间接转移指令实现转移。有如下两种设计方法:有如下两种设计方法:1.查转移地址表查转移地址表:将将转移地址转移地址列成表格,将表格的内容作转移的目标地址。列成表格,将表格的内容作转移的目标地址。2.查转移指令表查转移指令表:将转移到不同程序的将转移到不同程序的转移指令转移指令列成表格,判断条件后查表,列成表格,判断条件后查表,转到表中指令执行转到表中指令执行,下面用两个例子说明。下面用两个例子说明。1.1.利用转移地址表实现转移利用转移地址表实现转移利用转移地址表实现转移利用转移地址表实现转移 例例例例3-7 3-7 根据根据根据根据R3R3的内容转向对应的程序,的内容转向对应的程序,的内容转向对应的程序,的内容转向对应的程序,R3R3的内容的内容的内容的内容为为为为0 0n,n,处理程序的入口符号地址分别为处理程序的入口符号地址分别为处理程序的入口符号地址分别为处理程序的入口符号地址分别为PR0PR0PRn(n128)PRn(n128)。分析:将分析:将分析:将分析:将PR0PRnPR0PRn入口地址列在表格中,每一项入口地址列在表格中,每一项入口地址列在表格中,每一项入口地址列在表格中,每一项占两个单元,占两个单元,占两个单元,占两个单元,PRnPRn在表中的偏移量为在表中的偏移量为在表中的偏移量为在表中的偏移量为2n2n,因此将,因此将,因此将,因此将R3R3的内容乘的内容乘的内容乘的内容乘2 2即得即得即得即得PRnPRn在表中的偏移地址,从偏在表中的偏移地址,从偏在表中的偏移地址,从偏在表中的偏移地址,从偏移地址移地址移地址移地址2n2n和和和和2n+12n+1两个单元分别取出两个单元分别取出两个单元分别取出两个单元分别取出PRnPRn的高八的高八的高八的高八位地址和低八位地址送位地址和低八位地址送位地址和低八位地址送位地址和低八位地址送DPTRDPTR存放器,用存放器,用存放器,用存放器,用JMP JMP A+DPTRA+DPTR指令指令指令指令A A先清零即转移到先清零即转移到先清零即转移到先清零即转移到PRnPRn入口入口入口入口执行。执行。执行。执行。这里设这里设这里设这里设PR0-PRnPR0-PRn地址地址地址地址 PR0 EQU 0110H ;PR0 EQU 0110H ;用伪指令定义用伪指令定义用伪指令定义用伪指令定义PRnPRn的具体地址的具体地址的具体地址的具体地址PR1 EQU 0220HPR1 EQU 0220HPR2 EQU 0330HPR2 EQU 0330HORG 0000HORG 0000HMOV A,R3 ;R3AMOV A,R3 ;R3AADD A,ACC ;A*2ADD A,ACC ;A*2MOV DPTR,#TABMOV DPTR,#TABPUSH ACCPUSH ACCMOVC A,A+DPTR;MOVC A,A+DPTR;取地址表中高字节取地址表中高字节MOV B,A ;MOV B,A ;暂存于暂存于B BINC DPLINC DPLPOP ACCPOP ACCMOVC A,A+DPTR;MOVC A,A+DPTR;取地址表中低字节取地址表中低字节MOV DPL,AMOV DPL,AMOV DPH,B ;DPTRMOV DPH,B ;DPTR为表中地址为表中地址CLR A ;A=0CLR A ;A=0JMP A+DPTR ;JMP A+DPTR ;转移转移TABTAB:DW PR0,PR1,PR2,.,PRn;DW PR0,PR1,PR2,.,PRn;转移地址表转移地址表ENDEND0101101002022020.TABTAB+2DPH DPL例如例如 R3=1的操作的操作0220例例2:通过查转移指令表实现多分支程序转移举例。:通过查转移指令表实现多分支程序转移举例。由由40H单元中动态运行结果值来选择分支程序单元中动态运行结果值来选择分支程序 40H0,转处理程序,转处理程序0 40H1,转处理程序,转处理程序1 .40Hn,转处理程序,转处理程序n 其程序段如下:其程序段如下:START:MOV DPTR,ADDR16;多分支转移指令表首址送;多分支转移指令表首址送 ;DPTR MOV A,40H ;40H单元内容送单元内容送A CLR C ;清;清CY RLC A ;A内容左移一位内容左移一位 JNC TABLE ;假设;假设CY0转转TABEL INC DPH ;假设;假设CYl,DPH内容十内容十1 TABEL:JMP A十十DPTR ;多分支转移;多分支转移ADDR16:AJMP LOOP0;转分支程序;转分支程序0 AJMP LOOP1;转分支程序;转分支程序1 AJMP LOOPn;转分支程序;转分支程序n2.2.利用转移指令表实现转移利用转移指令表实现转移利用转移指令表实现转移利用转移指令表实现转移 3.5 循环程序循环程序 典典典典型型型型循循循循环环环环程程程程序序序序包包包包含含含含四四四四局局局局部部部部:初初初初始始始始化化化化局局局局部部部部、循循循循环环环环处处处处理理理理局局局局部部部部、循循循循环环环环控控控控制制制制局局局局部部部部和和和和循循循循环环环环修修修修改改改改局局局局部部部部。下下下下面面面面分分分分别别别别介介介介绍这四个组成局部。绍这四个组成局部。绍这四个组成局部。绍这四个组成局部。1)1)1)1)初初初初始始始始化化化化局局局局部部部部:设设设设置置置置循循循循环环环环开开开开始始始始的的的的初初初初始始始始值值值值,为为为为循循循循环环环环做做做做准备。准备。准备。准备。2)2)2)2)循环处理局部:循环程序中重复执行的内容。循环处理局部:循环程序中重复执行的内容。循环处理局部:循环程序中重复执行的内容。循环处理局部:循环程序中重复执行的内容。3)3)3)3)循环控制局部:判断是否结束循环。循环控制局部:判断是否结束循环。循环控制局部:判断是否结束循环。循环控制局部:判断是否结束循环。4)4)4)4)循循循循环环环环修修修修改改改改局局局局部部部部:修修修修改改改改循循循循环环环环参参参参数数数数,为为为为执执执执行行行行下下下下一一一一次次次次循循循循环做准备。环做准备。环做准备。环做准备。-循环结构循环结构-循环结构循环结构3.5 循环程序循环程序先先执执行行后后判判断断 先先判判断断后后执执行行例例例例3-93-93-93-9设计一个延时设计一个延时设计一个延时设计一个延时10ms10ms10ms10ms的延时子程序,单片机使用的晶的延时子程序,单片机使用的晶的延时子程序,单片机使用的晶的延时子程序,单片机使用的晶振为振为振为振为6MHz6MHz6MHz6MHz。分析分析分析分析 延时时间与两个因素有关延时时间与两个因素有关延时时间与两个因素有关延时时间与两个因素有关:晶振频率和循环次数。晶振频率和循环次数。晶振频率和循环次数。晶振频率和循环次数。由于晶振采用由于晶振采用由于晶振采用由于晶振采用6MHz6MHz6MHz6MHz,一个机器周期是,一个机器周期是,一个机器周期是,一个机器周期是2s2s2s2s,用单循环可以,用单循环可以,用单循环可以,用单循环可以实现实现实现实现1ms1ms1ms1ms延时,外循环延时,外循环延时,外循环延时,外循环10101010次即可达次即可达次即可达次即可达10ms10ms10ms10ms延时。延时。延时。延时。内循环如何实现内循环如何实现内循环如何实现内循环如何实现1ms1ms1ms1ms延时呢,程序中可先以未知延时呢,程序中可先以未知延时呢,程序中可先以未知延时呢,程序中可先以未知数数数数MTMTMTMT代替,从附录代替,从附录代替,从附录代替,从附录A A A A查每条指令机器周期计算程序的执行查每条指令机器周期计算程序的执行查每条指令机器周期计算程序的执行查每条指令机器周期计算程序的执行时间。时间。时间。时间。ORG 0020H ORG 0020H MOV R0 MOV R0,#0AH#0AH ;外循环;外循环;外循环;外循环1010次次次次DL2DL2:MOV R1MOV R1,#MT#MT ;内循环;内循环;内循环;内循环MTMT次次次次DL1DL1:NOP NOP NOP NOP ;空操作指令;空操作指令;空操作指令;空操作指令DJNZ R1DJNZ R1,DL1 DL1 DJNZ R0 DJNZ R0,DL2 DL2 RET RET111122内循环内循环DL1到指令到指令DJNZ R1,DL1的计算:的计算:1+1+22SMT=1000S MT=125=7DH将将7DH代入上面程序的代入上面程序的MT,计算总的延时时间:,计算总的延时时间:1+1+1+1+2125+2*102S假设需要延时更长时间,可以采用多重循环。假设需要延时更长时间,可以采用多重循环。机器周期数机器周期数内内外外例:设单片机晶振频率6M,编写一段程序,大约延时1秒钟。分析:由于DJNZ指令最多的循环次数是256次,而1S256256 约等于15S,晶振频率6MHZ,那么1个机器周期为2S,我们把内循环定为8个机器周期16S。那么16S250250=1S。Delay:MOV R7,#0FAHLOOP:MOV R6,#0FAHLOOP1:NOPNOPNOPNOPNOPNOPDJNZ R6,LOOP1DJNZ R7,LOOP 实际执行时间为:6+2250+2+1250+1=500751个机器周期,需秒。外循环中循环内循环外循环内循环外循环内循环内循环(a)嵌套正确(b)嵌套正确(c)交叉不正确多重循环示意图多重循环示意图 345 H 0A H 32 H 28 H 2B H 1E H 20B H例例3-103-10编写多字节数编写多字节数1010程序。程序。内部内部RAMRAM以以20H20H为首址的一片单元中为首址的一片单元中存放着一个多字节符号数,字节数存放在存放着一个多字节符号数,字节数存放在R7R7中,存放方式为低位字节在低地址,高位字中,存放方式为低位字节在低地址,高位字节在高地址,要求乘节在高地址,要求乘1010后的积仍存放在这一后的积仍存放在这一片单元中。片单元中。分析分析:用:用R1R1作该多字节的地址指针,作该多字节的地址指针,局部积的低位仍存放于本单元,局部积的高局部积的低位仍存放于本单元,局部积的高位存放于位存放于R2R2,以便和下一位的局部积的低位,以便和下一位的局部积的低位相加。以相加。以R7R7作字节数计数。作字节数计数。编程如下:编程如下:ORG0000HORG0000HCLRCCLRC;清进位位;清进位位C CMOVR1MOVR1,#20H#20H;R1R1指示地址指示地址MOVR2MOVR2,#00H#00H;存积的高八位存放器;存积的高八位存放器R2R2清清0 0SH10SH10:MOVA,MOVA,R1R1;取一字节送;取一字节送A AMOVBMOVB,#0AH#0AH;1010送送B BPUSHPSWPUSHPSWMULABMULAB;字节乘;字节乘1010POPPSWPOPPSWADDCAADDCA,R2R2;上次积高八位加本次积低八位;上次积高八位加本次积低八位 MOVR1MOVR1,AA;送原存储单元;送原存储单元MOVR2MOVR2,BB;积的高八位送;积的高八位送R2R2INCR1INCR1;指向下一字节;指向下一字节DJNZR7DJNZR7,SH10SH10;未乘完去;未乘完去SH10SH10,否那么向下执,否那么向下执行行MOVR1MOVR1,BB;存最高字节积的高位;存最高字节积的高位SJMP$SJMP$例如例如例如例如1223650989122365098912236509891223650989比较大小比较大小比较大小比较大小不交换不交换(0)12 23 65 09 1912 23 65 09 19交换交换(1)12 23 09 65 19不交换不交换(0)交换交换(1)12 2312 23 65 09 1965 09 1912 23 09 19 65最大最大交换交换(1)不交换不交换(0)12 23 09 19 65 12 09 23 19 65 交换交换(1)12 09 19 23 65不交换不交换(0)交换交换(1)12 2312 23 09 19 6509 19 6512 09 19 23 65最大最大12 09 19 23 6509 12 19 23 6509 12 19 23 6509 12 19 23 6509 12 19 23 653.6 位操作程序设计位操作程序设计例例例例3-17 3-17 编写一程序编写一程序编写一程序编写一程序,以实现图以实现图以实现图以实现图3-73-7中的逻辑运算电路。中的逻辑运算电路。中的逻辑运算电路。中的逻辑运算电路。MCS-51MCS-51单片机有着优异的位逻辑功能单片机有着优异的位逻辑功能单片机有着优异的位逻辑功能单片机有着优异的位逻辑功能,可以方便可以方便可以方便可以方便的实现各种复杂的逻辑运算的实现各种复杂的逻辑运算的实现各种复杂的逻辑运算的实现各种复杂的逻辑运算.这种用软件替代硬件的方法这种用软件替代硬件的方法这种用软件替代硬件的方法这种用软件替代硬件的方法,可可可可以大大简化甚至完全不用硬件以大大简化甚至完全不用硬件以大大简化甚至完全不用硬件以大大简化甚至完全不用硬件,但比硬件要多花运算时间。但比硬件要多花运算时间。但比硬件要多花运算时间。但比硬件要多花运算时间。其中和分别是端口线上的信息其中和分别是端口线上的信息,TF0和和IE1分别是分别是定时器定时溢出标志和外部中请求标志定时器定时溢出标志和外部中请求标志,25H和和26H分别是分别是两个位地址两个位地址,运算结果由端口线输出运算结果由端口线输出.程序如下:程序如下:ORL C,TF0 MOV F0,C MOV C,IE1 ORL C,/25H ANL C,F0 ANL C,/26H MOV P1.3,C SJMP$例3-15 设累加器设累加器A的各位分别记为的各位分别记为X0X7,编制程序用软件实现下式,编制程序用软件实现下式:Y=X0 0X1 1X2 2+X0 0X1 1X2 2+X0 0X1 1X2 2X3 3+X4 4X5 5X6 6X7 7编程如下:编程如下:编程如下:编程如下:X2 BIT ACC.2 X2 BIT ACC.2 3.7 子程序子程序同同同同一一一一个个个个程程程程序序序序中中中中,往往往往往往往往有有有有许许许许多多多多地地地地方方方方都都都都需需需需要要要要执执执执行行行行同同同同样样样样的的的的一一一一项项项项任任任任务务务务,这这这这时时时时可可可可以以以以对对对对这这这这项项项项任任任任务务务务进进进进行行行行独独独独立立立立的的的的编编编编写写写写,形形形形成成成成一一一一个个个个子子子子程程程程序序序序。在在在在原原原原来来来来的的的的主主主主程程程程序序序序中中中中需需需需要要要要执执执执行行行行该该该该任任任任务务务务时时时时,调调调调用用用用该该该该子子子子程程程程序序序序,执执执执行行行行完完完完后后后后又又又又返返返返回回回回主主主主程程程程序序序序,继继继继续续续续以以以以后后后后的的的的操操操操作作作作,这就是所谓的子程序结构。这就是所谓的子程序结构。这就是所谓的子程序结构。这就是所谓的子程序结构。子子子子程程程程序序序序是是是是构构构构成成成成单单单单片片片片机机机机应应应应用用用用程程程程序序序序必必必必不不不不可可可可少少少少的的的的局局局局部部部部,通通通通过过过过ACALLACALL和和和和LCALLLCALL两两两两条条条条子子子子程程程程序序序序调调调调用用用用指指指指令令令令,可可可可以以以以十十十十分分分分方方方方便地用来调用任何地址处的子程序。便地用来调用任何地址处的子程序。便地用来调用任何地址处的子程序。便地用来调用任何地址处的子程序。子子子子程程程程序序序序节节节节省省省省占占占占用用用用的的的的存存存存储储储储单单单单元元元元,使使使使程程程程序序序序简简简简短短短短、清清清清晰晰晰晰,善善善善于于于于灵灵灵灵活活活活的的的的使使使使用用用用子子子子程程程程序序序序,是是是是程程程程序序序序设设设设计计计计的的的的重重重重要要要要技技技技巧巧巧巧之之之之一一一一。子程序必须以子程序必须以子程序必须以子程序必须以RETRET指令结尾指令结尾指令结尾指令结尾.-子程序子程序3.7 子程序子程序在程序设计过程中,适当地使用子程序具有以下优点:在程序设计过程中,适当地使用子程序具有以下优点:在程序设计过程中,适当地使用子程序具有以下优点:在程序设计过程中,适当地使用子程序具有以下优点:1)1)不必重复编写同样的程序,提高了编码的效率。不必重复编写同样的程序,提高了编码的效率。不必重复编写同样的程序,提高了编码的效率。不必重复编写同样的程序,提高了编码的效率。2)2)缩缩缩缩短短短短了了了了源源源源程程程程序序序序和和和和目目目目标标标标程程程程序序序序的的的的长长长长度度度度,节节节节省省省省了了了了程程程程序序序序存存存存储储储储器的空间。器的空间。器的空间。器的空间。3)3)使程序模块化、通用化,便于阅读、交流和共享。使程序模块化、通用化,便于阅读、交流和共享。使程序模块化、通用化,便于阅读、交流和共享。使程序模块化、通用化,便于阅读、交流和共享。4)4)便于分块调试。便于分块调试。便于分块调试。便于分块调试。子程序中可包括对另外子程序的调用,称为子程序嵌套。子程序中可包括对另外子程序的调用,称为子程序嵌套。子程序中可包括对另外子程序的调用,称为子程序嵌套。子程序中可包括对另外子程序的调用,称为子程序嵌套。在子程序调用过程中须解决以下两个方面的问题:在子程序调用过程中须解决以下两个方面的问题:在子程序调用过程中须解决以下两个方面的问题:在子程序调用过程中须解决以下两个方面的问题:1)1)保护现场和恢复现场。保护现场和恢复现场。保护现场和恢复现场。保护现场和恢复现场。2)2)调用程序与被调用程序之间的参数传递。调用程序与被调用程序之间的参数传递。调用程序与被调用程序之间的参数传递。调用程序与被调用程序之间的参数传递。n n保护现场和恢复现场保护现场和恢复现场保护现场和恢复现场保护现场和恢复现场方方方方法法法法就就就就是是是是在在在在进进进进入入入入子子子子程程程程序序序序时时时时,将将将将需需需需要要要要保保保保护护护护的的的的数数数数据据据据推推推推入入入入堆堆堆堆栈栈栈栈,而而而而空空空空出出出出这这这这些些些些数数数数据据据据所所所所占占占占用用用用的的的的工工工工作作作作单单单单元元元元,供供供供子子子子程程程程序序序序中中中中使使使使用用用用。在在在在返返返返回回回回调调调调用用用用程程程程序序序序之之之之前前前前,再再再再将将将将推推推推入入入入堆堆堆堆栈栈栈栈的的的的数数数数据据据据弹弹弹弹出出出出到到到到原原原原有有有有的的的的工工工工作作作作单单单单元元元元,恢恢恢恢复复复复其其其其原原原原来来来来的的的的状状状状态态态态,使使使使调调调调用用用用程程程程序序序序可可可可以以以以继继继继续续续续往往往往下下下下执行。执行。执行。执行。3.7 子程序子程序-子程序子程序n n参数传递参数传递参数传递参数传递n n子子子子程程程程序序序序调调调调用用用用时时时时,要要要要特特特特别别别别注注注注意意意意主主主主程程程程序序序序与与与与子子子子程程程程序序序序之之之之间间间间的的的的信信信信息息息息交交交交换换换换问问问问题题题题。在在在在调调调调用用用用一一一一个个个个子子子子程程程程序序序序时时时时,主主主主程程程程序序序序应应应应先先先先把把把把有有有有关关关关参参参参数数数数子子子子程程程程序序序序入入入入口口口口条条条条件件件件放放放放到到到到某某某某些些些些约约约约定定定定的的的的位位位位置置置置,子子子子程程程程序序序序在在在在运运运运行行行行时时时时,可可可可以以以以从从从从约约约约定定定定的的的的位位位位置置置置得得得得到到到到有有有有关关关关参参参参数数数数。同同同同样样样样子子子子程程程程序序序序结结结结束束束束前前前前,也也也也应应应应把把把把处处处处理理理理结结结结果果果果出出出出口口口口条条条条件件件件送送送送到到到到约约约约定定定定位位位位置置置置。返返返返回回回回后后后后,主主主主程程程程序序序序便便便便可可可可从从从从这这这这些些些些位位位位置置置置得得得得到到到到需需需需要的结果,这就是参数传递。要的结果,这就是参数传递。要的结果,这就是参数传递。要的结果,这就是参数传递。3.7 子程序子程序-参数传递参数传递参数传递大致可分为以下几种方法:参数传递大致可分为以下几种方法:参数传递大致可分为以下几种方法:参数传递大致可分为以下几种方法:1)1)传传传传递递递递数数数数据据据据 将将将将数数数数据据据据通通通通过过过过工工工工作作作作存存存存放放放放器器器器R0R7R0R7和和和和累累累累加加加加器器器器来来来来传传传传送送送送。即即即即主主主主程程程程序序序序和和和和子子子子程程程程序序序序在在在在交交交交接接接接处处处处,通通通通过过过过上上上上述存放器和累加器存储同一参数。述存放器和累加器存储同一参数。述存放器和累加器存储同一参数。述存放器和累加器存储同一参数。2)2)传传传传送送送送地地地地址址址址 数数数数据据据据存存存存放放放放在在在在数数数数据据据据存存存存储储储储器器器器中中中中,参参参参数数数数传传传传递递递递时只通过时只通过时只通过时只通过R0R0、R1R1或或或或DPTRDPTR传递数据所存放的地址。传递数据所存放的地址。传递数据所存放的地址。传递数据所存放的地址。3)3)通通通通过过过过堆堆堆堆栈栈栈栈传传传传递递递递参参参参数数数数 在在在在调调调调用用用用之之之之前前前前,先先先先把把把把要要要要传传传传送送送送的的的的参参参参数数数数压压压压入入入入堆堆堆堆栈栈栈栈,进进进进入入入入子子子子程程程程序序序序之之之之后后后后,再再再再将将将将压压压压入入入入堆堆堆堆栈栈栈栈的参数弹出到工作存放器或者其他内存单元。的参数弹出到工作存放器或者其他内存单元。的参数弹出到工作存放器或者其他内存单元。的参数弹出到工作存放器或者其他内存单元。3.7 子程序子程序-参数传递参数传递例例3-16 用程序实现用程序实现c=a2+b2,设,设a,b均小于均小于10。a存放在存放在31H单元,单元,b存放在存放在32H单元,把单元,把c存入存入34H和和33H单元。和要单元。和要求为求为BCD码。码。解:因该算式两次用到平方值,所以在程序中采用把求解:因该算式两次用到平方值,所以在程序中采用把求平方编为子程序的方法。求平方采用查表法平方编为子程序的方法。求平方采用查表法,主程序和子程主程序和子程序编写如下:序编写如下:主程序:主程序:主程序:主程序:ORG 0000H ORG 0000H MOV SPMOV SP,#3FH#3FH MOV AMOV A,31H 31H ;取;取;取;取a aLCALL SQR ;LCALL SQR ;求求求求a a方方方方 MOV R1MOV R1,A AMOV AMOV A,32H 32H ;取;取;取;取b bLCALL SQR ;LCALL SQR ;求求求求b b方方方方ADD AADD A,R1 ;R1 ;求和求和求和求和DA A DA A ;调;调;调;调整整整整MOV 33HMOV 33H,A A MOV AMOV A,#0#0ADDC AADDC A,0 0 MOV 34HMOV 34H,A A SJMP$SJMP$子程序:子程序:子程序:子程序:ORG 0030HORG 0030HSQRSQR:INC A INC A MOVC A MOVC A,A+PC A+PC RET RETTABTAB:DB 00H,01H,04HDB 00H,01H,04H DB 09H DB 09H 16H,25H,16H,25H,DB DB 36H,49H,64H,81H36H,49H,64H,81H END END汇编语言程序设计实例汇编语言程序设计实例例例例例 多字节无符号数加法运算程序。多字节无符号数加法运算程序。多字节无符号数加法运算程序。多字节无符号数加法运算程序。编程说明:多字节运算一般是按照从低字节到编程说明:多字节运算一般是按照从低字节到编程说明:多字节运算一般是按照从低字节到编程说明:多字节运算一般是按照从低字节到高字节的顺序依次进行的。高字节的顺序依次进行的。高字节的顺序依次进行的。高字节的顺序依次进行的。入口:入口:入口:入口:R0R0被加数低位地址指针;被加数低位地址指针;被加数低位地址指针;被加数低位地址指针;R1R1加数低位地址指针;加数低位地址指针;加数低位地址指针;加数低位地址指针;R2R2字节数。字节数。字节数。字节数。出口:出口:出口:出口:R0R0和数地址指针。和数地址指针。和数地址指针。和数地址指针。3.7 3.7 算术运算程序算术运算程序算术运算程序算术运算程序ADDBIN:CLR CLOOP1:MOV A,R0;取被加数取被加数 ADDC A,R1;两数相加两数相加,带进位带进位 MOV R0,A ;存结果存结果 INC R0 INC R1 DJNZ R2,LOOP1;未加完转未加完转LOOP1 JNC LOOP2;无进位转无进位转LOOP2 MOV R0,#01H RETLOOP2:DEC R0 RET
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!