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

下载本文档

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

文档简介

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

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

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

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

5、MOVDPTR,#2001HMOVXA,DPTR MOVDPTR,#2003HMOVXDPTR,AMOVDPTR,#2000HMOVXA,DPTRMOVDPTR,#2002HMOVXDPTR,ASJMP$ 分支结构的程序举例 例3-2 有甲乙两数存于41H和42H存储单元,运算符号的ASCII码存于40H单元,编写一根据40H的符号,对甲乙两数进行相应运算的程序;井将运算结果存于43H单元。 ORG 0000H LJMP 0100H ORG 0100 MOV A,40H CJNE A,#2BH,MINUS PLUS: MOV A,41H ADD A,42H MOV 43H,A SJMP CLO

6、SE MINUS:CJNE A,#2DH,ERRCLRC MOVA,41H SUBB A,42H MOV43H,A SJMP CLOSE ERR: MOV43H,#0FFH CLOSE:SJMP $ 循环结构的程序举例 例3-3 有一组数据,存放在30H为首地址的内存单元,数据长度为32个。试将每一个数分别取出加1,再存人以40H为首地址的内存单元。 ORG0000H0000 020100 LJMP0100H0100 ORG0100H0100 784FMOVR0,#4FH0102 795FMOVR1,#5FH0104 7F20MOVR7,#20H0106 E6LOOP:MOVA,R00107

7、04INCA0108 F7MOVR1,A0109 18DECR0010A 19DECR1010B DFF9DJNZR7,LOOP010D 80FESJMP$END 循环结构程序举例例3-4 编制一延时子程序,使执行这一段程序延时2s。 0100 7D64 MOV R5,#64H 0102 7E64 LOOP1: MOVR6,#64H 0104,7F62 LOOP2: MOV R7,#62H 0106 DFFE LOOP3: DJNZ R7,LOOP3 0108 DEFA DJNZR6,LOOP2 010A DDF6 DJNZ R5,LOOPl 010C 22 RET 以上程序执行的时间近似为2

8、秒,如要准确计算还需考虑执行对R5、R6、R7的赋值指令所需的时间、RET返回指令的时间等等。返回本章首页第四节 程序设计举例一、多字节加法程序 例3-5 两个10字节数,分别从存储单元0801H、和0901H开始存放,先存低字节后存高字节,求其和并存于乙数原来所在的单元。 多字节加法的程序0100 ORG 0100H0100 900801 MOV DPTR,#0801H ;甲数据地址0103 75A009 MOV P2,#09H ;乙数据地址高字节0106 7901 MOV R1,#01H ;乙数据地址低字节0108 7F0A MOV R7,#0AH ;数据字节数010A C3 CLR C0

9、10B E0 LOOP: MOVX A,DPTR ;取甲数010C FC MOV R4,A ;暂存R4010D E3 MOVX A,R1 ;取乙数010E 3C ADDC A,R4 ;两数相加并加上一次进位位010F F3 MOVX R1,A ;和存于原乙数的地址0110 09 INC R1 ;修改地址指针0111 A3 INC DPTR0112 DFF7 DJNZ R7,LOOP ;继续相加0114 E4 CLR A0115 3400 ADDC A,#00H0117 F3 MOVX R1,A ;存最高字节进位位0118 80FE SJMP $ ;结束 子程序:出口条件为转换所得BCD码存R2

10、、R3 ORG 2000H 2000 E9 SUB;MOV A,R1 ;取十六进制数2001 75F064 MOV B,#64H2004 84 DIV AB ;除以1002005 FA MOV R2,A ;商为百位数存R22006 740A MOV A,#0AH2008 C5F0 XCH A,B ;除100余数作为下一次的被除数200A 84 DIV AB ;余数再除以10200B C4 SWAP A200C 45F0 ORL A,B ;十位个位合并200E FB MOV R3,A ;十位个位合并存R3200F 22 RET 三、求最大值或最小值 1.无符号数求最大值与最小值 例3-7 在以2

11、042H为首地址的存储单元中,连续存放一组单字节无符号数,数据个数存于2041H单元,从中找出最大数并存于2040H。 2.带符号数求最大值或最小值 例3-8 组单字节带符号数据存放在以2042H为首地址的连续单元中,数据长度存放在2041H单元,找出的最大值存于2040H单元。 带符号数求最大值与最小值的程序0100 ORG 0100H0100 90204l MOV DPTR,#2041H0103 EO MOVX A,DPTR0104 FF MOV R7,A0105 7900 MOV R1,#80H;开始R1存最小值-1280107 A3 LOOP: INC DPTR0108 E0 MOVX

