第四章汇编语言程序设计优秀课件.ppt

上传人:石*** 文档编号:64369515 上传时间:2022-11-29 格式:PPT 页数:103 大小:7.20MB
返回 下载 相关 举报
第四章汇编语言程序设计优秀课件.ppt_第1页
第1页 / 共103页
第四章汇编语言程序设计优秀课件.ppt_第2页
第2页 / 共103页
点击查看更多>>
资源描述

《第四章汇编语言程序设计优秀课件.ppt》由会员分享,可在线阅读,更多相关《第四章汇编语言程序设计优秀课件.ppt(103页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第四章 汇编语言程序设计第1页,本讲稿共103页4.1.1 MCS-51汇编语言伪指令汇编语言伪指令 伪伪指指令令不不属属于于指指令令系系统统,汇汇编编后后不不会会产产生生机机器器码码,只只用用来来对对汇汇编编过过程程进进行行控控制制或或提提供供某某些些汇汇编编信信息息。如如:规规定定汇汇编编生生成成的的目目标标代代码码在在内内存存种种的的存存放放区区域域,给给源源程程序序中中的的符符号号和和标标号号赋赋值值以以及及指指示示汇汇编编的的结结束束等等。但但它它不不会会令令计计算算机机做做任任何何操操作作,没没有有对对应应的的机机器器语语言言代代码码,由由于于它它有有指指令令的的形形式式而而无无指

2、指令令的的实实质质,所所以以称称“伪伪”指令。指令。4.1 汇编语言程序设计方法汇编语言程序设计方法第2页,本讲稿共103页4.1.3 MCS-51汇编语言伪指令汇编语言伪指令 1ORG(Origin)汇编起始地址命令汇编起始地址命令 功能:用于规定目标程序的起始地址。功能:用于规定目标程序的起始地址。格式:格式:标号:标号:ORG 地址地址 地址项:地址项:16位绝对地址,也可以用标号或表达式表示。位绝对地址,也可以用标号或表达式表示。如果不用如果不用ORG规定,则汇编得到的目标程序将从规定,则汇编得到的目标程序将从0000H开始。开始。第3页,本讲稿共103页一个源程序中,可多次使用一个源

3、程序中,可多次使用ORG指令以规定不同程序段指令以规定不同程序段的起始位置。地址应从小到大顺序排列,不允许重叠。的起始位置。地址应从小到大顺序排列,不允许重叠。例如:例如:ORG 0000HLJMP MAINORG 4200HMAIN:MOV A,30H 第4页,本讲稿共103页2DB(Define Byte)字节定义伪指令)字节定义伪指令 功功能能:用用于于从从指指定定的的地地址址单单元元开开始始,在在程程序序存存储储器器中中定定义义字节数据。字节数据。格式:格式:标号:标号:DB 8位数表位数表 例如例如:DB “how are you?”常常使使用用本本命命令令存存放放数数据据表表格格,

4、例例如如存存放放数数码码管管显显示示的的十十六六进制数的字形码,可使用多条进制数的字形码,可使用多条DB命令定义:命令定义:DB C0H,F9H,A4H,B0HDB 99H,92H,82H,F8H DB80H,90H,88H,83H DBC6H,A1H,86H,84H第5页,本讲稿共103页 3DW(Define Word)字定义伪指令字定义伪指令 功功能能:用用于于从从指指定定地地址址开开始始,在在程程序序存存储储器器单单元元中中定定义义16位位的数据字。的数据字。格式:格式:标号:标号:DW 16位数表位数表 存放规则:高存放规则:高8位在前(低地址),低位在前(低地址),低8位在后(高地

5、址)。位在后(高地址)。例:例:DW 100H,1ACH,-814 ;按顺序存;按顺序存01H,00H,01H,ACH,D2H,FCH DW“AA”;存入;存入41H,41H DW“A”;存入;存入00H,41H DW “ABC”;不合法,因是两个字节;不合法,因是两个字节 第6页,本讲稿共103页查表时,为确定数据区的起始位置,可采用两种方法:查表时,为确定数据区的起始位置,可采用两种方法:(1)根据)根据DB命令前一条指令的地址确定。命令前一条指令的地址确定。例:例:8100H MOV A,#49H (1字节)字节)TAB:DB C0H,F9H,A4H,B0H (2)使用)使用ORG 指令

