单片机第三章汇编语言程序设计培训讲学

上传人:yulij****0329 文档编号:136937450 上传时间:2020-07-03 格式:PPT 页数:35 大小:1.27MB
返回 下载 相关 举报
单片机第三章汇编语言程序设计培训讲学_第1页
第1页 / 共35页
单片机第三章汇编语言程序设计培训讲学_第2页
第2页 / 共35页
单片机第三章汇编语言程序设计培训讲学_第3页
第3页 / 共35页
单片机第三章汇编语言程序设计培训讲学_第4页
第4页 / 共35页
单片机第三章汇编语言程序设计培训讲学_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《单片机第三章汇编语言程序设计培训讲学》由会员分享,可在线阅读,更多相关《单片机第三章汇编语言程序设计培训讲学(35页珍藏版)》请在金锄头文库上搜索。

1、第三章汇编语言程序设计,第一节汇编语言程序的格式第二节伪指令第三节汇编语言程序的编写步骤及基本结构第四节程序设计举例,本章要点,本章介绍汇编语言程序的书写格式、编写步骤以及程序的基本结构。通过一些具体范例,了解与掌握编程方法并从中掌握程序设计的基本技巧。,第一节汇编语言程序的格式,汇编语言编写的程序由语句组成,每一语句占一行填写一条指令。每行分4段,分别为标号、操作码、操作数和注释。ORG2000HADDR:MOVA,00H;累加器清零MOV41H,A;41H、42H清零MOV42H,AMOVR2,0AH;设定累加次数MOVR1,30H;设定数据首地址LOOP:MOVA,R1;取数ADDA,4

2、1H;累加到41HJNCNEXT;是否有进位INC42H;有进位42H加1NEXT:MOV41H,A;将和存入41HINCR1DJNZR2,LOOPLJMP$END,标号:代表该行指令所在的地址,结尾应加一冒号,操作码:助记符或伪指令的符号。,操作数:操作所需要的数据或数据的存储位置来源,注释:对语句的说明,也可不加注释,返回本章首页,第二节伪指令,伪指令不执行任何操作,汇编时也不生成目标程序。它仅仅提供对汇编的要求。汇编成机器语言后,伪指令就不存在了。以下为常用的伪指令:1.ORG(Origin)::指明汇编起始点地址。2.END:指明源程序至此结束。3.EQU(Epual):赋值伪指令,可

3、对地址标号进行赋值。4.DB(DefineByte):定义从指定标号地址开始所存放的字节数据,多字节时各字节间用逗号隔开。5.DW(DefineWord):定义从指定的标号地址开始,所存放的字数据。跟DB一样,输入几个字时各字间要用逗号隔开。6.DS(DefineStorage):定义存储区,表示从标号所指的存储单元开始,保留的内存单元数量,以供程序使用。,返回本章首页,二、分支结构:指程序中具有转移指令,可根据转移条件决定是转移还是继续执行下一条指令。,几种分支结构程序的框图,三、循环结构循环结构由四个环节组成。1.初始化部分:对循环体中参加操作的有关参数、地址等赋以初始值,并指定循环结束条

4、件。2.循环体部分:指每次循环都需要重复执行的程序段。3.修改初始值:每次循环结束都要对初始值进行修改,特别是判断结束条件的参数,每经一次循环后都要作相应的修改,以便决定是否结束循环。4.结束判断部分:检查结束条件是否满足,若条件满足停止循环,否则返回继续执行循环体。,循环结构框图图中每执行一次循环体后,都要检查结束条件是否满足,若条件满足停止循环,否则返回继续执行循环体。右边两图区别是先检查循环是否结束后修改初值,还是先修改初值后检查循环是否结束。,顺序结构的程序举例例3-1将地址为2000H、2001H、2002H的片外数据存储单元的内容,分别传送到2002H、2003H、2004H存储单

