《汇编语言程序设计ppt课件.ppt》由会员分享,可在线阅读,更多相关《汇编语言程序设计ppt课件.ppt(45页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第5章 汇编语言程序设计教教学学目目的的:熟悉80C51系列单片机的汇编语言,能够熟练编写汇编语言源程序。教学重点:教学重点:常用汇编语言程序设计方法。教学难点:教学难点:分支程序、散转程序与子程序的设计 汇编语言汇编语言 图51 源程序、汇编程序、目的程序之间关系示意图 5.1 概概 述述v程序设计语言:机器语言、汇编语言、高级语言程序设计语言:机器语言、汇编语言、高级语言v机器语言不易识别和记忆,使用不便,很难用它机器语言不易识别和记忆,使用不便,很难用它来进行程序设计。来进行程序设计。5.1.1 程序设计语言程序设计语言 4-14-1 汇编程序约定汇编程序约定汇编语言程序:汇编语言程序:
2、用汇编语言编写的、用汇编语言编写的、完成特定功能的指令序列。完成特定功能的指令序列。汇编程序:汇编程序:能能将将汇汇编编语语言言源源程程序序转转换换成成机机器器语语言言目目标标程程序序的的系统软件。系统软件。汇编语言程序到机器语言程序的转换过程称为汇编。汇编语言程序到机器语言程序的转换过程称为汇编。1.手工汇编手工汇编:人工查指令表汇编。用于设计短小程序:人工查指令表汇编。用于设计短小程序或调试程序的场合。或调试程序的场合。2.机器汇编机器汇编:用汇编程序进行汇编:用汇编程序进行汇编。5.1.2 汇编语言规范高级语言:一种面向过程且独立于计算机硬高级语言:一种面向过程且独立于计算机硬件结构的通
3、用计算机语言件结构的通用计算机语言汇编语言格式与伪指令汇编语言格式与伪指令1)1)汇编语言源程序由以下两种指令构成汇编语言源程序由以下两种指令构成汇编语句(指令语句)汇编语句(指令语句)伪指令(指示性语句)伪指令(指示性语句)2)2)汇编语句的格式:汇编语句的格式:标号标号:操作码操作码操作数操作数;注释;注释3)伪指令:控制汇编用的特殊指令,这些指令不伪指令:控制汇编用的特殊指令,这些指令不属于指令系统,不产生机器代码。属于指令系统,不产生机器代码。2.80C51汇编程序设计中常用的伪指令v(1)ORG 汇编起始指令 v规定目标程序的起始地址,格式如下:标号 操作码 操作数v ORG 表达式
4、(exp)必须为16位地址v(2)EQU 赋值指令v把操作数段中的地址或数据赋值给标号,格式如下:v标号 操作码 操作数v字符名称 EQU 数或汇编符号 v例1 AA EQU R1 ;R1与AA等值v 则 MOV A,AA 指令与 MOV A,R1指令结果相同。(3)DB(3)DB 从指定单元开始定义(存储)若干个字节的数据从指定单元开始定义(存储)若干个字节的数据或或ASCIIASCII码字符,常用于定义码字符,常用于定义8 8位数据常数表。位数据常数表。格式:格式:操作码操作码 操作数操作数 DB DB 字节常数或字节常数或ASCIIASCII字符字符例例:ORGORG 1000H 100
5、0HDBDB34H34H,7373,A A,B BDBDB0AH0AH,0BH0BH,2020则则 (1000H1000H)34H 34H (1001H1001H)49H 49H (1002H1002H)41H 41H (1003H1003H)42H 42H (1004H1004H)0AH 0AH (1005H1005H)0BH0BH (1006H1006H)14H 14H(4)DW 定义字指令 定义程序存储器中存放的若干个字的数据或ASCII码字符16位常数表格式 DW。v例3 ORG 2200Hv DW 1246H,7BH,10v 则 (2200H)12H (2201H)46Hv (220
6、2H)00 (2203H)7BHv (2204H)00 (2205H)0AHv(5)BIT 定义位地址指令 v 格式 BITv 例4 ABC BIT P1.0v Q4 BIT P2.2v 则汇编后,位地址P1.0,P1.2分别赋给变量ABC和Q4。v(6)END 汇编结束指令(7)DATA定义标号数值为指令定义标号数值为指令 格式:格式:标号标号 操作码操作码 操作数操作数 符号名称符号名称 DATA 表达式表达式如如 MN DATA 3000H ;MN相当于相当于3000HDATA与与EQU的区别在于前者可以先使用后定义而的区别在于前者可以先使用后定义而后者不行,必须先定义才能使用。后者不行
7、,必须先定义才能使用。(8)DS定义存储空间指令定义存储空间指令 功能:从指定地址开始保留功能:从指定地址开始保留DS之后表达式的值所之后表达式的值所规定的存储单元。规定的存储单元。格式:格式:标号标号 操作数操作数 DS 表达式表达式例:例:P105 例例7判断框判断框 连接点连接点 图图:常用流程图符号常用流程图符号 美国国家标准化协会美国国家标准化协会ANSIANSI(American National American National Standard InstituteStandard Institute)设定了一些常用的流程图符号如图所示:)设定了一些常用的流程图符号如图所示:起
8、止框起止框 或或 流程线流程线输入输出框输入输出框 处理框处理框5.1.35.1.3 汇编语言程序设计步骤汇编语言程序设计步骤一一.分析工作任务、分析工作任务、确定方案和计算方法确定方案和计算方法二二.了解应用系统的硬件配置、性能指标。了解应用系统的硬件配置、性能指标。三三.建立系统数学模型,确定控制算法和操作步骤。建立系统数学模型,确定控制算法和操作步骤。四四.画程序流程图画程序流程图 表示程序结构和程序功能表示程序结构和程序功能 五五.编制源程序编制源程序1.1.合理分配存储器单元和了解合理分配存储器单元和了解I/OI/O接口地址。接口地址。2.2.按功能设计程序,明确各程序之间的相互关系
9、。按功能设计程序,明确各程序之间的相互关系。3.3.用注释行说明程序,便于阅读和修改调试和修改。用注释行说明程序,便于阅读和修改调试和修改。开始开始1 YN?52 顺序与循环程序设计 v5.2.1 顺序程序设计(又称简单程序)既无分支,又无循环,按照顺序执行既无分支,又无循环,按照顺序执行既无分支,又无循环,按照顺序执行既无分支,又无循环,按照顺序执行 可完成一定的基本功能,是编写复杂程序的可完成一定的基本功能,是编写复杂程序的可完成一定的基本功能,是编写复杂程序的可完成一定的基本功能,是编写复杂程序的基础基础基础基础 常用程序结构常用程序结构:顺序程序、循环程序、分支程序、查表程序、子程顺序
10、程序、循环程序、分支程序、查表程序、子程例例例例1 1:将一个字节内的两个将一个字节内的两个BCD码拆开并变成码拆开并变成ASCII码,码,存入两个存入两个RAM单元。单元。BCD码放在内码放在内RAM的的20H,转换后高半字节放到转换后高半字节放到21H,低字节放低字节放22H。BCDH BCDLBCDH BCDL0011001100110011ROMROM21H21H22H22H20H20HBCD码码09对应的对应的ASCII码为码为30H39H转换时,将转换时,将20H中的中的BCD码拆开,高四位置为码拆开,高四位置为“0011”即可。即可。BCDHBCDHBCDLBCDL上页上页下页下
11、页回目录回目录ASCII码码即:采用先把即:采用先把20H中低中低4位位BCD码交换出来加以转换、码交换出来加以转换、存放,然后再把高存放,然后再把高4位位BCD码交换至低码交换至低4位加以转换、位加以转换、存放。存放。程序:程序:程序:程序:0011 BCDH0011 BCDH0000 00000000 0000 MOV R0,#22H MOV R0,#0 MOV A,20H XCHD A,R0 ORL 22H,#30H SWAP A ORG 1000H ORL A,#30H MOV 21H,A SJMP$END;R0 22H;22H 0;两个两个BCD数送数送A;BCDL数送数送22H;完
12、成转换完成转换;BCDH数送数送A的低的低4位位;完成转换完成转换;存数存数BCDH BCDLBCDH BCDLBCDLBCDL0000000000110011BCDH BCDLBCDH BCDLROMROM21H21H22H22H20H20H00000000 BCDHBCDH00110011A上页上页下页下页回目录回目录R05.2.25.2.2 循环程序循环程序包含多次重复执行的程序段,循环结构使程序紧凑。包含多次重复执行的程序段,循环结构使程序紧凑。循环控制?循环工作循环结束循环初始化YN各个环节任务:各个环节任务:一一初始化部分(循环初态)初始化部分(循环初态)循环准备工作。如:清结果单
13、元、循环准备工作。如:清结果单元、设指针、设循环控制变量初值等。设指针、设循环控制变量初值等。二二循环体循环体循环工作部分:循环工作部分:需多次重复处理的工作。需多次重复处理的工作。循环控制部分:循环控制部分:1.1.修改指针和循环控制变量。修改指针和循环控制变量。2.2.检测循环条件:满足循环条件,继续循环,否则退出循环。检测循环条件:满足循环条件,继续循环,否则退出循环。三三.结束部分结束部分 处理和保存循环结果。处理和保存循环结果。允许允许0 0次循环的循环结构:在循环工作之前检测循环条件。次循环的循环结构:在循环工作之前检测循环条件。简单循环结构:循环体中不套循环简单循环结构:循环体中
14、不套循环。定时定时定时定时例例2 2:试计算下列程序段执行时间。:试计算下列程序段执行时间。程序程序 指令执行周期指令执行周期 MOV R7MOV R7,#64H#64H 1T1TLOOPLOOP:NOP NOP 1T1T NOP NOP 1T1T DJNZ R7 DJNZ R7,LOOP LOOP 2T2T解:上述程序显然属于循环程序,其算法结构解:上述程序显然属于循环程序,其算法结构如图所示。循环次数如图所示。循环次数100100次,根据每条指令的次,根据每条指令的执行周期可得每次循环消耗执行周期可得每次循环消耗1+1+2=41+1+2=4(机器周(机器周期),加上第一条指令,整个程序段共
15、计消耗期),加上第一条指令,整个程序段共计消耗时间为(时间为(4 4100+1100+1)T=401TT=401T,当晶振频率为,当晶振频率为6MHZ6MHZ时,时,T=2sT=2s,故上述程序实际消耗,故上述程序实际消耗802s802s。多重循环多重循环循环体中套循环结构。以双重循环使用较多。循环体中套循环结构。以双重循环使用较多。软件延时程序。软件延时程序。用循环程序将指令重复多次执行,实现软件延时。用循环程序将指令重复多次执行,实现软件延时。v试计算延时程序的执行时间。试计算延时程序的执行时间。v源程序源程序指令周期指令周期(M)(M)指令执行次数指令执行次数DELAYDELAY:MOV
16、 R6MOV R6,#64H#64H1 1I1I1:MOV R7 MOV R7,#0FFH#0FFH1 1I2I2:DJNZ R7 DJNZ R7,I2I22 2 DJNZ R6 DJNZ R6,I1I12 2 RET RET2 2延时时间计算:(设时钟延时时间计算:(设时钟f=12MHzf=12MHz,M=1sM=1s)t=(1t=(11+11+1100+2100+2100100255+2255+2100+2100+21)1)M=51.3 msM=51.3 ms1 11001001001002552551001001 1习题:习题:试计算延时程序的执行时间。试计算延时程序的执行时间。源程序源
17、程序指令周期指令周期(M)(M)指令执行次数指令执行次数DELAYDELAY:MOV R6MOV R6,#100#1001 1D1D1:MOV R7MOV R7,#10#101 1D2D2:NOPNOP1 1 DJNZ R7DJNZ R7,D2D22 2 DJNZ R6 DJNZ R6,D1D12 2 RET RET2 2计算延时程序的执行时间计算延时程序的执行时间(设时钟设时钟f=6MHz)f=6MHz)。53 分支程序设计v5.3.1 分支程序设计综述v分支程序应用要点是正确使用转移指令,通常有如下3种指令。v1.无条件转移:与以执行程序的结果无关,只要给出正确的转移目标地址或偏移量即可
18、v2.条件转移:根据已执行程序对特殊或特定存储器的影响结果来决定程序的走向。v3.散转:根据某种已输入的或运算的结果,是程序转到各个处理程序中 例3 设5AH单元中有一变量X,请编写计算下述函数式的程序,结果存入5BH单元vY=3X ,X 10vY=2X+10 ,10=X 155.3.2 无条件/条件转移程序 ORG 200H MOV A,5AH ADD A,5AH ;2XA MOV R1,A MOV A,5AH ;重新把X装入A CJNE A,#10,L1L1:JC L2 ;X15 CJNE A,#10H,L3 ;与16比L3:JNC L4 ;X15转L4 MOV A,R1 ADD A,#1
19、0 ;10X15,Y2X10 MOV R0,A SJMP L4L2:MOV A,R1 ADD A,5AH ;X10,Y=3X MOV R0,AL4:MOV 5BH,R0 ;存结果 SJMP$END例例例例4 4:空调机制冷时,若排出的空气温度比吸入的空气空调机制冷时,若排出的空气温度比吸入的空气 温度低温度低8则认为工作正常,否则便认为是故障,则认为工作正常,否则便认为是故障,并设置故障标志。并设置故障标志。解:解:解:解:为了可靠的监控空调机的工作情况,做两次减法:为了可靠的监控空调机的工作情况,做两次减法:第一次(第一次(40H)-(41H),若),若CY=1,则肯定有故障;则肯定有故障;
20、第二次两个温度的差值减去第二次两个温度的差值减去8,若,若CY=1,则肯定则肯定有故障有故障程序的流程图如下:程序的流程图如下:上页上页下页下页回目录回目录首先定义一些工作单元首先定义一些工作单元内部内部RAM40H41H42H吸入温度值吸入温度值排出温度值排出温度值故障标志故障标志A(40H)-(41H)CY=1?(A)-8ENDSTART Y NCY=1?42HFFH42H0 Y N流程图:流程图:上页上页下页下页回目录回目录故故 障障正常正常 ORG 1000HSTART:MOV A,40HCLR CSUBB A,41HJC ERRORMOV 42H,#0JC ERRORSUBB A,#
21、8SJMP EXITERROR:MOV 42H,#0FFHEXIT:SJMP$END程序:程序:;吸入温度值送;吸入温度值送A;0 CY;A(40H)-(41H);CY=1,则故障则故障;是则是则故障故障;温度小于温度小于8?;工作正常标志工作正常标志;转转出出口口;设置故障标志设置故障标志若若CY1顺顺序执行序执行CY=1转转移移CY=1转转移移若若CY1顺顺序执行序执行上页上页下页下页回目录回目录5.3.3 散转程序设计 v 例5 根据R3的内容,转向各个操作程序。v R30,转入OPR0v R31,转入OPR1.v R3n,转入OPRnv 解:程序清单如下。v MOV DPTR,TAB1
22、 ;跳转表首地址送数据指针v MOV A,R3 ;R32 A(修正变址值)v ADD A,R3v JNC NOAD ;判有否进位v INC DPH ;有进位则加到高字节地址vNOAD:JMP ADPTR ;转向形成的散转地址入口vTAB1:AJMP OPR0 ;转移到OPR0v AJMP OPR1.v AJMP OPRn5.4 5.4 查表程序查表程序上页上页 下页下页回目录回目录对于复杂参数的计算如对于复杂参数的计算如:非线性参数非线性参数对数、指数、三角函数对数、指数、三角函数微分、积分等微分、积分等用汇编编程十分困难用汇编编程十分困难甚至无法建立数学模型甚至无法建立数学模型用用查表查表的
23、方法简单容易的方法简单容易80C51指令系统中有两条指令具有极强的查表功能指令系统中有两条指令具有极强的查表功能(1)MOVC A,A+DPTR作作基址寄存器基址寄存器作作变址寄存器变址寄存器长查表指令长查表指令寻址寻址64KB(2)MOVC A,A+PC作基址寄存器作基址寄存器作变址作变址短查表指令短查表指令页内查表指令页内查表指令指向表格首址指向表格首址指向表格的第指向表格的第 i 项项16位数据指针位数据指针第第i项加项加变址调整值变址调整值不能不能例例6:一个十六进制数放在一个十六进制数放在HEX单元的低四位单元的低四位,将其转换成将其转换成ASCII码码 查表程序:查表程序:解:解:
24、十六进制十六进制 09 的的ASCII码为码为 30H39H,AF 的的ASCII码为码为 41H46H,利用查表指令利用查表指令 MOVC A,A+DPTRMOVC A,A+PC先用伪指令先用伪指令 DB 或或 DW 把表格的数据存入把表格的数据存入ROM上页上页下页下页回目录回目录来获得数据来获得数据ASCII码表格的首址为码表格的首址为ASCIITABASCTAB:DB 30H,31H,32H,33HDB 34H,35H,36H,37HDB 38H,39H,41H,42HDB 43H,44H,45H,46H END上页上页下页下页回目录回目录编程编程1:0 1 2 3 4 5 6 7 8
25、 9 A B C D E F ORG 0200HHEX EQU 30HHEXASC:MOV A,HEXMOV DPTR,#ASCTABMOVC A,A+DPTRMOV HEX,ARETANL A,#0FHDPTR(A)=333H(A)=1546H例1 设计一个将16进制数转换成ASCII码的子程序,设16进制数存放在R0的低4位,要求将转换后的ASCII码送回R0。vORG 30HvMOV A,R0vANL A,0FH;保留低4位vADD A,2 ;变址调整vMOVC A,APC;查表获取ASCII码值vMOV R0,AvRETvTAB:DB 30H,31H,32H,33H,34H,35HvD
26、B 36H,37H,38H,39H,41H,42H,43H,44H,45H,46Hv 5.5 子程序设计子程序设计一、子程序的概念一、子程序的概念把能完成某种基本操作并具有相同操作的程序段单独把能完成某种基本操作并具有相同操作的程序段单独 编成子程序。编成子程序。如:函数、如:函数、运算、代码转换、延时等运算、代码转换、延时等利用调用子程序指令(利用调用子程序指令(ACALL或或LCALL)和从子程序返回和从子程序返回指令指令RET使用子程序的优点使用子程序的优点 不必重复书写同样的程序,提高编程效率不必重复书写同样的程序,提高编程效率 程序的逻辑结构简单,便于阅读程序的逻辑结构简单,便于阅读
27、 缩短了源程序和目标程序的长度,节省了存储器空间缩短了源程序和目标程序的长度,节省了存储器空间 使程序模块化、通用化、便于交流共享资源使程序模块化、通用化、便于交流共享资源 便于按某种功能调试便于按某种功能调试上页上页下页下页回目录回目录二、调用子程序的要点二、调用子程序的要点 子程序开头的标号段必须有一个标志,该子程序开头的标号段必须有一个标志,该标志标志既是子程序既是子程序的的名字名字又是其又是其入口地址入口地址,以便主程序调用。,以便主程序调用。在主程序中利用指令在主程序中利用指令ACALL或或LCALL可转入子程序。可转入子程序。该指令具有保护该指令具有保护断点断点的功能的功能例如:调
28、用延时子程序例如:调用延时子程序LCALL(ACALL)DELY 子程序结尾必须使用一条从子程序返回指令子程序结尾必须使用一条从子程序返回指令RET,它,它具有恢复断点的功能具有恢复断点的功能LCALL addr16LCALL addr16;PC addr16;PC addr16 转向子程序转向子程序;(PC(PC)(PCPC)+3+3;SP (SP)+1SP (SP)+1,(SP),(SP)PC7 PC70 0;SP (SP)+1,(SP)SP (SP)+1,(SP)PC15PC158 8;在调用子程序之前,保护;在调用子程序之前,保护断点地址断点地址RETRET;PC15PC158 (SP
29、),8 (SP),(SPSP)(SPSP)-1-1;PC7PC70 (SP),0 (SP),(SPSP)(SPSP)-1-1主程序主程序CALL断点断点子程序子程序RET1、子程序的结构、子程序的结构上页上页下页下页回目录回目录子程序特点:功能上有通用性,结构子程序特点:功能上有通用性,结构上有独立性上有独立性2、正确的参数传递、正确的参数传递 在调用一个子程序时,主程序应先把有关参在调用一个子程序时,主程序应先把有关参数放到某些约定的位置(如累加器、工作寄存器数放到某些约定的位置(如累加器、工作寄存器等),子程序运行时,可以从约定的位置得到有等),子程序运行时,可以从约定的位置得到有关参数。
30、子程序结束前,也应把处理结果送到约关参数。子程序结束前,也应把处理结果送到约定位置定位置上页上页下页下页回目录回目录3、子程序的通用性、子程序的通用性 为了使程序具有一定的通用性,子程序的操为了使程序具有一定的通用性,子程序的操作对象应尽量采用地址或寄存器形式,而不用立作对象应尽量采用地址或寄存器形式,而不用立即数形式。即数形式。4、现场保护、现场保护 现场保护现场保护现场保护现场保护:如果子程序使用的寄存器与主程序使用的寄存器如果子程序使用的寄存器与主程序使用的寄存器 有冲突,在转入子程序前,特别是进行中断服务有冲突,在转入子程序前,特别是进行中断服务 子程序时,要进行现场保护。子程序时,要
31、进行现场保护。保护内容保护内容保护内容保护内容:主程序使用的内部主程序使用的内部 RAM 内容,各工作寄存器内容,内容,各工作寄存器内容,累加器累加器 A 和和 DPTR 以及以及 PSW 等寄存器内容。等寄存器内容。保护方式保护方式保护方式保护方式:将要保护的单元压入堆栈。将要保护的单元压入堆栈。上页上页下页下页回目录回目录中断保护时中断保护时:还可以用还可以用 RS1 RS0 来选择其他通用寄存器组,来选择其他通用寄存器组,以便保护主程序现场。以便保护主程序现场。R0 R75.5.2 子程序设计 v例1 用程序实现c a2b2。设a、b均小于10。a存在31H单元中,b存在32H单元,把c
32、存入33H单元。v 解:因本题二次用到平方值,所以在程序中采用把求平方的程序段编为子程序的方法。依题意编写主程序和子程序如下:地址 机器码 源程序 ORG 200H 200 75 81 3F MOV SP,3FH ;设堆栈指针 203 E5 31 MOV A,31H ;取a值 205 12 04 00 LCALL SQR ;求a2 208 F9 MOV R1,A ;a2值暂存R1 209 E5 32 MOV A,32H ;取b值 20B 12 04 00 LCALL SQR ;求b2 20E 29 ADD A,R1 ;求a2b2 20F F5 33 MOV 33H,A ;存入33H v;子程序
33、v 地址 机器码 源程序v ORG 400Hv 400 04 SQR:INC Av 401 83 MOVC A,APCv 402 22 RET v403 1 4 9 16 TAB:DB 0,1,4,9,16 v408 25 36 49 DB 25,36,49v40B 64,81 DB 64,81子程序的嵌套子程序的嵌套子程序的嵌套:子程序的嵌套:子程序的嵌套:子程序的嵌套:子程序中可调用其他子程序子程序中可调用其他子程序例如:例如:例如:例如:数据处理程序如下数据处理程序如下.MAIN:MOV SP,#5FACALL RLC4.;定义堆栈指针定义堆栈指针;处理过程处理过程;调用子程序调用子程序
34、;上页上页下页下页回目录回目录多重嵌套的过程多重嵌套的过程SPSP *PC0L *PC0H *PC1L*PC1H5FH60H61H62H63H64H65H*PC2H*PC2L主主主主程程程程序序序序 SUB1SUB1 SUB2SUB2 SUB3SUB3LCALL SUB1LCALL SUB1继继继继续续续续主主主主程程程程序序序序*PC0*PC0断点入栈断点入栈LCALL SUB2LCALL SUB2*PC1*PC1断点入栈断点入栈SPSPLCALL SUB3LCALL SUB3*PC2*PC2断点断点入栈入栈SPSPRETRETSPSP弹出断点弹出断点RETRET弹出断点弹出断点SPSPRE
35、TRET弹出断点弹出断点SPSP上页上页下页下页回目录回目录栈栈 底底 子程序与主程序的概念子程序与主程序的概念是相对的,在一个子程序中是相对的,在一个子程序中又可调用其它子程序,这就又可调用其它子程序,这就是子程序的多重嵌套。是子程序的多重嵌套。堆栈的设置是十分重要的堆栈的设置是十分重要的例例例例1 1 多字节无符号数减法子程序多字节无符号数减法子程序NSUB功能:功能:功能:功能:n n字节无符号数减法字节无符号数减法字节无符号数减法字节无符号数减法入口:入口:入口:入口:(R0)=被减数低字节指针(被减数低字节指针(R1)=减数低字节指针减数低字节指针(R7)=字节数字节数n出口出口出口
36、出口:(R0)=差数高字节地址指针差数高字节地址指针解解解解 :若被减数大于减数,则差为正数;若被减数小于若被减数大于减数,则差为正数;若被减数小于 减数,则差为补码数(负数),且差数为减数,则差为补码数(负数),且差数为n字节字节上页上页下页下页回目录回目录5.6 5.6 综合编程举例综合编程举例 流程图:流程图:0CY (R0)-(R1)-CY(R0)RETNSUB(R7)-1=0?修改地址指针修改地址指针(R0)+1R0,(,(R1)+1R1 NNSUB:CLR CLOOP:MOV A,R0 NOP MOV R0,ASUBB A,R1INC R0INC R1DJNZ R7,LOOPDEC
37、 R0RET程序:程序:上页上页下页下页回目录回目录例例例例2 2 双字节无符号数快速乘法子程序双字节无符号数快速乘法子程序MULD功能:功能:功能:功能:双字节无符号数乘法,积为双字节无符号数乘法,积为双字节无符号数乘法,积为双字节无符号数乘法,积为3232位位位位入口:入口:入口:入口:(R7R6)=被乘数被乘数ab(R5R4)=乘数乘数cd(R0)=有定义的内部有定义的内部RAM地址地址出口出口出口出口:(R0)=乘积的高字节地址指针乘积的高字节地址指针解解解解 :于两个双字节无符号数相乘,用于两个双字节无符号数相乘,用8位乘法指令来完成位乘法指令来完成需要四次,每次的乘积为需要四次,每
38、次的乘积为16位,会产生位,会产生4个部分积,共需个部分积,共需要要8个单元存放,然后再按个单元存放,然后再按“位权位权”相加,和即为所求之相加,和即为所求之积。这样所占存储单元太多,应该采用边乘边加的方法。积。这样所占存储单元太多,应该采用边乘边加的方法。用用R3、R2、R1作暂存器或工作单元。作暂存器或工作单元。上页上页下页下页回目录回目录 R6 b b R7 a a R4 d d R5 c c编程思路与手乘法相似:编程思路与手乘法相似:被乘数被乘数乘数乘数上页上页下页下页回目录回目录 R6 b b R4 d dbdHbdHbdLbdL R7 a aadHadHadLadL R5 c cb
39、cLbcLbcHbcHacLacLacHacHbdLbdLacHacHbdH+adL+bcLbdH+adL+bcLadH+bcH+acLadH+bcH+acL相乘过程相乘过程上页上页下页下页回目录回目录MULD:MOV A,R6MOV B,R4MUL ABMOV R0,AMOV R3,BMOV A,R7MOV B,R4MUL ABADD A,R3MOV R3,AMOV A,BADDC A,#0MOV R2,AMOV A,R6MOV B,R5MUL ABADD A,R3 程序程序;bd;存积存积70,bdL(R0);adL+bdH;暂存,暂存,adL+bdHR3;ad;adHA;bcL+adL+
40、bdH;adH+cyA;bc;暂存,暂存,adH+cyR2;上页上页下页下页回目录回目录INC R0MOV R0,AMOV R1,#0MOV A,R2ADDC A,BMOV R2,AJNC LASTINC R1LAST:MOV A,R7MOV B,R5MUL ABADD A,R2INC R0MOV R0,AMOV A,BADDC A,R1INC R0MOV R0,ARET;用用R1记录记录cy;bcH+adH+cy;存积存积158,bcL+adL+bdH(R0+1);暂存,暂存,bcH+adH+cyR2;cy=0,则转则转LAST;R0+1;cy=1,则(则(R1)=1;ac;acL+bcH+
41、adH+cy;(R0+3);R0+2;acH+cy;存积存积2316,acL+bcH+adH+cy(R0+2);存积存积3124,acH+cy(R0+3)上页上页下页下页回目录回目录例3 P1.0端口输出1kHZ和2kHZ的变频音调,每隔1S交替变换一次。vDLV:MOV R2,08 ;1kHZ的持续时间vDLV1:MOV R3,0FAH vDLV2:CPL P1.0 ;输出1kHZ方波v LCALL D0.5ms ;延时D0.5ms,省略 v DJNZ R3,DLV2v DJNZ R2,DLV1 ;持续1sv MOV R2,#16vDLV3:MOV R3,#0FAHvDLV4:CPL P1.0 ;输出2kHZ方波v LCALL D0.25ms v DJNZ R3,DLV4v DJNZ R2,DLV3 ;持续1sv SJMP DLV ;反复循环