6、专门规定指令专门规定例:例:ORG 8100H TAB:DB C0H,F9H,A4H,B0H 定义的数码管字形码从定义的数码管字形码从8100地址开始存放。地址开始存放。第7页,本讲稿共103页 注意:注意:DB和和DW定义的数表,数的个数不得超过定义的数表,数的个数不得超过80个。个。如果数据的数目较多时,可使用多个定义命令。如果数据的数目较多时,可使用多个定义命令。在在 MCS-51程序设计应用中,常以程序设计应用中,常以DB定义数据,定义数据,以以DW定义地址。定义地址。第8页,本讲稿共103页4DS(Define Storage)定义存储区伪指令定义存储区伪指令 功功能能:用用于于从从

7、指指定定地地址址开开始始,保保留留指指定定数数目目的的字字节节单单元元为为存存储区,供程序运行使用。汇编时对这些单元不赋值。储区,供程序运行使用。汇编时对这些单元不赋值。格式:格式:标号:标号:DS 16位数表位数表 例:例:ADDRTABL:DS 20 例:例:ORG 8100H DS 08H注注意意:对对MSC-51单单片片机机来来说说,DB、DW、DS命命令令只只能能对对程程序序存储器使用,不能对数据存储器使用。存储器使用,不能对数据存储器使用。第9页,本讲稿共103页5EQU(Equate)赋值伪指令赋值伪指令 功功能能:用用于于给给字字符符名名称称赋赋予予一一个个特特定定值值。赋赋值

8、值以以后后,其其值值在在整个过程中有效。整个过程中有效。格式:格式:字符名称字符名称 EQU 赋值项赋值项 “赋值项赋值项”:可以是常数、地址、标号或表达式。:可以是常数、地址、标号或表达式。8位位或或16位位二二进进制制数数。赋赋值值以以后后的的字字符符名名称称即即可可作地址使用,也可作立即数使用。作地址使用,也可作立即数使用。PA8155 EQU 8001H给标号给标号PA8155赋值赋值8001H。第10页,本讲稿共103页6BIT 定义位地址符号伪指令定义位地址符号伪指令 功能:功能:用于给字符名称赋以位地址。用于给字符名称赋以位地址。格式:格式:字符名称字符名称 BIT 位地址位地址

9、 例如:例如:AAA BIT 40HBBB BIT 50H 其中其中“位地址位地址”可以是绝对地址,也可以是符号地址。可以是绝对地址,也可以是符号地址。第11页,本讲稿共103页7END(END of assembly)汇编终止命令)汇编终止命令 功能:用于终止源程序的汇编工作。功能:用于终止源程序的汇编工作。END之后的指令,汇编程序不予处理。之后的指令,汇编程序不予处理。格式:格式:标号:标号:END 表达式表达式 只只有有主主程程序序模模块块才才有有“表表达达式式”项项,且且“表表达达式式”的的值值等等于于该该程程序序模模块块的的入入口口地地址址。而而其其他他程程序序模模块块就就没没有有

10、“表表达达式式”项项。“标号:标号:”也是选择项。也是选择项。一个源程序只能有一个一个源程序只能有一个END命令。命令。第12页,本讲稿共103页 4.1.2 程序的设计步骤与方法程序的设计步骤与方法 汇编和高级语言程序设计的过程:汇编和高级语言程序设计的过程:首首先先对对问问题题进进行行分分析析,然然后后确确定定算算法法,再再根根据据算算法法流程编写程序,最后是调试程序。流程编写程序,最后是调试程序。汇编语言程序设计的汇编语言程序设计的独特点独特点在于:在于:(1)用用汇汇编编语语言言进进行行程程序序设设计计时时,对对数数据据的的存存放放、寄寄存存器器和和工工作作单单元元的的使使用用等等要要

11、由由设设计计者者安安排排。而而高高级级语语言言程程序序设设计计时,这些工作都由计算机软件安排,程序设计者不必考虑。时,这些工作都由计算机软件安排,程序设计者不必考虑。第13页,本讲稿共103页(2)汇编语言程序设计要求设计人员必须对所使用的汇编语言程序设计要求设计人员必须对所使用的计算机的硬件结构有较为详细的了解计算机的硬件结构有较为详细的了解。特别是对。特别是对各类各类寄存器、端口、定时器寄存器、端口、定时器/计数器、中断等计数器、中断等内容要熟悉,内容要熟悉,以便在程序设计时能熟练使用。以便在程序设计时能熟练使用。第14页,本讲稿共103页汇编语言程序的设计步骤:汇编语言程序的设计步骤:(

12、1)分析问题,抽象出描述问题的数学模型)分析问题,抽象出描述问题的数学模型(2)确定解决问题的算法)确定解决问题的算法(3)根据算法绘制流程图)根据算法绘制流程图(4)分配存储空间及工作单元)分配存储空间及工作单元(5)编写源程序)编写源程序(6)上机调试)上机调试第15页,本讲稿共103页程序质量的判断标准:程序质量的判断标准:程序的执行时间短;占用的内存单元少;程序的语句行程序的执行时间短;占用的内存单元少;程序的语句行数少。数少。第16页,本讲稿共103页4.1.3 汇编语言源程序的编辑和汇编汇编语言源程序的编辑和汇编1.汇编语言源程序的编辑汇编语言源程序的编辑编辑好的源程序应以“.AS