5、元中去。ORG0000HLJMP1000HORG1000HMOVDPTR,#2002HMOVXA,DPTRMOVDPTR,#2004HMOVXDPTR,AMOVDPTR,#2001HMOVXA,DPTRMOVDPTR,#2003H,MOVXDPTR,AMOVDPTR,#2000HMOVXA,DPTRMOVDPTR,#2002HMOVXDPTR,ASJMP$,分支结构的程序举例例3-2有甲乙两数存于41H和42H存储单元,运算符号的ASCII码存于40H单元,编写一根据40H的符号,对甲乙两数进行相应运算的程序;井将运算结果存于43H单元。ORG0000HLJMP0100HORG0100MOVA

6、,40HCJNEA,#2BH,MINUSPLUS:MOVA,41HADDA,42HMOV43H,ASJMPCLOSE,MINUS:CJNEA,#2DH,ERRCLRCMOVA,41HSUBBA,42HMOV43H,ASJMPCLOSEERR:MOV43H,#0FFHCLOSE:SJMP$,循环结构的程序举例例3-3有一组数据,存放在30H为首地址的内存单元,数据长度为32个。试将每一个数分别取出加1,再存人以40H为首地址的内存单元。,ORG0000H0000020100LJMP0100H0100ORG0100H0100784FMOVR0,#4FH0102795FMOVR1,#5FH01047

7、F20MOVR7,#20H0106E6LOOP:MOVA,R0010704INCA0108F7MOVR1,A010918DECR0010A19DECR1010BDFF9DJNZR7,LOOP010D80FESJMP$END,循环结构程序举例例3-4编制一延时子程序,使执行这一段程序延时2s。01007D64MOVR5,#64H01027E64LOOP1:MOVR6,#64H0104,7F62LOOP2:MOVR7,#62H0106DFFELOOP3:DJNZR7,LOOP30108DEFADJNZR6,LOOP2010ADDF6DJNZR5,LOOPl010C22RET以上程序执行的时间近似为

8、2秒,如要准确计算还需考虑执行对R5、R6、R7的赋值指令所需的时间、RET返回指令的时间等等。,返回本章首页,第四节程序设计举例,一、多字节加法程序例3-5两个10字节数,分别从存储单元0801H、和0901H开始存放,先存低字节后存高字节,求其和并存于乙数原来所在的单元。,多字节加法的程序0100ORG0100H0100900801MOVDPTR,#0801H;甲数据地址010375A009MOVP2,#09H;乙数据地址高字节01067901MOVR1,#01H;乙数据地址低字节01087F0AMOVR7,#0AH;数据字节数010AC3CLRC010BE0LOOP:MOVXA,DPTR

9、;取甲数010CFCMOVR4,A;暂存R4010DE3MOVXA,R1;取乙数010E3CADDCA,R4;两数相加并加上一次进位位010FF3MOVXR1,A;和存于原乙数的地址011009INCR1;修改地址指针0111A3INCDPTR0112DFF7DJNZR7,LOOP;继续相加0114E4CLRA01153400ADDCA,#00H0117F3MOVXR1,A;存最高字节进位位011880FESJMP$;结束,二、数制变换例3-6将30H中的十六进制数转换为BCD码,并存于40H、41H。主程序:入口条件为待转换的十六进制数存R10100ORG0100H0100A930MOVR1

10、,30H0102122000LCALLSUB01058A40MOV40H,R201078B41MOV41H,R3010980FESJMP$END,子程序:出口条件为转换所得BCD码存R2、R3ORG2000H2000E9SUB;MOVA,R1;取十六进制数200175F064MOVB,#64H200484DIVAB;除以1002005FAMOVR2,A;商为百位数存R22006740AMOVA,#0AH2008C5F0XCHA,B;除100余数作为下一次的被除数200A84DIVAB;余数再除以10200BC4SWAPA200C45F0ORLA,B;十位个位合并200EFBMOVR3,A;十位

