单片机学习汇编语言程序设计ppt课件_第1页
单片机学习汇编语言程序设计ppt课件_第2页
单片机学习汇编语言程序设计ppt课件_第3页
单片机学习汇编语言程序设计ppt课件_第4页
单片机学习汇编语言程序设计ppt课件_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第4章 汇编言语程序设计计算机在完成一项任务时,必需按照顺序执行各项操作。这些操作是计算机程序设计人员按照处理问题的步骤事先描画好的算法,设计出相应的程序,然后由计算机去执行。程序设计就是用计算机所能接受的方式把处理问题的步骤描画出来。本章引见汇编言语程序设计的根底知识,经过实例让学习汇编言语程序的设计方法。本章总体要求: 熟练掌握汇编言语语句的格式、常用的伪指令和程序流程图熟练掌握汇编言语语句的格式、常用的伪指令和程序流程图1掌握汇编言语程序设计的步骤和技巧掌握汇编言语程序设计的步骤和技巧 2熟习顺序、分支、循环构造和子程序调用等程序的运用特征熟习顺序、分支、循环构造和子程序调用等程序的运用

2、特征3可以独立完本钱章作业可以独立完本钱章作业4本章重点:本章重点: 汇编言语程序设计中常用伪指令的运用汇编言语程序设计中常用伪指令的运用 1汇编言语程序设计的步骤汇编言语程序设计的步骤 2分支与循环描画的了解与实现分支与循环描画的了解与实现 3综合程序的设计综合程序的设计 4本章难点:本章难点: 汇编言语程序设计算法确实定及绘制程序流程图汇编言语程序设计算法确实定及绘制程序流程图 1多重循环程序设计及子程序设计与调用多重循环程序设计及子程序设计与调用2综合运用程序设计的实现综合运用程序设计的实现34.1.1 程序设计言语程序设计言语1机器言语:机器言语是直接面向硬件的二机器言语:机器言语是直

3、接面向硬件的二进制代码指令。进制代码指令。2汇编言语:汇编言语是机器言语的符号表汇编言语:汇编言语是机器言语的符号表示,与机器言语一一对应,编程效率高,示,与机器言语一一对应,编程效率高,实时性好,但也不能跨平台任务。实时性好,但也不能跨平台任务。3高级言语:高级言语是一种面向算法和过高级言语:高级言语是一种面向算法和过程的言语程的言语 。4.1.2 汇编言语格式 汇编言语语句格式为:汇编言语语句格式为:标号:操作码标号:操作码 操作数操作数 ;注释;注释 1.标号是由用户定义的符号地址,指明该指标号是由用户定义的符号地址,指明该指令的起始地址。令的起始地址。 标号是由英文字母开头的标号是由英

4、文字母开头的18个字母和数字个字母和数字组成的字符串,以冒号组成的字符串,以冒号“:结尾。:结尾。2操作码操作码操作码表示该语句要执行的操作内容,是操作码表示该语句要执行的操作内容,是每一条汇编言语必有的部分。操作码用助每一条汇编言语必有的部分。操作码用助记符表示,在操作码后面至少要有一个空记符表示,在操作码后面至少要有一个空格,使它与操作数分开。格,使它与操作数分开。3操作数操作数操作数是该指令操作所需求的数据。操作数是该指令操作所需求的数据。 留意:这一字段能够有也能够没有,当多于留意:这一字段能够有也能够没有,当多于一个操作数时,操作数之间用逗号分隔。一个操作数时,操作数之间用逗号分隔。

5、 操作数字段的内容可以包括以下几项:操作数字段的内容可以包括以下几项:1任务存放器名;任务存放器名;2特殊功能存放器名;特殊功能存放器名;3标号名;标号名;4常数;常数;5$:该符号用来表示程序计数器的当:该符号用来表示程序计数器的当前值。该符号常出如今转移指令中;前值。该符号常出如今转移指令中;6表达式:在汇编时,计算出表达式的表达式:在汇编时,计算出表达式的值,并把该值填入目的码中。值,并把该值填入目的码中。 4注释注释注释不是汇编言语的功能部分,它是语句注释不是汇编言语的功能部分,它是语句的阐明部分,用于改善程序的可读性,它的阐明部分,用于改善程序的可读性,它以分号以分号“;开场。注释可