13、M”扩展名存盘 2.汇编语言源程序的汇编汇编语言源程序的汇编源程序经机器汇编之后,若无语法错误,一般将生成两个新文件,它们的扩展名分别是.OBJ和.LST。第17页,本讲稿共103页例例4-1 将内部将内部RAM从从30H开始的开始的10个单元的内容相加,个单元的内容相加,其和保存于其和保存于A(假设其和仍为(假设其和仍为8位数)。位数)。列表文件(列表文件(.LST)信息如下:)信息如下:地址地址 机器码机器码汇编语言源程序汇编语言源程序 注释注释 ORG2000H ;定义程序起始地址;定义程序起始地址2000 7830 START:MOVR0,#30H;初始地址送;初始地址送R02002

14、7A0A MOVR2,#10;循环初始值送;循环初始值送R22004 7400 MOVA,#00H;累加和初始值送;累加和初始值送A2006 26 LOOP:ADDCA,R0;完成累加;完成累加2007 08 INCR0 ;修改地址;修改地址2008 DAFC DJNZR2,LOOP;循环判断;循环判断200A 80FE SJMP$;暂停;暂停 END ;程序结束;程序结束INCLUDE IN HASHTABSTART:2000LOOP:2006目标文件(目标文件(.OBJ)信息如下:)信息如下:2000200C78307A0A74002608DAFC80FE 第18页,本讲稿共103页方方法

15、法一一:用用逻逻辑辑指指令令将将高高、低低半半字字节节分分开开,对对数数字字09加加上上30H即即可可得得到到所所对对应应的的ASCII码码30H39H。ORG2000HMOVA,40H;取数;取数ANLA,#0FH;分离出低半字节;分离出低半字节ADDA,#30H;变为;变为ASCII码码MOV42H,A;保存;保存MOVA,40H;重新取数;重新取数SWAPA;高、低半字节交换;高、低半字节交换ANLA,#0FH;分离出高半字节;分离出高半字节ADDA,#30H;变为;变为ASCII码码MOV41H,A;保存;保存END例例4-2 将将40H单元的高、低半字节的两个单元的高、低半字节的两个

16、BCD码拆开并变码拆开并变成其成其ASCII码,并分别存入码,并分别存入41H和和42H单元单元 第19页,本讲稿共103页汇编语言程序共有四种结构形式:汇编语言程序共有四种结构形式:顺序结构、循环结构、分支结构顺序结构、循环结构、分支结构和子程序结构。和子程序结构。第20页,本讲稿共103页方法二:采用方法二:采用BCD数除以数除以10H的方法,可把处于高、低半字节的两个的方法,可把处于高、低半字节的两个BCD码分别移到码分别移到A和和B的的低低4位,然后再各自与位,然后再各自与30H相相“或或”即变为即变为ASCII码。参考程序如下:码。参考程序如下:ORG2000HMOVA,40H;取数

17、;取数MOVB,#10H;送被除数;送被除数DIVAB;分离高、低半字节;分离高、低半字节ORLB,#30H;低;低4位调整为位调整为ASCII码码MOV42H,BORLA,#30H;高;高4位调整为位调整为ASCII码码MOV41H,AEND例例4-2 将将40H单元的高、低半字节的两个单元的高、低半字节的两个BCD码拆开并变码拆开并变成其成其ASCII码,并分别存入码,并分别存入41H和和42H单元单元 第21页,本讲稿共103页例例 求两个求两个8位无符号数的和。位无符号数的和。设设两两个个8位位无无符符号号数数分分别别存存放放在在内内部部RAM 20H和和21H单单元元,所所求求和和(

18、不不超超过过255)存放在存放在22H单元。单元。ORG 2000HSTART:MOV R0,#20HMOVA,R0INCR0ADDA,R0INC R0MOVR0,ASJMP$END第22页,本讲稿共103页4.2.5 循环程序设计循环程序设计 循环初态循环初态第23页,本讲稿共103页 循环程序一般由四个主要部分组成循环程序一般由四个主要部分组成:(1)初初始始化化部部分分:为为循循环环程程序序做做准准备备,如如规规定定循循环环次次数数、给各变量和地址指针预置初值。给各变量和地址指针预置初值。(2)处处理理部部分分:为为反反复复执执行行的的程程序序段段,是是循循环环程程序序的的实实体体,也是