11、个位合并存R3200F22RET,三、求最大值或最小值1.无符号数求最大值与最小值例3-7在以2042H为首地址的存储单元中,连续存放一组单字节无符号数,数据个数存于2041H单元,从中找出最大数并存于2040H。,无符号数求最大值或最小值的程序0100ORG0100H0100902041MOVDPTR,#2041H0103E0MOVXA,DPTR0104FFMOVR7,A0105753000MOV30H,#00H0107A3LOOP:INCDPTR0108E0MOVXA,DPIR0109B53002CJNEA,30H,HERE010C8004SJMPTOSMA010E4002HERE:JCT

12、OSMA0110F530MOV30H,A;大于30H取代原有值0112DFF3TOSMA:DJNZR7,LOOP;小于30H,继续比较0114902040MOVDPTR,#2040H0117E530MOVA,30H0119F0MOVXDPTR,A011A80FESJMP$END,2.带符号数求最大值或最小值例3-8组单字节带符号数据存放在以2042H为首地址的连续单元中,数据长度存放在2041H单元,找出的最大值存于2040H单元。,带符号数求最大值与最小值的程序0100ORG0100H010090204lMOVDPTR,#2041H0103EOMOVXA,DPTR0104FFMOVR7,A0

13、1057900MOVR1,#80H;开始R1存最小值-1280107A3LOOP:INCDPTR0108E0MOVXA,DPIR0109FAMOVR2,A010AC3CLRC010B99SUBBA,R1010C20E705JBACC.7,MINUS010F20D209PLUS:JBOV,SMA01128005SJMPBIG,带符号数求最大值与最小值的程序(续)011420D202MINUS:JBOV,BIG01178002SJMPSMA0119EABIG:MOVA,R2011AF9MOVR1,A011BDFEASMA:DJNZR7,LOOP011D902040MOVDPTR,#2040H012

14、0E9MOVA,R10121F0MOVXDPTR,A012280FESJMP$END,比较条件两数相减后标志状态X为正数,Y为正数XYX-Y为正OV=0XYX-Y为正OV=0XYX-Y为正OV=0XYX-Y为负OV=1XYX为负数且Y为正数,X不可能大于YXYX-Y为正OV=1XYX-Y为负OV=0,带符号数的比较,四、搜索例3-9有一批数据存放在以2043H为首地址的连续单元中,数据长度置于2042H存储单元,编制检索程序,使之能从该批数据中寻找是否有等于字母T的ASCII码的数据。字母T的ASCII码存放在2041H单元。,ORG0100HO100902041MOVDPTR,#2041H0

15、103E0MOVXA,DPTR;取关键字0104F5F0MOVB,A0106A3INCDPTR0167E0MOVXA,DPTR0108FFMOVR7,A0109A3LOOP:INCDPTR010AE0MOVXA,DPTR010B35F005CJNEA,B,LOOPl010E753000MOV30H,#00H;找到字母T011180FESJMP$0113DFF4LOOP1:DJNZR7,LOOP01157530FFMOV30H,#0FFH;找不到字母T011880FESJMP$END,检索程序举例,五、排序例3-10一组无符号的二进制数,存于以30H为首地址的连续单元中,数据长度存于21H单元,

16、试设计一程序,使该组数据按从大到小的顺序排列。,ORG0100H0100E521MOVA,21H0102l4DECA0103FFMOVR7,A;定外循环次数0104FEMOVR6,A;定内循环次数01058F22MOV23H,R60107752230MOV22H,#30H;首地址存22H010AA822NEXT:MOVR0,22H010CE6MOVA,R0010DF9MOVR1,A;设首地址内容存R1010E08LOOP:INCR0010FC3CLRC011096SUBBA,R001115003JNCTOSMA0113E6MOVA,R00114C9XCHA,R10115F6MOVR0,A;若大于R1,双方易位,排序程序举例,0116E9TOSMA:MOVA,R10117DEF5DJNZR6,LOOP0119A822MOVR0,22H01lBE9MOVA,R10llCF6MOVR0,A;存本轮最大值011D0522INC22H;首地址加1011F1523DEC23H;比较次数减10121AE23MOVR6,23H0123DFE5DJNZR7,NEXT

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

当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号