6、为一行或多行;开场。注释可为一行或多行每行均以分号开场。每行均以分号开场。 4.1.3 伪指令伪指令 所谓伪指令又称为伪操作,它不象机器指所谓伪指令又称为伪操作,它不象机器指令那样是在程序运转期间由计算机来执行令那样是在程序运转期间由计算机来执行的,它是在汇编程序对源程序汇编时,由的,它是在汇编程序对源程序汇编时,由汇编程序处置的操作,它们可以完成如数汇编程序处置的操作,它们可以完成如数据定义、分配存储器、指示程序终了等功据定义、分配存储器、指示程序终了等功能。能。1汇编起始地址命令汇编起始地址命令 格式:格式:ORG nn 功能:规定此命令之后的程序或数据的存功能:规定此命令之后的程序或数据

7、的存放起始地址。放起始地址。 ORG伪指令总是出如今每段源程序或数据伪指令总是出如今每段源程序或数据块的开场。块的开场。2定义字节伪指令定义字节伪指令格式:格式:标号:标号: DB X1,X2,Xn功能:从指定地址开场,存放假设干字节数据。功能:从指定地址开场,存放假设干字节数据。留意:在程序存储器空间定义留意:在程序存储器空间定义8位单字节数据,位单字节数据,通常用于定义一个常数表。通常用于定义一个常数表。Xi为单字节数据,为单字节数据,它为二进制、八进制、十进制或十六进制数,它为二进制、八进制、十进制或十六进制数,也可以为一个表达式,还可以是由两个单引也可以为一个表达式,还可以是由两个单引

8、号所括起来的一个字符串,或单引号括起来号所括起来的一个字符串,或单引号括起来的字符。的字符。3字定义伪指令字定义伪指令格式:格式:标号:标号: DW Y1,Y2,Yn功能:从指定地址开场,存放假设干字数据。功能:从指定地址开场,存放假设干字数据。留意:在程序存储器空间定义双字节数据,留意:在程序存储器空间定义双字节数据,经常用于定义一个地址表。经常用于定义一个地址表。Yi为双字节数为双字节数据,它可以为十进制或十六进制的数,也据,它可以为十进制或十六进制的数,也可以为一个表达式。高位数在前,低位数可以为一个表达式。高位数在前,低位数在后。在后。 例如:例如: ORG 1000H DATA:DW

9、 3241H,1234H,78H 上述程序将对从上述程序将对从1000H单元开场的单元开场的6个单个单元赋值,赋值情况如何呢?元赋值,赋值情况如何呢? 1000H=32H,1001H=41H,1002H=12H,1003H=34H,1004H=00H,1005H=78H。4汇编终了伪指令汇编终了伪指令 END 该伪指令指出终了汇编,即使后面还有指令,该伪指令指出终了汇编,即使后面还有指令,汇编程序也不处置。汇编程序也不处置。5赋值伪指令赋值伪指令格式:标号格式:标号 EQU 表达式表达式功能:将表达式的值数据或地址赋给标功能:将表达式的值数据或地址赋给标 号。号。 留意:标号为字符称号,其后无

10、冒留意:标号为字符称号,其后无冒号。在一个程序中对于某一个标号号。在一个程序中对于某一个标号只能赋一次值,一旦赋值在本程序只能赋一次值,一旦赋值在本程序的恣意位置就可以援用该标号。的恣意位置就可以援用该标号。 例如:例如:ORG 3000HSTA EQU 80HTAB EQU 10MUL EQU 4000HMOV A,STAMOV B,TABLCALL MUL定义了三个标号:定义了三个标号:STA=80H,TAB=10,MUL=4000H,在程,在程序中直接援用这三个序中直接援用这三个标号来替代标号来替代80H、10、4000H。6位定义伪指令位定义伪指令格式:格式:标号标号 BIT 位地址位