19、循环程序的主体。也是循环程序的主体。(3)循循环环控控制制部部分分:这这部部分分的的作作用用是是修修改改循循环环变变量量和和控控制制变变量量,并并判判断断循循环环是是否否结结束束,直直到到符符合合结结束束条条件件时时,跳跳出出循循环环为止。为止。(4)结束部分结束部分:这部分主要是对循环程序的结果进行分析、这部分主要是对循环程序的结果进行分析、处理和存放。处理和存放。第24页,本讲稿共103页循环:单重循环循环:单重循环 多重循环(二重以上)循环嵌套。多重循环(二重以上)循环嵌套。在在多多重重循循环环程程序序中中,只只允允许许外外重重循循环环嵌嵌套套内内重重循循环环程程序序,而而不不允允许许循

20、循环环体体互互相相交交叉叉,另另外外,也也不不允允许许从从循循环环程程序序的外部跳入循环程序的内部。的外部跳入循环程序的内部。第25页,本讲稿共103页例例4-3 把外部把外部RAM 5000H50FFH单元的内容清零。单元的内容清零。ORG 2000HSTART1:MOV DPTR,#5000H;循环初始化;循环初始化MOV R0,#00HMOV A,#00HLOOP1:MOVXDPTR,A;循环体;循环体INCDPTRINCR0CJNE R0,#00H,LOOP1;循环控制;循环控制END第26页,本讲稿共103页例例4-4 将内部将内部RAM从从40H开始连续单元的数据传送到外部开始连续

21、单元的数据传送到外部RAM从从2000H开始开始的连续单元中,当所传送的数据为的连续单元中,当所传送的数据为0FFH时,传送停止。时,传送停止。解:解:ORG2000H MOV R0,#40H ;循环初始化;循环初始化MOVDPTR,#2000HLOOP:MOV A,R0 CJNE A,#0FFH,LOOP1 ;循环控制;循环控制 SJMPNEXTLOOP1:MOVX DPTR,A;循环体;循环体 INC R0 INC DPTR SJMP LOOP NEXT:SJMP$END 第27页,本讲稿共103页例例4-5 从从P1口重复口重复256次读数并取平均值,平均值的整数和小数部分分别保存于内部

22、次读数并取平均值,平均值的整数和小数部分分别保存于内部RAM的的30H和和31H单元中。单元中。解:假设将解:假设将R2 R3作为作为16位寄存器以保存连续位寄存器以保存连续 256次读数的累加和次读数的累加和 ORG 4000HINTEGER EQU30HDECIMAL EQU31HAVR:MOV R2,#0;循环初始化;循环初始化 MOV R3,#0 MOV R4,#0;累加次数为;累加次数为256AVR1:MOV A,P1;循环体;循环体 ADD A,R3;累加至低;累加至低 8位位 JNC AVR2;无进位则暂存结果;无进位则暂存结果 INC R2;有进位则高;有进位则高8位加增位加增

23、 1AVR2:MOV R3,A ;暂存低;暂存低 8位位 DJNZ R4,AVR1;循环控制;循环控制 MOV INTEGER,R2MOVDECIMAL,R3END第28页,本讲稿共103页例例 设设单单片片机机外外部部数数据据存存储储器器起起始始地地址址为为3000H的的数数据据块块中中有有100个个补补码码,要要求求逐逐一一检检查查,若若为为负负数数则则求求补补后后放放回回,正正数数则则不不变。变。ORG 1000HSTART1:MOVR7,#64H;设设置循置循环环初始初始值值MOVDPTR,#3000HLOOP1:MOVX A,DPTR JNBACC.7,LOOP2CPLAINCAMO

24、VX DPTR,ALOOP2:INCDPTR;外部;外部RAM单单元加元加1DJNZ R7,LOOP1END第29页,本讲稿共103页例例 有有10个无符号数依次存放在内部个无符号数依次存放在内部RAM 30H开始的单元中,求其和,并将结果放在开始的单元中,求其和,并将结果放在R2和和R3中。中。ORG 2000HMOVR0,#30HMOVR2,#00HMOVR3,#00HMOVR7,#0AHNEXT:MOVA,R0;设设置循置循环环初始初始值值ADDA,R3MOVR3,AMOVA,R2ADDCA,#00HMOVR2,AINCR0DJNZR7,NEXTSJMP$END第30页,本讲稿共103页