12、 A,DPIR0109 FA MOV R2,A010A C3 CLR C010B 99 SUBB A,R1010C 20E705 JB ACC.7,MINUS010F 20D209 PLUS:JBOV,SMA0112 8005 SJMP BIG带符号数求最大值与最小值的程序(续)0114 20D202 MINUS:JB OV,BIG0117 8002 SJMP SMA0119 EA BIG:MOV A,R2011A F9 MOV R1,A011B DFEA SMA:DJNZ R7,LOOP011D 902040 MOV DPTR,#2040H0120 E9 MOV A,R10121 F0 MO

13、VX DPTR,A0122 80FE SJMP $ END比较条件两数相减后标志状态X为正数,Y为正数 XY X-Y为正 OV=0 XY X-Y为正 OV=0 XY X-Y为正 OV=0 XY X-Y为负 OV=1 XY X为负数且Y为正数,X不可能大于Y XY X-Y为正 OV=1 XY X-Y为负OV=0 带符号数的比较 四、搜索 例3-9 有一批数据存放在以2043H为首地址的连续单元中,数据长度置于2042H存储单元,编制检索程序,使之能从该批数据中寻找是否有等于字母T的ASCII码的数据。字母T的ASCII码存放在2041H单元。 ORG 0100HO100 902041MOV DP

14、TR,#2041H0103 E0 MOVX A,DPTR;取关键字0104 F5F0MOV B,A0106 A3INCDPTR0167 E0MOVXA,DPTR0108 FFMOV R7,A0109 A3LOOP:INC DPTR010A E0MOVXA,DPTR010B 35F005 CJNEA,B,LOOPl010E 753000MOV 30H,#00H;找到字母T0111 80FE SJMP$0113 DFF4LOOP1: DJNZR7,LOOP0115 7530FFMOV30H,#0FFH;找不到字母T0118 80FESJMP$END检索程序举例ORG 0100H0100 E521

15、MOVA,21H0102 l4DEC A0103 FFMOVR7,A ;定外循环次数0104 FEMOVR6,A ;定内循环次数0105 8F22MOV23H,R60107 752230MOV 22H,#30H;首地址存22H010A A822 NEXT:MOV R0,22H010C E6 MOV A,R0010D F9 MOV R1,A ;设首地址内容存R1010E 08 LOOP:INC R0010F C3 CLR C0110 96SUBB A,R00111 5003JNC TOSMA0113 E6MOV A,R00114 C9XCH A,R10115 F6 MOV R0,A;若大于R1,

16、双方易位排序程序举例0116 E9 TOSMA: MOV A,R10117 DEF5DJNZ R6,LOOP0119 A822MOV R0,22H01lB E9 MOV A,R10llC F6 MOV R0,A;存本轮最大值011D 0522INC22H;首地址加1011F 1523DEC 23H;比较次数减10121 AE23MOV R6,23H0123 DFE5 DJNZ R7,NEXT0125 80FE SJMP $续上030F 4008 JC LOOP2;不交换0311 D200 SETB EXB ;交换0313 E5F0 MOV A,B0315 C6 XCH A,R00316 18

17、DEC R00317 F6 MOV R0,A0318 08 INC R00319 DFEELOOP2: DJNZ R7,LOOP1;结束判断031B 2000E4 JB EXB,LOOP0;是否无交换了031E 80FEFINISH: SJMP $ 下沉法续 六、查表 当某一变量x与函数y的关系无规律可循时,可以将变量x作为序号,函数y值作为元素,列出一份序号与元素的关系表。然后利用查表法从序号求得元素。 1.序号小于256的查表程序 例3-11 设在寄存器R1存了两个BCD码,将它们转换为共阴数码管的七段码,存入21H和22H。 序号小于256查表程序 TRAN: MOVDPTR,#TABL

18、E ;取表头地址 MOVA, R1 ANLA, #0FH ;取BCD码低4位 MOVCA,A+DPTR ;换成七段码 MOV21H, A MOVA, R1 SWAPA ;转换高4位位置 ANLA, #0FH ;取BCD码高4位 MOVCA,A+DPTR ;换成七段码 MOV22H,A RET TABLE: DB 06H,5BH,4FH,66H,6DH,7DH,7H,7FH,6FH 2.序号大于256的查表程序 当元素总数大于256,要用DPTR直接加16位序号,才能得到元素地址值。例3-13 设有1000个元素的函数表,元素序号高8位存于20H,低8位存于21H,要求将求出的元素值存于30H。 TRAN: MOV DPTR,#TABLE ;取表头地址 MOV A, 21H ;求元素位置低8位 ADDA,DPL MOVDPL,A MOVA,20H;求元素位置高8位 ADDCA,DPH MOVDPH,A CLRA MOVCA,A+DPTR ;取出元素 MOV30H, A RETTABLE: DB. 3.元素值占两个字节以上的查表程序 当元素占两个以上字节,应考虑每个序号的偏移量。 例3-14 设序号存20H,

温馨提示

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

评论

0/150

提交评论