11、地址功能:将位地址赋给标号。功能:将位地址赋给标号。其中,标号为字符称号,其后无冒号。其中,标号为字符称号,其后无冒号。例如:例如:A1 BIT P0.1A2 BIT PSW.34.2 汇编言语程序设计汇编言语程序设计4.2.1 汇编程序设计根底汇编程序设计根底1汇编言语程序设计的步骤:汇编言语程序设计的步骤: 1分析问题,明确义务分析问题,明确义务2确定算法确定算法 3画出程序流程图画出程序流程图 4编写源程序编写源程序5汇编和调试汇编和调试2汇编言语程序的格式汇编言语程序的格式ORG 起始地址起始地址 ;数据存放;数据存放 ;程序代码;程序代码SJMP $ ;原地踏步;原地踏步END3汇编

12、言语源程序的汇编汇编言语源程序的汇编 汇编言语源程序必需转换成计算机能过识汇编言语源程序必需转换成计算机能过识别的目的程序后才干执行,汇编方法通常别的目的程序后才干执行,汇编方法通常有机器汇编和手工汇编两种方法。有机器汇编和手工汇编两种方法。4汇编言语程序设计的技巧汇编言语程序设计的技巧1尽量采用模块化、构造化的程序设计方尽量采用模块化、构造化的程序设计方法。法。 2合理地绘制程序流程图合理地绘制程序流程图 3少用无条件转移指令,尽量采用循环构少用无条件转移指令,尽量采用循环构造和子程序构造。造和子程序构造。4充分利用累加器。充分利用累加器。 5精心设计主要程序段。精心设计主要程序段。 6对于

13、中断要留意维护和恢复现场。对于中断要留意维护和恢复现场。4.2.2 顺序程序设计顺序程序设计 顺序构造程序又称为简单构造程序,是指顺序构造程序又称为简单构造程序,是指一种顺序执行的程序,程序从第一条指令一种顺序执行的程序,程序从第一条指令到最后一条指令的整个执行过程中既无分到最后一条指令的整个执行过程中既无分支又无循环。支又无循环。【例【例4.1】两个】两个8位无符号数相加,和仍为位无符号数相加,和仍为8位。位。分析:假设两个无符号数分析:假设两个无符号数X、Y分别存放于内部分别存放于内部RAM的的60H、61H单元中,求和并存于单元中,求和并存于62H单元单元中。中。 程序如下:程序如下:O

14、RG 2000HMOVR0,#60H;设;设R0为数据指针为数据指针MOVA, R0;将;将X值送入值送入A中中INCR0ADDA,R0;X+YINCR0MOVR0,A;保管结果;保管结果SJMP $ ;原地踏步;原地踏步END【例【例4.2】假设两个双字节无符号数,分别存】假设两个双字节无符号数,分别存放在放在R1R0和和R3R2中,高字节在前,低字中,高字节在前,低字节在后。编程使两数相加,用节在后。编程使两数相加,用R2R1R0存放存放和。和。 对多字节的加法,存在最高位的进位问题。对多字节的加法,存在最高位的进位问题。假设最高位有进位,那么和的字节数要比假设最高位有进位,那么和的字节数

15、要比加数或被加数的字节数多一个。加数或被加数的字节数多一个。ORG 1000HCLR CMOV A,R0;取被加数低字节;取被加数低字节AADD A,R2;与加数低字节相加;与加数低字节相加MOV R0,A;存和数低字节;存和数低字节MOV A,Rl;取被加数高字节;取被加数高字节AADDC A,R3;与加数高字节相加;与加数高字节相加MOV R1,A;存和数高字节;存和数高字节MOV A,#0ADDC A,#0;加进位位;加进位位MOV R2,A ;存和数进位位;存和数进位位SJMP $ ; END【例【例4.3】16位二进制数求补,设两个字节原位二进制数求补,设两个字节原码数存在码数存在R