25、例例4.6 设设MCS-51单单片片机机的的时时钟钟频频率率为为fosc=12 MHz,试试设设计计延时延时50ms的延时程序。的延时程序。延延时时程程序序所所花花费费的的时时间间是是该该程程序序指指令令的的总总机机器器周周期期数数与与机机器周期的乘积。器周期的乘积。通常,延时程序采用通常,延时程序采用MOV和和DJNZ指令来实现。指令来实现。单循环延时程序,最大的循环次数位单循环延时程序,最大的循环次数位256,则程序段为:,则程序段为:MOV R0,#00H ;机器周期数为;机器周期数为1 DJNZ R0,$;机器周期数为;机器周期数为2若单片机晶振为若单片机晶振为12MHz,则一个机器周

26、期为,则一个机器周期为1us。延时时间:(延时时间:(1+2562)1s513s。需采用多重循环。需采用多重循环。第31页,本讲稿共103页 多重循环多重循环:在一个循环体中又包含了其它的循环程序。在一个循环体中又包含了其它的循环程序。这种方式是实现延时程序的常用方法。这种方式是实现延时程序的常用方法。使用多重循环时使用多重循环时,必须必须注意注意:(1)循环嵌套循环嵌套,必须层次分明必须层次分明,不允许产生内外层循环交叉。不允许产生内外层循环交叉。(2)外外循循环环可可以以一一层层层层向向内内循循环环进进入入,结结束束时时由由里里往往外外一一层层层层退退出出。(3)内内循循环可以直接转入外循

27、环环可以直接转入外循环,实现一个循环由多个条件控制的循环结构方式。实现一个循环由多个条件控制的循环结构方式。第32页,本讲稿共103页MOV R1,#M LOOP:MOV R2,#NNOPDJNZ R2,$DJNZ R1,LOOP内内层层循循环环的的机机器器周周期期数数为为Tn=1+1+2*N,总总机机器器周周期期数数为为Tm(Tn+2)*M+1.设设N=123,M=200,则延时时间为,则延时时间为50.001ms。第33页,本讲稿共103页修改后程序清单:修改后程序清单:ORG 2000HMOV R1,#0C8H(200)LOOP:MOV R2,#7BH(123)NOPDJNZ R2,$D

28、JNZ R1,LOOPSJMP$END第34页,本讲稿共103页补充例补充例 设三字节无符号数相加设三字节无符号数相加被加数:内部被加数:内部RAM 22H20H单元(低位在低字节),单元(低位在低字节),加数:加数:内部内部RAM 32H30H单元(低位在低字节),单元(低位在低字节),结结果果:存存于于内内部部RAM 22H20H单单元元,进进位位位位存存于于23H单单元。元。利用利用ADDC指令进行多字节加法运算。指令进行多字节加法运算。第35页,本讲稿共103页ORG 4200H MOV R0,#20H;被加数的低字节地址;被加数的低字节地址MOV R1,#30H;加数的低字节地址;加

29、数的低字节地址MOV R2,#03H;循环次数;循环次数CLRCLOOP:MOV A,R0ADDC A,R1;低字;低字节节相加相加MOV R0,A;存放字;存放字节节相加相加结结果果INC R0INC R1DJNZ R2,LOOP;循;循环环控制控制MOV A,#00HADDC A,#00HMOV R0,A;进进位位送位位送23HEND第36页,本讲稿共103页4.2.3 分支程序分支程序 分支程序的基本结构:单分支和多分支。分支程序的基本结构:单分支和多分支。其特点是:各处理模块是相互排斥的。其特点是:各处理模块是相互排斥的。第37页,本讲稿共103页13条条件转移指令,条条件转移指令,分

30、别为分别为:JZ,JNZ:累加器判零转移指令;累加器判零转移指令;CJNE:比较条件转移指令;比较条件转移指令;DJNZ:减减1条件转移指令条件转移指令;JC,JNC,JB,JNB,JBC:位控制条件转移指令等四类。位控制条件转移指令等四类。第38页,本讲稿共103页(1)单重分支结构单重分支结构例例4-7 片片内内RAM DATA1和和DATA2两两个个单单元元中中各各存存有有一一个个无符号数字,将两个数中的小者存入无符号数字,将两个数中的小者存入MIN单元。单元。ORG 4000HMINEQU30HDATA1EQU31HDATA2EQU32HMOVA,DATA1;第一数送;第一数送ACLR

31、CCJNEA,DATA2,UNEQU;两数比较;两数比较SJMPSTORE;相等,;相等,DATA1作为小的数作为小的数UNEQU:JCSTORE;有借位,;有借位,DATA1为小为小MOVA,DATA2;无借位,;无借位,DATA2为小为小STORE:MOVMIN,A;小者送;小者送RAMEND第39页,本讲稿共103页例例4-8 片内片内RAM两个单元中存有不相等的有符号数字两个单元中存有不相等的有符号数字X和和Y,比较两数的大小,并将大数存入,比较两数的大小,并将大数存入MAX单元。单元。若若X-Y0,则当(,则当(OV)0时,时,XY;当(当(OV)1时,时,XY;若若X-Y0,则当(

32、,则当(OV)0时,时,XY;当(当(OV)1时,时,XY。图4-6 例4-8的流程图第40页,本讲稿共103页例例4-8 片内片内RAM两个单元中存有不相等的有符号数字两个单元中存有不相等的有符号数字X和和Y,比较两数的大小,并将大数存入,比较两数的大小,并将大数存入MAX单元。单元。ORG1000HXDEQU31HYDEQU32HMAXEQU30HCLRCMOVA,XDSUBBA,YD;X-Y,形成,形成OV标志标志JZXMAX;若;若X=Y,则转向,则转向FINISH JBACC.7,NEG;若;若(X-Y)X,存存YSJMPFINISHXMAX:MOVA,XD;XY,存存XFINISH

33、:MOVMAX,A;大数送;大数送MAX单元单元END第41页,本讲稿共103页(2)多重分支结构)多重分支结构例例 设设x,y分别存放在内部分别存放在内部RAM 30H和和40H中,根据中,根据x的值,的值,给给y赋值为赋值为01H,00H,0FFH(-1).第42页,本讲稿共103页第43页,本讲稿共103页ORG 2000HMOV A,30HJZDONEJBACC.7,LOOPMOV A,#01HSJMP DONELOOP:MOV A,#0FFHDONE:MOV 40H,ASJMP$END 第44页,本讲稿共103页(3)散转结构散转结构例例 设设R7的的内内容容为为0n,对对应应的的处

34、处理理程程序序入入口口地地址址分分别别为为PROG0PROGn,编写散转程序。,编写散转程序。跳转方法:逐个比较,类似跳转方法:逐个比较,类似CASE。使用散转指令使用散转指令JMP A+DPTR。设(设(R7)0 n,对应的处理程序入口地址分别为,对应的处理程序入口地址分别为 PROG0PROGn,且按照一定的规律排列,且按照一定的规律排列。第45页,本讲稿共103页 ORG 2000H MOV DPTR,#TAB ;设置处理程序入口首地址;设置处理程序入口首地址 MOV A,R7 CLRC RLC A ;JNCNEXT INCDPHNEXT:JMP A+DPTR ;转向形成的散转地址入口;

35、转向形成的散转地址入口 TAB:AJMP PROG0 ;直接转移地址表;直接转移地址表 AJMP PROG1 AJMP PROGn第46页,本讲稿共103页例例4-9 在在内内部部RAM 20H和和21H单单元元中中有有两两个个无无符符号号的的数数,由由22H中中的的值值决决定定对对该该数数完完成成加加、减减、乘乘或或除除运运算算(20H单单元元的的数数为为被减数或被除数),运算规则及结果保存处见表被减数或被除数),运算规则及结果保存处见表4-1。表表4-1 例例4-9说明说明(22H)操作操作结果保存处结果保存处0加加30H(低字节),(低字节),31H(高字节高字节)1减减40H2乘乘50

36、H(低字节),(低字节),51H(高字节高字节)3除除60H(余数),(余数),61H(商商)第47页,本讲稿共103页ORG1000HMOVA,22HMOVB,21HRLAMOVDPTR,#TABJMPA+DPTRNOPTAB:AJMPADDM;散转表;散转表AJMPSUBMAJMPMULMAJMPDIVMADDM:MOVA,20H;加法运算;加法运算ADDA,BMOV30H,AMOVA,#0ADDCA,#0MOV31H,ASJMPFINISH第48页,本讲稿共103页SUBM:MOVA,20H;减法运算;减法运算SUBBA,BMOV40H,ASJMPFINISHMULM:MOVA,20H;

37、乘法运算;乘法运算MULABMOV51H,B MOV50H,ASJMPFINISHDIVM:MOVA,20H;除法运算;除法运算DIVABMOV61H,AMOV60H,BFINISH:END第49页,本讲稿共103页 4.2.4 子程序设计子程序设计 子子程程序序与与一一般般程程序序的的主主要要区区别别是是在在子子程程序序的的末末尾尾有有一一条条子子程程序序返返回回指指令令(RET),其其功功能能是是执执行行完完子子程程序序后后通通过过将将堆堆栈栈内内的的断断点点地地址址弹弹出出到到PC而而返返回回到到主程序中。主程序中。在编写子程序时应注意以下几点:在编写子程序时应注意以下几点:(1)要给每

38、个子程序赋一个名字。要给每个子程序赋一个名字。实际上是一个入口地址的代号。实际上是一个入口地址的代号。(2)在子程序的末尾必须有子程序返回指令)在子程序的末尾必须有子程序返回指令RET。(3)要能正确地传递参数。要能正确地传递参数。首首先先要要有有入入口口条条件件,说说明明进进入入子子程程序序时时它它所所要要处处理理的的数数据据如如何何得得到到,另另外外,要要有出口条件,即处理的结果是如何存放的。有出口条件,即处理的结果是如何存放的。第50页,本讲稿共103页(4)注意保护现场和恢复现场。注意保护现场和恢复现场。注意保存主程序和子程序共同涉及的,但值不同的累加器、寄存器和单元的注意保存主程序和

39、子程序共同涉及的,但值不同的累加器、寄存器和单元的内容。内容。保护现场:保护现场:PUSH 恢复现场:恢复现场:POP(5)注意子程序的通用性。注意子程序的通用性。主程序调用子程序的指令:主程序调用子程序的指令:“LCALL”,“ACALL”。子程序返回指令:子程序返回指令:RET。子程序可以嵌套,子程序可以嵌套,嵌套次数从理论上说是无限的,但实际上由于受堆栈深度的影嵌套次数从理论上说是无限的,但实际上由于受堆栈深度的影响,嵌套次数是有限的。响,嵌套次数是有限的。第51页,本讲稿共103页例例4-10 在图在图3-11 的的P1口与口与LED的连接示意图中,若使得的连接示意图中,若使得LED0

40、LED7依次点亮,其延时时间分别从依次点亮,其延时时间分别从1s至至8s,LED7点亮点亮之后又从之后又从LED0开始循环。编写汇编语言源程序实现该功能开始循环。编写汇编语言源程序实现该功能。第52页,本讲稿共103页ORG1000HMOVA,#1;主程序;主程序MOVR4,#0NEXT:INCR4MOVP1,AACALL DELAYRLASJMPNEXTDELAY:MOVR7,#10;1s延时子程序延时子程序DELAY3:MOVR6,#200 DELAY2:MOV R5,#125DELAY1:DJNZR5,DELAY1;1254500s0.5msDJNZR6,DELAY2;0.5 ms200

41、0.1sDJNZR7,DELAY3;0.1s2001sDJNZR4,DELAYRETEND第53页,本讲稿共103页例例4-11 两个无符号数据块的首地址分别为两个无符号数据块的首地址分别为30H和和40H,每个数据块的第一个字节都存放着数据块的长度,每个数据块的第一个字节都存放着数据块的长度(小于(小于15),求各数据块中最大值的乘积,并将结果存入),求各数据块中最大值的乘积,并将结果存入50H(乘积低字节)和(乘积低字节)和51H(乘积高字节)。(乘积高字节)。解:可将求最大值的过程编写成一个子程序,子程序的入口参数是数据块的首地址,存放解:可将求最大值的过程编写成一个子程序,子程序的入口

42、参数是数据块的首地址,存放在在R1中,返回参数即为最大值,存放在中,返回参数即为最大值,存放在A中,参考程序如下:中,参考程序如下:ORG 1000H;主程序;主程序MOV R1,#30H;置入口条件参数;置入口条件参数ACALL FMAX;调用求最大值子程序;调用求最大值子程序MOV B,A;第一个最大值存放于;第一个最大值存放于BMOV R1,#40H;置入口条件参数;置入口条件参数ACALL FMAX;调用求最大值子程序;调用求最大值子程序MUL AB;求乘积;求乘积MOV 50H,A;存乘积低字节;存乘积低字节MOV 51H,B;存乘积低高字节;存乘积低高字节SJMP$第54页,本讲稿

43、共103页ORG 1200H;子程序;子程序FMAX:MOV A,R1;取数据块长度;取数据块长度 MOV R2,A;R2中存放数据块的长度中存放数据块的长度 INCR1;改变地址指针;改变地址指针MOVA,R1;将第一个数放入;将第一个数放入ADECR2;数据个数减;数据个数减1LOOP1:INC R1;修改地址指针;修改地址指针 CLR C SUBB A,R1;相减比较大小;相减比较大小 JNC LOOP2;A中的数为大,跳向中的数为大,跳向 MOV A,R1;否则,更换大数到;否则,更换大数到A SJMP LOOP3LOOP2:ADD A,R1;恢复原最大值;恢复原最大值LOOP3:LO

44、OP3:DJNZ R2,LOOP1;若未比较完,则循环;若未比较完,则循环 RET END第55页,本讲稿共103页例例:将将R0和和R1所所指指的的内内部部RAM中中两两个个多多字字节节无无符符号号数数相相加加,结结果果存存入入R0所指的内部所指的内部RAM中。中。NADD:CLRCNADD1:MOV A,R0ADDCA,R1MOVR0,AINC R0INCR1DJNZR7,NADD1JNCNADD2MOVR0,#01HINCR0NADD2:DEC R0RET第56页,本讲稿共103页4.3 常用程序设计举例常用程序设计举例4.3.1 代码转换类程序代码转换类程序 计计算算机机内内部部的的运

45、运算算一一般般都都是是用用二二进进制制,而而在在计计算算机机与与外外设设的的数数据据传传送送中中常常采采用用BCD码码、ASCII码码和和其其它它代代码码,因因此此,就就存存在在代代码码转转换换的的问问题题。在在程程序序设设计计中中常常采采用用算算法法处处理理和和查查表表方式方式来实现代码转换。来实现代码转换。第57页,本讲稿共103页1.十六进制数与十六进制数与ASCII码之间的转换码之间的转换例例4-12 将从将从30H单元开始的连续单元开始的连续8个单元中存放的十六进制数转换成其所对应的个单元中存放的十六进制数转换成其所对应的ASCII码,并分码,并分别存放在从别存放在从40H开始的开始

46、的16个单元中。个单元中。解:解:ORG2000HMOVR0,#30H;设定地址指针;设定地址指针MOVR1,#40HMOVR7,#8;循环次数;循环次数NEXT:MOVA,R0;高字节转换;高字节转换 SWAPA ANLA,#0FH ACALLHEXAS MOVR1,A INCR1 MOVA,R0;低字节转换;低字节转换 ANLA,#0FH ACALL HEXAS MOVR1,A INCR1;修改地址指针;修改地址指针 INCR0 DJNZR7,NEXT NOP SJMP$第58页,本讲稿共103页HEXAS:CLR C ;十六进制转换成;十六进制转换成ASCII码子程序码子程序 SUBBA

47、,#10JCLOOPADDA,#7LOOP:ADDA,#10;补偿减掉的;补偿减掉的10 ADDA,#30HRETEND 第59页,本讲稿共103页例例 把把外外部部RAM 30H3FH单单元元中中的的ASCII码码依依次次转转换换为为十十六六进进制数,并存入内部制数,并存入内部RAM 60H67H单单元之中。元之中。假设:假设:被转换的被转换的ASCII为为十六十六进进制数制数(0F)的的ASCII,则,则,因为:因为:09 ASCII 3039H AFASCII 4146H 若若 (30H)41HA10 41H30H11H17 第60页,本讲稿共103页 因为一个字节可装两个转换后得到的十

48、六进制数,即两因为一个字节可装两个转换后得到的十六进制数,即两次转换才能拼装为一个字节。为了避免在程序中重复出现转次转换才能拼装为一个字节。为了避免在程序中重复出现转换程序段,因此通常采用子程序结构,把转换操作编写为子换程序段,因此通常采用子程序结构,把转换操作编写为子程序。程序。第61页,本讲稿共103页ORG 5000HMAIN:MOV R0,30H ;设设置置 ASCII码码地址指地址指针针 MOV R1,60H ;设设置十六置十六进进制数地址指制数地址指针针 MOV R7,08H ;字;字节节个数个数 AB:ACALL TRAN ;调调用用转换转换子程序子程序 SWAP A ;A高低字

49、高低字节节交交换换 MOVXR1,A INC R0 ACALLTRAN ;调调用用转换转换子程序子程序 XCHDA,R1 ;十六;十六进进制数拼装制数拼装 INCR0 INCR1 DJNZR7,AB 第62页,本讲稿共103页子程序(子程序(TRAN):):TRAN:CLRC MOVXA,R0;取;取ASCII码码 SUBBA,#30H CJNEA,#0AH,BB AJMPBCBB:JCDONEBC:SUBBA,#07H;大于等于;大于等于0AH,再减再减07HDONE:RET END第63页,本讲稿共103页例例4-13 将将两两字字节节十十六六进进制制整整数数转转换换成成三三字字节节的的B

50、CD码码。若若待待转转换换的的双双字字节节十十六六进进制制整整数数在在R6、R7中(中(R6中为高位),转换后的三字节中为高位),转换后的三字节BCD码整数存于码整数存于R3、R4和和R5中(中(R3中为高位)。中为高位)。解:二进制数解:二进制数b7b6b5b4b3b2b1b0B所对应的十进制数所对应的十进制数X可按照下式计算可按照下式计算因此,只要按照十进制运算法则,将因此,只要按照十进制运算法则,将bi(i=7,6,1,0)按权相加,就可以得到相应)按权相加,就可以得到相应的十进制数的十进制数X。参考程序如下:。参考程序如下:ORG 2000HHEBCD:MOVA,#0;BCD码初始化码

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

当前位置:首页 > 生活休闲 > 资格考试

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