汇编程序设计课件

上传人:仙*** 文档编号:241540333 上传时间:2024-07-03 格式:PPTX 页数:49 大小:757.38KB
返回 下载 相关 举报
汇编程序设计课件_第1页
第1页 / 共49页
汇编程序设计课件_第2页
第2页 / 共49页
汇编程序设计课件_第3页
第3页 / 共49页
点击查看更多>>
资源描述
第第3章章概概述述MCS-51MCS-51单片机的编程语言可以是汇编语言也单片机的编程语言可以是汇编语言也单片机的编程语言可以是汇编语言也单片机的编程语言可以是汇编语言也可以是高级语言(如可以是高级语言(如可以是高级语言(如可以是高级语言(如C C语言),高级语言编程快捷,语言),高级语言编程快捷,语言),高级语言编程快捷,语言),高级语言编程快捷,但程序长,占用存储空间大,执行慢;汇编语言产但程序长,占用存储空间大,执行慢;汇编语言产但程序长,占用存储空间大,执行慢;汇编语言产但程序长,占用存储空间大,执行慢;汇编语言产生的目标程序简短,占用存储空间小,执行快,能生的目标程序简短,占用存储空间小,执行快,能生的目标程序简短,占用存储空间小,执行快,能生的目标程序简短,占用存储空间小,执行快,能充分发挥计算机的硬件功能。无论是高级语言还是充分发挥计算机的硬件功能。无论是高级语言还是充分发挥计算机的硬件功能。无论是高级语言还是充分发挥计算机的硬件功能。无论是高级语言还是汇编语言,源程序都要转换成目标程序(机器语言)汇编语言,源程序都要转换成目标程序(机器语言)汇编语言,源程序都要转换成目标程序(机器语言)汇编语言,源程序都要转换成目标程序(机器语言)单片机才能执行。单片机才能执行。单片机才能执行。单片机才能执行。支持写入单片机或仿真调试的目标程序有两种文件格式:支持写入单片机或仿真调试的目标程序有两种文件格式:支持写入单片机或仿真调试的目标程序有两种文件格式:支持写入单片机或仿真调试的目标程序有两种文件格式:BINBIN文件和文件和文件和文件和 HEXHEX文件,文件,文件,文件,BINBIN文件是由编译器生成的二进制文件,是程序的机文件是由编译器生成的二进制文件,是程序的机文件是由编译器生成的二进制文件,是程序的机文件是由编译器生成的二进制文件,是程序的机器码,器码,器码,器码,HEXHEX文件是由文件是由文件是由文件是由INTELINTEL公司定义的一种格式,这种格公司定义的一种格式,这种格公司定义的一种格式,这种格公司定义的一种格式,这种格式包括地址、数据和校验码,并用式包括地址、数据和校验码,并用式包括地址、数据和校验码,并用式包括地址、数据和校验码,并用ASCIIASCII码来存储,可供码来存储,可供码来存储,可供码来存储,可供显示和打印。显示和打印。显示和打印。显示和打印。HEXHEX文件需通过符号转换程序文件需通过符号转换程序文件需通过符号转换程序文件需通过符号转换程序OHS51OHS51进行进行进行进行转换两种语言的操作过程见图转换两种语言的操作过程见图转换两种语言的操作过程见图转换两种语言的操作过程见图3-13-1。连接连接/定位器定位器L51汇编语言汇编语言源程序源程序汇编器汇编器A51符号转换程序符号转换程序OHS51绝对地址绝对地址目标程序目标程序.BINC语言程序语言程序浮浮动动地地址址目目标标程程序序编译器编译器C51HEX图图3-1两种语言源程序转换成目标程序两种语言源程序转换成目标程序汇编:汇编:将汇编语言源程序转换成机器语言目标程序的过程将汇编语言源程序转换成机器语言目标程序的过程称为汇编。称为汇编。(翻译)翻译)汇编程序:汇编程序:能将汇编语言源程序转换成机器语言目标程序的系能将汇编语言源程序转换成机器语言目标程序的系统软件称为汇编程序。统软件称为汇编程序。(翻译官)翻译官)汇编语言源程序:用户用汇编语言助记符编的应用程序。汇编语言源程序:用户用汇编语言助记符编的应用程序。汇编(编译)的方法有两种:汇编(编译)的方法有两种:汇编(编译)的方法有两种:汇编(编译)的方法有两种:1.1.手工汇编:手工汇编:手工汇编:手工汇编:人工查指令表,查出程序中每条指令对应的机人工查指令表,查出程序中每条指令对应的机人工查指令表,查出程序中每条指令对应的机人工查指令表,查出程序中每条指令对应的机器代码。早期的计算机使用。器代码。早期的计算机使用。器代码。早期的计算机使用。器代码。早期的计算机使用。2.机器汇编机器汇编用计算机中的汇编程序对用户源程序进行汇编。用计算机中的汇编程序对用户源程序进行汇编。用机器汇编要提供给汇编一些信息,遵循汇编程序的用机器汇编要提供给汇编一些信息,遵循汇编程序的一些约定。这些由伪指令指定。一些约定。这些由伪指令指定。目前很多公司将编辑器、汇编器、编译器、连接目前很多公司将编辑器、汇编器、编译器、连接/定位器、符号转换程序做成集成软件包,用户进入该定位器、符号转换程序做成集成软件包,用户进入该集成环境,编辑好程序后,只需点击相应菜单就可以集成环境,编辑好程序后,只需点击相应菜单就可以完成上述的各步,如完成上述的各步,如WAVE、KEIL。WAVE、KEIL集成软件的使用见教材附录。集成软件的使用见教材附录。汇编语言源程序设计步骤汇编语言源程序设计步骤1.确定方案和计算方法确定方案和计算方法2.了解应用系统的硬件配置、性能指标。了解应用系统的硬件配置、性能指标。3.建立系统数学模型,确定控制算法和操作步骤。建立系统数学模型,确定控制算法和操作步骤。4.画程序流程图画程序流程图,确定程序的流向。确定程序的流向。5.编制源程序。编制源程序。(1)合理分配存储器单元和了解)合理分配存储器单元和了解I/O接口地址。接口地址。(2)按功能设计程序,明确各程序之间的相互关系。)按功能设计程序,明确各程序之间的相互关系。(3)用注释行说明程序,便于阅读和修改调试和修改。)用注释行说明程序,便于阅读和修改调试和修改。3.2伪伪指指令令常用伪指令及功能:常用伪指令及功能:常用伪指令及功能:常用伪指令及功能:1.1.起始指令起始指令起始指令起始指令ORGnnORGnn功能:定义程序或数据块的起始地址。功能:定义程序或数据块的起始地址。功能:定义程序或数据块的起始地址。功能:定义程序或数据块的起始地址。指示此语句后指示此语句后指示此语句后指示此语句后面的程序或数据块以面的程序或数据块以面的程序或数据块以面的程序或数据块以nnnn为起始地址,连续存放在程序为起始地址,连续存放在程序为起始地址,连续存放在程序为起始地址,连续存放在程序存储器中。存储器中。存储器中。存储器中。指令地址指令地址指令地址指令地址 机器码机器码机器码机器码源程序源程序源程序源程序 ORGORG 2000H2000H2000H78302000H7830 MAINMAIN:MOVR0MOVR0,#30H#30H2002HE62002HE6 MOVAMOVA,R0R0 ORG3000HORG3000H3000H233000H23TABTAB:DB23HDB23H,100100,AA3001H643001H643002H413002H412.2.字节定义字节定义字节定义字节定义 标号:标号:标号:标号:DBDB(字节常数,或字符或表达式)(字节常数,或字符或表达式)(字节常数,或字符或表达式)(字节常数,或字符或表达式)功能:功能:功能:功能:指示在程序存储器中以标号指示在程序存储器中以标号指示在程序存储器中以标号指示在程序存储器中以标号为起始地址的单元里存放的数为为起始地址的单元里存放的数为为起始地址的单元里存放的数为为起始地址的单元里存放的数为字节数据(八位二进制数)。字节数据(八位二进制数)。字节数据(八位二进制数)。字节数据(八位二进制数)。例如例如例如例如 LNLN:DB32DB32,CC,25H25H,-1-1;LNLNLN+2LN+2地址单元依次存放地址单元依次存放地址单元依次存放地址单元依次存放20H,43H,25H20H,43H,25H,FFHFFH地址地址地址地址 数据数据数据数据LNLN2020LN+1LN+14343LN+2LN+22525LN+3LN+3FFFF3.3.字定义字定义字定义字定义 标号:标号:标号:标号:DWDW(字常数或表达式)(字常数或表达式)(字常数或表达式)(字常数或表达式)作用:指示在程序存储器中以标号为作用:指示在程序存储器中以标号为作用:指示在程序存储器中以标号为作用:指示在程序存储器中以标号为起始地址的单元里存放的数为字数据起始地址的单元里存放的数为字数据起始地址的单元里存放的数为字数据起始地址的单元里存放的数为字数据(即(即(即(即1616位的二进制数),位的二进制数),位的二进制数),位的二进制数),例如:例如:例如:例如:GHGH :DW1234HDW1234H,5678H5678H,0808GHGH12123434GH+2GH+256567878GH+4GH+400000808 5 5.等值指令等值指令等值指令等值指令标号标号标号标号 EQUEQU(数值表达式)(数值表达式)(数值表达式)(数值表达式)表示表示表示表示EQUEQU两边的量等值,用于为标号或标识符赋值。两边的量等值,用于为标号或标识符赋值。两边的量等值,用于为标号或标识符赋值。两边的量等值,用于为标号或标识符赋值。例如:例如:例如:例如:X1X1EQU2000HEQU2000HX2X2EQU0FHEQU0FHMAIN:MAIN:MOVDPTRMOVDPTR,#X1;DPTR=2000H#X1;DPTR=2000HADDAADDA,#X2;A=A+0FH#X2;A=A+0FH4保留字节保留字节标号:标号:DS(数值表达式)(数值表达式)作用:作用:指示在程序存储器中保留以标号为起始地址的若干字指示在程序存储器中保留以标号为起始地址的若干字节单元,其单元个数由数值表达式指定。节单元,其单元个数由数值表达式指定。例如例如L1:DS32;从从L1地址开始保留地址开始保留32个存储单元。个存储单元。6.6.6.6.位定义位定义位定义位定义 标号标号标号标号 BIT BIT BIT BIT 位地址位地址位地址位地址 作用:作用:作用:作用:同同同同EQUEQU指令,不过定义的是位操作地址。指令,不过定义的是位操作地址。指令,不过定义的是位操作地址。指令,不过定义的是位操作地址。例如例如例如例如AICBITP1.1AICBITP1.1。7.汇编结束汇编结束 END作用:作用:指示源程序段结束。指示源程序段结束。END指令放在程序的最后。指令放在程序的最后。A51汇编程序还有一些其它的伪指令,列在教材表汇编程序还有一些其它的伪指令,列在教材表3-1中,以备查阅。中,以备查阅。例例例例3-13-1编程将外部数据存储器的编程将外部数据存储器的编程将外部数据存储器的编程将外部数据存储器的000EH000EH和和和和000FH000FH单元的内容相单元的内容相单元的内容相单元的内容相换。换。换。换。分析分析分析分析:外部数据存储器的数据操作只能用外部数据存储器的数据操作只能用外部数据存储器的数据操作只能用外部数据存储器的数据操作只能用MOVXMOVX指令,且只能指令,且只能指令,且只能指令,且只能和和和和A A之间传送,因此必须用一个中间环节作暂存,设用之间传送,因此必须用一个中间环节作暂存,设用之间传送,因此必须用一个中间环节作暂存,设用之间传送,因此必须用一个中间环节作暂存,设用20H20H单元。用单元。用单元。用单元。用R0R0、R1R1指示两单元的低八位地址,高八位地址由指示两单元的低八位地址,高八位地址由指示两单元的低八位地址,高八位地址由指示两单元的低八位地址,高八位地址由P2P2指示。编程过程如下:指示。编程过程如下:指示。编程过程如下:指示。编程过程如下:常用程序结构常用程序结构顺序程序、分支程序、循环程序、子程序顺序程序、分支程序、循环程序、子程序3.33.3顺序程序设计顺序程序设计顺序程序设计顺序程序设计顺序结构顺序结构是按照逻辑操作顺序,从某一条指令开始逐条顺序是按照逻辑操作顺序,从某一条指令开始逐条顺序执行,直至某一条指令为止。执行,直至某一条指令为止。ORG0000HORG0000HMOVP2,#0H;MOVP2,#0H;送地址高八位至送地址高八位至送地址高八位至送地址高八位至P2P2口口口口 MOVR0,#0EH;R0=0EHMOVR0,#0EH;R0=0EHMOVR1,#0FH;R1=OFHMOVR1,#0FH;R1=OFHMOVXA,R0;A=(000EH)MOVXA,R0;A=(000EH)MOV20H,A;(20H)=(000EH)MOV20H,A;(20H)=(000EH)MOVXA,R1;A=(000FH)MOVXA,R1;A=(000FH)XCHA,20H;A=(000EH),(20H)=(000FH)XCHA,20H;A=(000EH),(20H)=(000FH)MOVXR1,AMOVXR1,AMOVA,20HMOVA,20HMOVXR0,A;MOVXR0,A;交换后的数送各单元交换后的数送各单元交换后的数送各单元交换后的数送各单元 SJMP$SJMP$ENDENDORG0000HORG0000HMOVAMOVA,R4R4JBACC.7,CPLLJBACC.7,CPLL;判符号位;判符号位;判符号位;判符号位SJMP$;SJMP$;正数的补码原码正数的补码原码正数的补码原码正数的补码原码CPLL:MOVACPLL:MOVA,R5R5;取低字节;取低字节;取低字节;取低字节 CPLACPLAADDAADDA,#1#1;低字节变补;低字节变补;低字节变补;低字节变补MOVR5MOVR5,A AMOVAMOVA,R4R4;取高字节;取高字节;取高字节;取高字节CPLACPLAADDCAADDCA,#0#0;高字节变补;高字节变补;高字节变补;高字节变补ORLA,#80H;ORLA,#80H;恢复负号恢复负号恢复负号恢复负号MOVR4MOVR4,A ASJMP$SJMP$例例例例3-23-2:将:将:将:将R4R5R4R5双字节有符号数求补码,结果送原双字节有符号数求补码,结果送原双字节有符号数求补码,结果送原双字节有符号数求补码,结果送原单元的程序。单元的程序。单元的程序。单元的程序。例例例例3-33-3分解压缩式分解压缩式分解压缩式分解压缩式BCDBCD码码码码,使其成为非压缩式使其成为非压缩式使其成为非压缩式使其成为非压缩式BCDBCD码。码。码。码。片内片内片内片内RAMRAM42H42H41H41H40H40H6505050606ORG0000HORG0000HMOVMOV R0R0,#40H#40H;设指针;设指针;设指针;设指针MOVMOV AA,R0R0;取一个字节;取一个字节;取一个字节;取一个字节MOVMOV R2R2,A A;暂存;暂存;暂存;暂存ANLANLAA,#0FH#0FH;清;清;清;清0 0高半字节高半字节高半字节高半字节INCINCR0R0MOVMOV R0R0,AA;保存数据个位;保存数据个位;保存数据个位;保存数据个位MOV A,R2SWAPA;十位换到低半字节;十位换到低半字节ANLA,#0FHINCR0MOV 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存放变量值,存放变量值,利用查表指令利用查表指令MOVCA,A+DPTR,即可求,即可求得。得。表中数据用表中数据用BCD码存放合乎人们的习惯码存放合乎人们的习惯.ORG0000HMOVDPTR,#TABMOVA,20HMOVCA,A+DPTR;查表查表MOV21H,ASJMP$TAB2:DB00H,01H,04H,09H,16H,25HENDDPTRA ORG 0000HORG 0000HORG 0000HORG 0000HMOVAMOVA,R2R2 JNBACC.7JNBACC.7,NN;为正数?;为正数?;为正数?;为正数?CPLACPLA;负数变补;负数变补;负数变补;负数变补 INCAINCA MOVR2MOVR2,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;当;当G53G因重复使用,先暂存在因重复使用,先暂存在R2。流程。流程见左见左,程序如下:程序如下:例例例例22用单片机加重力传感器作磅秤,秤出重量后算出行李运用单片机加重力传感器作磅秤,秤出重量后算出行李运用单片机加重力传感器作磅秤,秤出重量后算出行李运用单片机加重力传感器作磅秤,秤出重量后算出行李运费价格,其秤出的重量以费价格,其秤出的重量以费价格,其秤出的重量以费价格,其秤出的重量以10kg10kg为为为为1 1个计价单位个计价单位个计价单位个计价单位G,GG,G已存入已存入已存入已存入40H40H单元。单元。单元。单元。计价方法为计价方法为计价方法为计价方法为50kg50kg以内按以内按以内按以内按3 3元元元元,50kg50kg以上分段计价以上分段计价以上分段计价以上分段计价:50kg:50kg按按按按3 3元计价,元计价,元计价,元计价,超过部分按超过部分按超过部分按超过部分按2 2元计价。元计价。元计价。元计价。由此列出算式:由此列出算式:由此列出算式:由此列出算式:ORG0100HORG0100HFRTFRT:MOVAMOVA,40H40H;取行李重量计价单位;取行李重量计价单位;取行李重量计价单位;取行李重量计价单位GGMOVR3MOVR3,A AMOVBMOVB,#03H#03H;运费;运费;运费;运费M=G3M=G3MULABMULABMOVR2MOVR2,A A;暂存;暂存;暂存;暂存3G3GMOVAMOVA,R3R3;取回;取回;取回;取回GGCJNEACJNEA,#05H#05H,L1L1;G5?G5?SJMPWETCSJMPWETCL1L1:JCWETCJCWETC;是,转至;是,转至;是,转至;是,转至WETCWETCSUBBASUBBA,#05H#05H;否则;否则;否则;否则 M=3G+2(G-5)M=3G+2(G-5)RLCARLCAADDAADDA,R2R2MOVR2MOVR2,A AWETCWETC:MOV41HMOV41H,R2R2;存运费;存运费;存运费;存运费 MMRETRET3.4.2多分支程序(散转程序)多分支程序(散转程序)有一类分支程序有一类分支程序,它根据不同的输入条件或不同的运算结它根据不同的输入条件或不同的运算结果果,转向不同的处理程序转向不同的处理程序,称之为散转程序。称之为散转程序。多分支散转程序的设计多分支散转程序的设计这类程序通常利用这类程序通常利用JMPA+DPTR间接转移指令实现转移。间接转移指令实现转移。有如下两种设计方法:有如下两种设计方法:1.查转移地址表查转移地址表:将将转移地址转移地址列成表格,将表格的内容作转移的目标地址。列成表格,将表格的内容作转移的目标地址。2.查转移指令表查转移指令表:将转移到不同程序的将转移到不同程序的转移指令转移指令列成表格,判断条件后查表,列成表格,判断条件后查表,转到表中指令执行转到表中指令执行,下面用两个例子说明。下面用两个例子说明。1.1.利用转移地址表实现转移利用转移地址表实现转移利用转移地址表实现转移利用转移地址表实现转移 例例例例3-73-7根据根据根据根据R3R3的内容转向对应的程序,的内容转向对应的程序,的内容转向对应的程序,的内容转向对应的程序,R3R3的内容为的内容为的内容为的内容为0 0n,n,处理程序的入口符号地址分别为处理程序的入口符号地址分别为处理程序的入口符号地址分别为处理程序的入口符号地址分别为PR0PR0PRn(n128)PRn(n128)。分析:将分析:将分析:将分析:将PR0PRnPR0PRn入口地址列在表格中,每一项占两个入口地址列在表格中,每一项占两个入口地址列在表格中,每一项占两个入口地址列在表格中,每一项占两个单元,单元,单元,单元,PRnPRn在表中的偏移量为在表中的偏移量为在表中的偏移量为在表中的偏移量为2n2n,因此将,因此将,因此将,因此将R3R3的内容乘的内容乘的内容乘的内容乘2 2即得即得即得即得PRnPRn在表中的偏移地址,从偏移地址在表中的偏移地址,从偏移地址在表中的偏移地址,从偏移地址在表中的偏移地址,从偏移地址2n2n和和和和2n+12n+1两个两个两个两个单元分别取出单元分别取出单元分别取出单元分别取出PRnPRn的高八位地址和低八位地址送的高八位地址和低八位地址送的高八位地址和低八位地址送的高八位地址和低八位地址送DPTRDPTR寄存器,用寄存器,用寄存器,用寄存器,用JMPA+DPTRJMPA+DPTR指令(指令(指令(指令(A A先清零)即转移到先清零)即转移到先清零)即转移到先清零)即转移到PRnPRn入口执行。入口执行。入口执行。入口执行。这里设这里设这里设这里设PR0-PRnPR0-PRn地址地址地址地址 PR0PR0 EQU0110H;EQU0110H;用伪指令定义用伪指令定义用伪指令定义用伪指令定义PRnPRn的具体地址的具体地址的具体地址的具体地址PR1EQU0220HPR1EQU0220HPR2EQU0330HPR2EQU0330HORG 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+2DPHDPL例如例如R3=1的操作的操作0220例例2:通过查转移指令表实现多分支程序转移举例。:通过查转移指令表实现多分支程序转移举例。由由40H单元中动态运行结果值来选择分支程序单元中动态运行结果值来选择分支程序(40H)0,转处理程序,转处理程序0(40H)1,转处理程序,转处理程序1.(40H)n,转处理程序,转处理程序n其程序段如下:其程序段如下:START:MOVDPTR,ADDR16;多分支转移指令表首址送;多分支转移指令表首址送;DPTRMOVA,40H;40H单元内容送单元内容送ACLRC;清;清CYRLCA;A内容左移一位内容左移一位JNCTABLE;若;若CY0转转TABELINCDPH;若;若CYl,DPH内容十内容十1TABEL:JMPA十十DPTR;多分支转移;多分支转移ADDR16:AJMPLOOP0;转分支程序;转分支程序0AJMPLOOP1;转分支程序;转分支程序1AJMPLOOPn;转分支程序;转分支程序n2.2.利用转移指令表实现转移利用转移指令表实现转移利用转移指令表实现转移利用转移指令表实现转移3.5循环程序循环程序 典典典典型型型型循循循循环环环环程程程程序序序序包包包包含含含含四四四四部部部部分分分分:初初初初始始始始化化化化部部部部分分分分、循循循循环环环环处处处处理理理理部部部部分分分分、循循循循环环环环控控控控制制制制部部部部分分分分和和和和循循循循环环环环修修修修改改改改部部部部分分分分。下下下下面面面面分分分分别别别别介介介介绍这四个组成部分。绍这四个组成部分。绍这四个组成部分。绍这四个组成部分。1)1)1)1)初初初初始始始始化化化化部部部部分分分分:设设设设置置置置循循循循环环环环开开开开始始始始的的的的初初初初始始始始值值值值,为为为为循循循循环环环环做做做做准备。准备。准备。准备。2)2)2)2)循环处理部分:循环处理部分:循环处理部分:循环处理部分:循环程序中重复执行的内容。循环程序中重复执行的内容。循环程序中重复执行的内容。循环程序中重复执行的内容。3)3)3)3)循环控制部分:循环控制部分:循环控制部分:循环控制部分:判断是否结束循环。判断是否结束循环。判断是否结束循环。判断是否结束循环。4)4)4)4)循循循循环环环环修修修修改改改改部部部部分分分分:修修修修改改改改循循循循环环环环参参参参数数数数,为为为为执执执执行行行行下下下下一一一一次次次次循循循循环做准备。环做准备。环做准备。环做准备。-循环结构循环结构-循环结构循环结构3.5循环程序循环程序先先执执行行后后判判断断 先先判判断断后后执执行行例例例例 3-93-9设计一个延时设计一个延时设计一个延时设计一个延时10ms10ms的延时子程序,已知单片机使用的延时子程序,已知单片机使用的延时子程序,已知单片机使用的延时子程序,已知单片机使用的晶振为的晶振为的晶振为的晶振为6MHz6MHz。分析分析分析分析 延时时间与两个因素有关延时时间与两个因素有关延时时间与两个因素有关延时时间与两个因素有关:晶振频率和循环次数。由于晶振频率和循环次数。由于晶振频率和循环次数。由于晶振频率和循环次数。由于晶振采用晶振采用晶振采用晶振采用6MHz6MHz,一个机器周期是,一个机器周期是,一个机器周期是,一个机器周期是2s2s,用单循环可以实现,用单循环可以实现,用单循环可以实现,用单循环可以实现1ms1ms延时,外循环延时,外循环延时,外循环延时,外循环1010次即可达次即可达次即可达次即可达10ms10ms延时。延时。延时。延时。内循环如何实现内循环如何实现内循环如何实现内循环如何实现1ms1ms延时呢,程序中可先以未知数延时呢,程序中可先以未知数延时呢,程序中可先以未知数延时呢,程序中可先以未知数MTMT代替,从附录代替,从附录代替,从附录代替,从附录A A查每条指令机器周期计算程序的执行时间。查每条指令机器周期计算程序的执行时间。查每条指令机器周期计算程序的执行时间。查每条指令机器周期计算程序的执行时间。ORG0020HORG0020HMOVR0MOVR0,#0AH#0AH;外循环;外循环;外循环;外循环1010次次次次DL2DL2:MOVR1MOVR1,#MT#MT;内循环;内循环;内循环;内循环MTMT次次次次DL1DL1:NOPNOPNOPNOP;空操作指令;空操作指令;空操作指令;空操作指令DJNZR1DJNZR1,DL1DL1DJNZR0DJNZR0,DL2DL2RETRET111122内循环内循环DL1到指令到指令DJNZR1,DL1的计算:的计算:(1+1+2)2SMT=1000SMT=125=7DH将将7DH代入上面程序的代入上面程序的MT,计算总的延时时间:,计算总的延时时间:1+1+(1+1+2)125+2*102S=10062S=10.062mS若需要延时更长时间,可以采用多重循环。若需要延时更长时间,可以采用多重循环。机器周期数机器周期数内内外外例:设单片机晶振频率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+2)250+2+1250+1=500751个机器周期,需1.001502秒。外循环中循环内循环外循环内循环外循环内循环内循环(a)嵌套正确(b)嵌套正确(c)交叉不正确多重循环示意图多重循环示意图345H0AH32H28H2BH1EH20BH例例3-10编写多字节数编写多字节数10程序。程序。内部内部内部内部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$例如例如例如例如 12236509891223650989比较大小比较大小比较大小比较大小不交换不交换(0)12236509191223650919交换交换(1)1223096519不交换不交换(0)交换交换(1)12231223 6509196509191223091965最大最大交换交换(1)不交换不交换(0)12230919651209231965交换交换(1)1209192365不交换不交换(0)交换交换(1)12231223 0919650919651209192365最大最大120919236509121923650912192365091219236509121923653.6位操作程序设计位操作程序设计例例例例3-173-17编写一程序编写一程序编写一程序编写一程序,以实现图以实现图以实现图以实现图3-73-7中的逻辑运算电路。中的逻辑运算电路。中的逻辑运算电路。中的逻辑运算电路。MCS-51MCS-51单片机有着优异的位逻辑功能单片机有着优异的位逻辑功能单片机有着优异的位逻辑功能单片机有着优异的位逻辑功能,可以方便的实可以方便的实可以方便的实可以方便的实现各种复杂的逻辑运算现各种复杂的逻辑运算现各种复杂的逻辑运算现各种复杂的逻辑运算.这种用软件替代硬件的方法这种用软件替代硬件的方法这种用软件替代硬件的方法这种用软件替代硬件的方法,可以大可以大可以大可以大大简化甚至完全不用硬件大简化甚至完全不用硬件大简化甚至完全不用硬件大简化甚至完全不用硬件,但比硬件要多花运算时间。但比硬件要多花运算时间。但比硬件要多花运算时间。但比硬件要多花运算时间。其中其中P1.1和和P2.2分别是端口线上的信息分别是端口线上的信息,TF0和和IE1分别分别是定时器定时溢出标志和外部中请求标志是定时器定时溢出标志和外部中请求标志,25H和和26H分别分别是两个位地址是两个位地址,运算结果由端口线运算结果由端口线P1.3输出输出.程序如下:程序如下:START:MOVC,P2.2ORLC,TF0ANLC,P1.1MOVF0,CMOVC,IE1ORLC,/25HANLC,F0ANLC,/26HMOVP1.3,CSJMP$例3-15设累加器设累加器A的各位的各位ACC.0ACC.7分别分别记为记为X0X7,编制程序用软件实现下式,编制程序用软件实现下式:Y=X0 0X1 1X2 2+X0 0X1 1X2 2+X0 0X1 1X2 2X3 3+X4 4X5 5X6 6X7 7编程如下:编程如下:编程如下:编程如下:X0BITACC.0X0BITACC.0X1BITACC.1X1BITACC.1X2BITACC.2X2BITACC.2X3BITACC.3X3BITACC.3X4BITACC.4X4BITACC.4X5BITACC.5X5BITACC.5X6BITACC.6X6BITACC.6X7BITACC.7X7BITACC.73.7子程序子程序同同同同一一一一个个个个程程程程序序序序中中中中,往往往往往往往往有有有有许许许许多多多多地地地地方方方方都都都都需需需需要要要要执执执执行行行行同同同同样样样样的的的的一一一一项项项项任任任任务务务务,这这这这时时时时可可可可以以以以对对对对这这这这项项项项任任任任务务务务进进进进行行行行独独独独立立立立的的的的编编编编写写写写,形形形形成成成成一一一一个个个个子子子子程程程程序序序序。在在在在原原原原来来来来的的的的主主主主程程程程序序序序中中中中需需需需要要要要执执执执行行行行该该该该任任任任务务务务时时时时,调调调调用用用用该该该该子子子子程程程程序序序序,执执执执行行行行完完完完后后后后又又又又返返返返回回回回主主主主程程程程序序序序,继继继继续续续续以以以以后后后后的的的的操操操操作作作作,这就是所谓的子程序结构。这就是所谓的子程序结构。这就是所谓的子程序结构。这就是所谓的子程序结构。子子子子程程程程序序序序是是是是构构构构成成成成单单单单片片片片机机机机应应应应用用用用程程程程序序序序必必必必不不不不可可可可少少少少的的的的部部部部分分分分,通通通通过过过过ACALLACALL和和和和LCALLLCALL两两两两条条条条子子子子程程程程序序序序调调调调用用用用指指指指令令令令,可可可可以以以以十十十十分分分分方方方方便地用来调用任何地址处的子程序。便地用来调用任何地址处的子程序。便地用来调用任何地址处的子程序。便地用来调用任何地址处的子程序。子子子子程程程程序序序序节节节节省省省省占占占占用用用用的的的的存存存存储储储储单单单单元元元元,使使使使程程程程序序序序简简简简短短短短、清清清清晰晰晰晰,善善善善于于于于灵灵灵灵活活活活的的的的使使使使用用用用子子子子程程程程序序序序,是是是是程程程程序序序序设设设设计计计计的的的的重重重重要要要要技技技技巧巧巧巧之之之之一一一一。子程序必须以子程序必须以子程序必须以子程序必须以RETRET指令结尾指令结尾指令结尾指令结尾.-子程序子程序3.7子程序子程序在程序设计过程中,适当地使用子程序具有以下优点:在程序设计过程中,适当地使用子程序具有以下优点:在程序设计过程中,适当地使用子程序具有以下优点:在程序设计过程中,适当地使用子程序具有以下优点:1)1)不必重复编写同样的程序,提高了编码的效率。不必重复编写同样的程序,提高了编码的效率。不必重复编写同样的程序,提高了编码的效率。不必重复编写同样的程序,提高了编码的效率。2)2)缩缩缩缩短短短短了了了了源源源源程程程程序序序序和和和和目目目目标标标标程程程程序序序序的的的的长长长长度度度度,节节节节省省省省了了了了程程程程序序序序存存存存储储储储器的空间。器的空间。器的空间。器的空间。3)3)使程序模块化、通用化,便于阅读、交流和共享。使程序模块化、通用化,便于阅读、交流和共享。使程序模块化、通用化,便于阅读、交流和共享。使程序模块化、通用化,便于阅读、交流和共享。4)4)便于分块调试。便于分块调试。便于分块调试。便于分块调试。子程序中可包括对另外子程序的调用,称为子程序嵌套。子程序中可包括对另外子程序的调用,称为子程序嵌套。子程序中可包括对另外子程序的调用,称为子程序嵌套。子程序中可包括对另外子程序的调用,称为子程序嵌套。在子程序调用过程中须解决以下两个方面的问题:在子程序调用过程中须解决以下两个方面的问题:在子程序调用过程中须解决以下两个方面的问题:在子程序调用过程中须解决以下两个方面的问题:1)1)保护现场和恢复现场。保护现场和恢复现场。保护现场和恢复现场。保护现场和恢复现场。2)2)调用程序与被调用程序之间的参数传递。调用程序与被调用程序之间的参数传递。调用程序与被调用程序之间的参数传递。调用程序与被调用程序之间的参数传递。n n保护现场和恢复现场保护现场和恢复现场保护现场和恢复现场保护现场和恢复现场方方方方法法法法就就就就是是是是在在在在进进进进入入入入子子子子程程程程序序序序时时时时,将将将将需需需需要要要要保保保保护护护护的的的的数数数数据据据据推推推推入入入入堆堆堆堆栈栈栈栈,而而而而空空空空出出出出这这这这些些些些数数数数据据据据所所所所占占占占用用用用的的的的工工工工作作作作单单单单元元元元,供供供供子子子子程程程程序序序序中中中中使使使使用用用用。在在在在返返返返回回回回调调调调用用用用程程程程序序序序之之之之前前前前,再再再再将将将将推推推推入入入入堆堆堆堆栈栈栈栈的的的的数数数数据据据据弹弹弹弹出出出出到到到到原原原原有有有有的的的的工工工工作作作作单单单单元元元元,恢恢恢恢复复复复其其其其原原原原来来来来的的的的状状状状态态态态,使使使使调调调调用用用用程程程程序序序序可可可可以以以以继继继继续续续续往往往往下下下下执行。执行。执行。执行。3.7子程序子程序-子程序子程序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码)。码)。解:因该算式两次用到平方值,所以在程序中采用把求解:因该算式两次用到平方值,所以在程序中采用把求平方编为子程序的方法。求平方采用查表法平方编为子程序的方法。求平方采用查表法,主程序和子程主程序和子程序编写如下:序编写如下:主程序:主程序:主程序:主程序:ORG0000HORG0000HMOVSPMOVSP,#3FH#3FHMOVAMOVA,31H31H;取;取;取;取a aLCALLSQR;LCALLSQR;求求求求a a方方方方 MOVR1MOVR1,A AMOVAMOVA,32H32H;取;取;取;取b bLCALLSQR;LCALLSQR;求求求求b b方方方方ADDAADDA,R1;R1;求和求和求和求和DAADAA;调整;调整;调整;调整MOV33HMOV33H,AAMOVAMOVA,#0#0ADDCAADDCA,00MOV34HMOV34H,AASJMP$SJMP$子程序:子程序:子程序:子程序:ORG0030HORG0030HSQRSQR:INCAINCAMOVCAMOVCA,A+PCA+PCRETRETTABTAB:DB00H,01H,04HDB00H,01H,04HDB09H16H,25H,DB09H16H,25H,DB36H,49H,64H,81HDB36H,49H,64H,81HENDEND汇编语言程序设计实例汇编语言程序设计实例例例例例多字节无符号数加法运算程序。多字节无符号数加法运算程序。多字节无符号数加法运算程序。多字节无符号数加法运算程序。编程说明:多字节运算一般是按照从低字节到编程说明:多字节运算一般是按照从低字节到编程说明:多字节运算一般是按照从低字节到编程说明:多字节运算一般是按照从低字节到高字节的顺序依次进行的。高字节的顺序依次进行的。高字节的顺序依次进行的。高字节的顺序依次进行的。入口:入口:入口:入口:R0R0被加数低位地址指针;被加数低位地址指针;被加数低位地址指针;被加数低位地址指针;R1R1加数低位地址指针;加数低位地址指针;加数低位地址指针;加数低位地址指针;R2R2字节数。字节数。字节数。字节数。出口:出口:出口:出口:R0R0和数地址指针。和数地址指针。和数地址指针。和数地址指针。3.73.7算术运算程序算术运算程序算术运算程序算术运算程序ADDBIN:CLRCLOOP1:MOVA,R0;取被加数取被加数ADDCA,R1;两数相加两数相加,带进位带进位MOVR0,A;存结果存结果INCR0INCR1DJNZR2,LOOP1;未加完转未加完转LOOP1JNCLOOP2;无进位转无进位转LOOP2MOVR0,#01HRETLOOP2:DECR0RETp经常不断地学习,你就什么都知道。你知道得越多,你就越有力量pStudyConstantly,AndYouWillKnowEverything.TheMoreYouKnow,TheMorePowerfulYouWillBe写在最后Thank You在别人的演说中思考,在自己的故事里成长Thinking In Other PeopleS Speeches,Growing Up In Your Own Story讲师:XXXXXX XX年XX月XX日
展开阅读全文
相关资源
相关搜索

最新文档


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


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

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


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