16、1R0中,求补后结果存在中,求补后结果存在R3R2中。中。分析:二进制数求补操作,可采用分析:二进制数求补操作,可采用“原码求反原码求反+1的方法来实现,可运用求反指令和加的方法来实现,可运用求反指令和加法指令来实现。法指令来实现。程序如下:程序如下:ORG 1000HMOVA,R0 ;低;低8位送位送ACPLA;ADDA,#01H;MOVR2,A;送结果低位;送结果低位MOVA,R1 ;高;高8位送位送ACPLA;ADDCA,#00H;加进位;加进位MOVR3,A;送结果高位;送结果高位SJMP$END【例【例4.4】将内部】将内部RAM的的60H单元中的无符号单元中的无符号二进制数转换为二

17、进制数转换为3位位BCD码,并将结果按由码,并将结果按由高位到低位的顺序存放到高位到低位的顺序存放到63H、62H、61H单元中。单元中。分析:分析:8位无符号二进制数表示的数据范围位无符号二进制数表示的数据范围0255,所以用,所以用BCD码,最多码,最多3位。可将被位。可将被转换的数除以转换的数除以100,商即百位数;余数再除,商即百位数;余数再除以以10得十位数;最后余数即为个位数。得十位数;最后余数即为个位数。编程如下:编程如下:ORG 1000HHBCD: MOV A,60H;取原数据;取原数据MOV B,#100;除数;除数100BDIV AB ;除;除100MOV 63H,A ;

18、百位;百位BCDMOV A,BMOV B,#10 ;除数;除数10BDIV AB ;MOV 62H,A ;存十位;存十位BCD MOV 61H,B;存个位;存个位BCDSJMP $END4.2.3 分支程序设计图图4-1 4-1 分支程序流程图分支程序流程图【例【例4.5】设内部】设内部RAM 60H和和61H单元中存放单元中存放两个无符号数,试比较它们的大小。将较两个无符号数,试比较它们的大小。将较小的数存放在小的数存放在60H单元,较大的数存放在单元,较大的数存放在61H单元中。单元中。分析:这是一个简单分支程序,可以使两数分析:这是一个简单分支程序,可以使两数相减,用相减,用JC指令进展

19、判别。假设指令进展判别。假设CY=1,那,那么被减数小于减数。么被减数小于减数。 ORG1000HSTART:CLR C ;0CY MOVA,60H SUBBA,61H;做减法比较两数;做减法比较两数 JC NEXT;假设;假设(60H)小,那么小,那么转移转移 MOVA,60H XCH A, 61H;交换两数;交换两数 MOV 60H,A NEXT: NOP SJMP $ END【例【例4.6】将】将R2中的一位十六进制数转换为中的一位十六进制数转换为ASCII码,结果仍存放于码,结果仍存放于R2中。中。分析:数字分析:数字09的的ASCII码分别是码分别是30H39H,英文大写字母英文大写

20、字母AF的的ASCII码分别是码分别是4146H。因此,假设该十六进制数小于。因此,假设该十六进制数小于10,要转换为要转换为ASCII码应加码应加30H,假设该十六进,假设该十六进制数大于制数大于10,那么加,那么加37H。 ORG 1000HMOV A,R2CJNE A,#0AH,L1L1:JNC ADD37ADD30:ADD A,#30HMOV R2,ASJMP FINISHADD37:ADD A,#37HMOV R2,AFINISH:SJMP $END【例【例4.7】设变量】设变量x存入存入30H单元,求得函数单元,求得函数y存入存入31H单元。按下式要求给单元。按下式要求给y赋值:赋

21、值: x+1 (10 x) y= 0 (5x10) x-1 (x10时,采用时,采用CJNE和和JC以及以及CJNE和和JNC指令进展判别。指令进展判别。程序如下:程序如下:ORG 1000HMOV A,30H ;取;取XCJNE A,#5,NEXTl;与;与5比较比较NEXT1:JC NEXT2 ;X5,那么转,那么转NEXT2MOV R0,A ;INC R0 ;设;设1010,那么转,那么转NEXT4 MOV R0, #0 ;5X10,Y=0 SJMP NEXT4NEXT2:MOV R0,A DEC R0 ;X5,Y=X-1NEXT4:MOV 31H,R0 ;存结果;存结果SJMP $EN

22、D4.2.4 循环程序设计循环程序设计循环程序普通包括以下循环程序普通包括以下5部分:部分:初始化部分:循环程序的预备部分,把初始参数赋初始化部分:循环程序的预备部分,把初始参数赋给控制变量。给控制变量。循环处置部分:循环程序反复执行的部分,这是循循环处置部分:循环程序反复执行的部分,这是循环程序的实体。环程序的实体。修正部分:修正控制变量的值,为进入下一轮循环修正部分:修正控制变量的值,为进入下一轮循环做预备。做预备。控制部分:根据循环终了条件,判别循环能否终了。控制部分:根据循环终了条件,判别循环能否终了。终了部分:分析、处置及存放程序执行结果。终了部分:分析、处置及存放程序执行结果。 循

23、环程序的构造普通由两种方式:1单循环程序设计单循环程序设计【例【例4.8】循环次数知的单重循环。】循环次数知的单重循环。 在内部在内部RAM的的 20H2FH延续延续16个单元中个单元中存放单字节无符号数。求这存放单字节无符号数。求这16个无符号数个无符号数之和,并存入内部之和,并存入内部RAM 61H和和60H中。中。分析:这是反复相加问题,且事先知道循环分析:这是反复相加问题,且事先知道循环次数,故采用计数器控制的循环程序设计次数,故采用计数器控制的循环程序设计方法。设用方法。设用R0作加数地址指针,作加数地址指针,R7作循环作循环次数计数器,次数计数器,R3作和数的高字节存放器。作和数的

24、高字节存放器。 ORG 0200HSTART:MOV R7,#15 ;循环次数;循环次数 MOV R3,#0 ;装和的高字节;装和的高字节MOV A, 20H ;MOV R0,#21H ;加数的地址;加数的地址 LOOP:ADD A,R0 ;累加和在;累加和在A中中 JNC NEXT ;没进位那么跳;没进位那么跳NEXT INC R3 ;有进位,那么高位加;有进位,那么高位加1 NEXT:INC R0 ;加数地址加;加数地址加1 DJNZ R7,LOOP MOV 61H,R3;将和的高位传;将和的高位传51H中中MOV 60H,A ;将和的低位传;将和的低位传50H中中SJMP $ END 【

25、例【例4.9】循环次数未知的单重循环。】循环次数未知的单重循环。设有一字符串存放在内部设有一字符串存放在内部RAM 21H开场的单开场的单元中,并以元中,并以“$作为终了标志,请计算该作为终了标志,请计算该字符串的长度,并将其存入字符串的长度,并将其存入20H单元。单元。分析:该字符串长度事先未知,但知道终了分析:该字符串长度事先未知,但知道终了条件,故采用条件控制的循环程序设计方条件,故采用条件控制的循环程序设计方法。法。 程序如下:程序如下:ORG 0200HMOV A, #0MOV R0, #21HLOOP:CJNE R0, #24H, NEXTSJMP EXITNEXT:INCAINC

26、R0SJMP LOOPEXIT:MOV 20H, ASJMP $ END 2多重循环程序设计多重循环程序设计【例【例4.11】设单片机运用】设单片机运用12MHz晶振机器晶振机器周期周期T为为1s,设计延时,设计延时1s的程序。的程序。分析:由于执行每条指令都需求一定的时间,分析:由于执行每条指令都需求一定的时间,其时间长短由指令周期和晶振频率决议其时间长短由指令周期和晶振频率决议t=机器周期数机器周期数12振荡周期。单条指振荡周期。单条指令的执行时间只需令的执行时间只需1到几个微秒,假设需求到几个微秒,假设需求较长时间的延时就需求执行多条指令,在较长时间的延时就需求执行多条指令,在单片机运用

27、中普通采用多重循环方式来实单片机运用中普通采用多重循环方式来实现。现。 程序如下:ORG 200HDEL1s:MOV R3,#10;单周期,1TDEL1: MOV R4,#200;单周期,1TDEL2: MOV R5,#248;单周期,1TDEL3: DJNZR5,DEL3;双周期,2TNOP;单周期,1TDJNZR4,DEL2;双周期,2TDJNZR3,DEL1;双周期,2TRET;双周期,2TEND【例【例4.12】将片内】将片内RAM 40H4FH单元的单元的16个无符个无符号数按从大到小的顺序陈列,排序后仍存放在原号数按从大到小的顺序陈列,排序后仍存放在原数据区中。数据区中。分析:这是

28、一个数据排序问题。分析:这是一个数据排序问题。 数据排序常用的方法有数据排序常用的方法有“冒泡法和冒泡法和“选择法选择法。下面采用。下面采用“冒泡法设计程序。冒泡法设计程序。 所谓所谓“冒泡法是指依次将两个相邻单元的内冒泡法是指依次将两个相邻单元的内容进展比较,假设符合由大到小的顺序,数据坚容进展比较,假设符合由大到小的顺序,数据坚持原状,否那么相邻单元的数据互换。经过一轮持原状,否那么相邻单元的数据互换。经过一轮比较以后,这一组数中最小的数曾经找出,存放比较以后,这一组数中最小的数曾经找出,存放于数据区的最后位置。然后再进展第二轮的比较,于数据区的最后位置。然后再进展第二轮的比较,循环终了时

29、找出次小数。继续循环,直到原数据循环终了时找出次小数。继续循环,直到原数据区中存放的是从大到小的排序的数组。区中存放的是从大到小的排序的数组。 例4.12程序流程图 ORG1000HSORT:MOV R0,#40H;置数组首地址;置数组首地址MOVR7,#10H;数据块长度;数据块长度CLRF0;交换标志清;交换标志清0DECR7;循环次数;循环次数SORT1:MOV A,R0;取前数;取前数MOV20H,A;把前数暂存在;把前数暂存在20H单元单元INCR0MOV21H,R0;后数暂存于;后数暂存于21H单元单元CJNEA,21H,SORT2;相邻两数比较;相邻两数比较SORT2:JNC S

30、ORT3 ;假设前数大于等于后数,转;假设前数大于等于后数,转SORT3MOVA,R0 ;假设前数小于后数,两者交换;假设前数小于后数,两者交换MOVR0,20HDECR0MOVR0,AINCR0;恢复;恢复R0原值原值SETBF0;置交换标志位为;置交换标志位为1SORT3 :DJNZ R7,SORT1;如计数器长度不为;如计数器长度不为0,那么继续比较,那么继续比较JB F0,SORT;假设判别标志位为;假设判别标志位为1,那么继续循环,否终了,那么继续循环,否终了循环循环 SJMP$END留意:对于循环构造程序设计,需求留意:留意:对于循环构造程序设计,需求留意:1在进入循环之前,应合理

31、设置循环初始变量。在进入循环之前,应合理设置循环初始变量。2循环体只能执行有限次,假设无限执行的话,称之为循环体只能执行有限次,假设无限执行的话,称之为“死循环,这是该当防止的。死循环,这是该当防止的。3不能破坏或修正循环体,要特别留意的是防止从循环不能破坏或修正循环体,要特别留意的是防止从循环体外直接跳转到循环体内。体外直接跳转到循环体内。4多重循环的嵌套是从外层向内层一层层进入,从内层多重循环的嵌套是从外层向内层一层层进入,从内层向外层一层层退出。不要在外层循环中用跳转指令直接转向外层一层层退出。不要在外层循环中用跳转指令直接转到内层循环休内。到内层循环休内。5循环体内可以直接转到循环体外

32、或外层循环中,实现循环体内可以直接转到循环体外或外层循环中,实现一个循环由多个条件控制终了的构造。一个循环由多个条件控制终了的构造。6对循环体的编程要仔细琢磨,合理安排,对其进展优对循环体的编程要仔细琢磨,合理安排,对其进展优化时,应主要放在缩短执行时间上,其次是程序的长度。化时,应主要放在缩短执行时间上,其次是程序的长度。4.2.5 子程序调用设计子程序调用设计1子程序的构造子程序的构造 在在MCS-51指令系统中,提供了两条子指令系统中,提供了两条子程序指令程序指令ACALL、LCALL以及一条前往主以及一条前往主程序的指令程序的指令RET。 一个子程序在运转的过程中还可以调一个子程序在运

33、转的过程中还可以调用其它的子程序,这称为子程序嵌套。用其它的子程序,这称为子程序嵌套。 2子程序设计时的本卷须知子程序设计时的本卷须知1每个子程序都应有独一的入口,子程序的每个子程序都应有独一的入口,子程序的第一条指令的地址称为入口地址。该指令前必需第一条指令的地址称为入口地址。该指令前必需有标号,最好以子程序的义务定名,以便主程序有标号,最好以子程序的义务定名,以便主程序正确的调用它。正确的调用它。2调用子程序的指令在主程序中,子程序以调用子程序的指令在主程序中,子程序以RET指令终了,这样才干前往主程序。指令终了,这样才干前往主程序。3子程序调用和前往指令能自动维护和恢复子程序调用和前往指

34、令能自动维护和恢复断点,但对于需求维护的存放器和内存单元的内断点,但对于需求维护的存放器和内存单元的内容,必需在子程序开场和末尾安排维护和恢复他容,必需在子程序开场和末尾安排维护和恢复他们的指令。们的指令。4为使所编的子程序可以放在为使所编的子程序可以放在64KB程序存储程序存储器的任何地方并能被主程序调用,子程序内部必器的任何地方并能被主程序调用,子程序内部必需运用相对转移指令而不运用其它转移指令,以需运用相对转移指令而不运用其它转移指令,以便汇编时生成浮动代码。便汇编时生成浮动代码。3参数传送方法参数传送方法 在调用子程序时会遇到主程序和子程在调用子程序时会遇到主程序和子程序之间参数如何传

35、送的问题。序之间参数如何传送的问题。 入口参数:主程序调用子程序时,传入口参数:主程序调用子程序时,传入子程序的参数称为入口参数。入子程序的参数称为入口参数。 出口参数:子程序运算出的结果称为出口参数:子程序运算出的结果称为出口参数。出口参数。 常用的参数传送方法有:任务存放器常用的参数传送方法有:任务存放器或累加器、指针存放器、堆栈和程序段等。或累加器、指针存放器、堆栈和程序段等。 【例【例4.13】用子程序调用的方法实现】用子程序调用的方法实现C=a2 + b2 ,假设,假设a、b均小于均小于10。a存于存于31H单元,单元,b存于存于32H单元单元 ,结果,结果C存于存于30H单元。单元。分析:由于分析:由于a、b均小于均小于10,那么它们的平方,那么它们的平方和为单字节数,由于此题两次用到平方的和为单字节数,由于此题两次用到平方的运算,所以把求平方运算设计成子程序。运算,所以把求平方运算设计成子程序。 子程序和主程序如下:子程序和主程序如下:ORG 1000HMAIN:MOV SP,#60H;设置堆栈指针;设置堆栈指针MOV A,31H;取;取a的值的值LCALL SQR;调子程序,求;调子程序,求a2MOV 30

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论