单片机原理及其接口技术第3章-汇编语言程序设计课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《单片机原理及其接口技术第3章-汇编语言程序设计课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 原理 及其 接口 技术 汇编语言 程序设计 课件
- 资源描述:
-
1、3.1 汇编语言源程序设计和汇编汇编语言源程序设计和汇编3.1.1 指令和助记符指令和助记符指令指令 =操作码操作码 +操作数操作数例如8051做10加20的加法,在程序存储器中需要预先存储2条机器码指令 0111 0100 ;指令;指令1操作码,把操作码,把10送入累加器送入累加器A 0000 1010 ;指令;指令1操作数,操作数,10=00001010B=0AH0010 0100 ;指令;指令2操作码,累加器操作码,累加器A内容加内容加20,结果存于,结果存于A 0001 0100 ;指令;指令2操作数,操作数,20=00010100B=14HMOV A,0AH ;操作码助记符;操作码助
2、记符MOV,操作数助记符累加器,操作数助记符累加器A和立即数和立即数10ADD A,14H ;操作码助记符;操作码助记符ADD,操作数助记符累加器,操作数助记符累加器A和立即数和立即数20机器语言汇编语言手工汇编机器汇编3.1.2 伪指令伪指令 伪指令虽然具有类似指令的形式,但不是真正的指令,不会产生任何可供机器直接伪指令虽然具有类似指令的形式,但不是真正的指令,不会产生任何可供机器直接执行的机器码。伪指令用来对汇编过程进行控制,是编程员发给汇编程序的命令,也称执行的机器码。伪指令用来对汇编过程进行控制,是编程员发给汇编程序的命令,也称为汇编命令或汇编程序控制命令。为汇编命令或汇编程序控制命令
3、。1 1、起始汇编伪指令、起始汇编伪指令ORGORG(OriginOrigin)ORG 16位地址位地址用来规定源程序或者数据块在程序存储器的起始地址。注意地址从小到大排列,不同的用来规定源程序或者数据块在程序存储器的起始地址。注意地址从小到大排列,不同的程序段不可彼此覆盖。程序段不可彼此覆盖。2 2、结束汇编伪指令、结束汇编伪指令ENDEND END 表示源程序到此结束。在一个源程序中只允许出现一条表示源程序到此结束。在一个源程序中只允许出现一条END语句,而且必须安排在源程语句,而且必须安排在源程序的末尾,汇编器对序的末尾,汇编器对END语句后的所有语句都不进行汇编。语句后的所有语句都不进
4、行汇编。3 3、赋值伪指令、赋值伪指令EQUEQU(EquateEquate)字符名称字符名称EQU赋值项赋值项其中赋值项可以是常数、地址、标号或者是表达式,以其中赋值项可以是常数、地址、标号或者是表达式,以8位或位或16位二进制数存放。汇编位二进制数存放。汇编程序自动把程序自动把EQU右边的赋值项赋给左边的字符名称。一旦字符名称被赋值它就可以在程右边的赋值项赋给左边的字符名称。一旦字符名称被赋值它就可以在程序中作为数据或地址来多次使用。必须先赋值再使用,故该语句常放在程序开头。序中作为数据或地址来多次使用。必须先赋值再使用,故该语句常放在程序开头。3.1.2 伪指令伪指令4 4、位地址赋值伪
5、指令、位地址赋值伪指令BITBIT 字符名称字符名称 BIT 位地址位地址把把BIT右边的位地址或位名称赋给左边的字符名称。因此右边的位地址或位名称赋给左边的字符名称。因此BIT语句定义的字符名称是此位语句定义的字符名称是此位地址的别称。地址的别称。5 5、定义空间伪指令、定义空间伪指令DSDS(Define StorageDefine Storage)标号:标号:DS 表达式表达式DS从指定的地址单元开始,保留由表达式指定的若干字节空间作为备用空间,空间大小从指定的地址单元开始,保留由表达式指定的若干字节空间作为备用空间,空间大小由由DS语句中表达式决定。同语句中表达式决定。同DB一样,一样
6、,DS伪指令只能用于程序存储器。伪指令只能用于程序存储器。ORG1000HDS 08H;从;从1000H开始保留开始保留8字节的存储空间备用字节的存储空间备用DB 71H,13H,11H ;数据表从;数据表从1008H开始存放开始存放经汇编后从经汇编后从1000H单元开始保留单元开始保留8个字节的存储单元,而从个字节的存储单元,而从1008H单元开始连续单元开始连续存放存放71H、13H和和11H等数据。等数据。3.1.3 汇编语句格式汇编语句格式标号:操作码标号:操作码 操作数操作数1,操作数,操作数2,操作数,操作数3;注释;注释 1 1、标号标号标号是语句地址的标志符号,它由标号是语句地
7、址的标志符号,它由18个个ASCII字符组成,可以是字母、数字和一些特字符组成,可以是字母、数字和一些特定字符,英文字母开头,冒号结束。为了避免把标号中字符当作指令来汇编,用户在编定字符,英文字母开头,冒号结束。为了避免把标号中字符当作指令来汇编,用户在编写自己的程序时绝对不应采用指令、寄存器名以及伪指令等作为语句的标号,而且同一写自己的程序时绝对不应采用指令、寄存器名以及伪指令等作为语句的标号,而且同一标号在一个程序中只能定义一次。对每一条语句而言,标号不是必选的,标号的有无取标号在一个程序中只能定义一次。对每一条语句而言,标号不是必选的,标号的有无取决于程序中有无其它语句访问该语句,一般用
8、于转移程序的首地址。决于程序中有无其它语句访问该语句,一般用于转移程序的首地址。2、操作码、操作码操作码是汇编指令格式中唯一不能空缺的部分,可分为指令性语句和指示性语句两类。操作码是汇编指令格式中唯一不能空缺的部分,可分为指令性语句和指示性语句两类。(1)指令性语句)指令性语句指令性语句是指采用指令助记符构成的汇编语言语句,指令性语句是指采用指令助记符构成的汇编语言语句,8051单片机中的指令性语句是指单片机中的指令性语句是指111条指令的助记符语句。因此,指令性语句是汇编语言语句的主体。每条指令性语句都条指令的助记符语句。因此,指令性语句是汇编语言语句的主体。每条指令性语句都有与之对应的机器
9、码供有与之对应的机器码供CPU识别和执行。如前述及的识别和执行。如前述及的MOV、ADD、SETB、CLR等。等。(2)指示性语句)指示性语句指示性语句又称为伪指令语句,不会产生任何可供指示性语句又称为伪指令语句,不会产生任何可供CPU识别和执行的机器码,只是用来识别和执行的机器码,只是用来对汇编过程进行某种控制。对汇编过程进行某种控制。3.1.3 汇编语句格式汇编语句格式标号:操作码标号:操作码 操作数操作数1,操作数,操作数2,操作数,操作数3;注释;注释 3、操作数、操作数指令执行时涉及到的数据或者数据的地址。它与操作码以空格分界,两操作数或三操作指令执行时涉及到的数据或者数据的地址。它
10、与操作码以空格分界,两操作数或三操作数时以逗号分开,可以是十进制数、二进制数(数时以逗号分开,可以是十进制数、二进制数(B)、十六制数()、十六制数(H)、)、ASCII码码()、寄存器名、存储器地址、位地址以及变量标识符等。)、寄存器名、存储器地址、位地址以及变量标识符等。4、注释、注释对语句在程序中完成的功能加以解释,对语句在程序中完成的功能加以解释,“;”分号开头,不会被汇编程序理解为指令。分号开头,不会被汇编程序理解为指令。例3-1 ORG 0100H ;下面源程序从程序存储器的0100H单元开始存放MAIN:MOV A,#00H ;标号MAIN0100H MOV R2,#23H MO
11、V R3,#24H MOV R4,#25H MOV R5,#26H ADD A,R2 ADD A,R3 ADD A,R4 ADD A,R5HERE:SJMP HERE;标号HERE010EH END;源程序到此结束 3.2 程序计数器程序计数器PCPC和程序运行和程序运行3.2.1 3.2.1 程序计数器程序计数器PC PC(Program CounterProgram Counter)PC(Program Counter):程序计数器。):程序计数器。16位的寄存器,存放的是位的寄存器,存放的是ROM地址地址起始地址:起始地址:0000H 形成形成下一条要下一条要执行指令执行指令的地址:的地
12、址:自动加自动加1:读指令的:读指令的1个字节加一个字节加一 新地址直接替换:转移类指令新地址直接替换:转移类指令PC由计算机自动管理,程序员由计算机自动管理,程序员不可以访问不可以访问3.2.2 3.2.2 简单程序运行简单程序运行3.2.3 3.2.3 循环程序运行循环程序运行 0000H存放长转移指令,转移到主程序地址0100H执行主程序。循环初始化阶段,对变量A赋初值00H,对地址指针R0赋初值30H,对循环控制变量R2赋初值10H。然后进入循环体。首先对第一个单元送00H,然后调整变量A值为01H,调整地址指针R0值为31H,循环控制变量R2减1为0FH,不为0程序继续循环而PC=0
13、106H,而不会增大为010BH,从而程序转移至0106H继续执行直至R2为0退出循环,则PC=010BH程序顺序执行。3.2.4 3.2.4 子程序运行子程序运行 子程序从010BH开始存放,是一个延时子程序。当主程序执行到调用子程序的命令ACALL时PC=0106H,ACALL指令把断点地址0106H压入堆栈,并将010BH放进PC中,程序转移到010BH处执行延时子程序。子程序执行到返回命令RET后,将堆栈中的0106H弹出到PC中,返回主程序继续执行。3.3 顺序程序设计顺序程序设计 顺序程序的特点是程序执行时,每一条指令都被执行一次(有别于分支程序)且仅顺序程序的特点是程序执行时,每
14、一条指令都被执行一次(有别于分支程序)且仅一次(有别于循环程序)。计算机在执行这类程序时只需按照指令排列的先后顺序依一次(有别于循环程序)。计算机在执行这类程序时只需按照指令排列的先后顺序依次执行,中间不会产生任何分支,故又称为无分支程序或简单程序。次执行,中间不会产生任何分支,故又称为无分支程序或简单程序。例3-2 设有16位二进制数存放在R0、R1中,其中R0存放高8位,R1存放低8位。欲将其变为负数存放,编程实现其补码运算,结果送原址。ORG 0030HMOVA,R1;取低字节入;取低字节入ACPLA ;对低字节求反;对低字节求反ADDA,01H;加;加1MOVR1,A;存结果到原址;存
15、结果到原址MOVA,R0;取高字节入;取高字节入ACPLA ;对高字节求反;对高字节求反ADDCA,00H;加可能产生的低字节对高字节的进位;加可能产生的低字节对高字节的进位MOVR0,A;存结果到原址;存结果到原址SJMP$;原地踏步;原地踏步 END3.3 顺序程序设计顺序程序设计 指令说明:指令说明:不带进位加:不带进位加:ADDA,s3;A=A+s3 带进位加:带进位加:ADDCA,s3;A=A+s3+CYs3表示表示#data、direct、Rn、Ri中的任意一个。例中的任意一个。例3-1中第一次加法是对数据的低字中第一次加法是对数据的低字节做出的,因此不需考虑相邻低位可能产生的进位
16、,使用节做出的,因此不需考虑相邻低位可能产生的进位,使用ADD。而第二次加法是对数。而第二次加法是对数据的高字节做出的,需要考虑相邻低位可能产生的进位,使用据的高字节做出的,需要考虑相邻低位可能产生的进位,使用ADDC。减法指令:减法指令:SUBB(Subtract with Borrow),是带借位减,),是带借位减,CPU将减数求补后采用补将减数求补后采用补码加法进行,其结果影响标志位,注意码加法进行,其结果影响标志位,注意CPU将进位位求反后存入将进位位求反后存入CY。指令格式如下:。指令格式如下:SUBBA,s3;A=As3CY带借位减指令用来处理带借位减指令用来处理16位数据的高字节
17、减法,低字节或位数据的高字节减法,低字节或8位数据的减法可预先清位数据的减法可预先清0进进位位位位CY,再使用带借位减法指令进行运算,如下所示:,再使用带借位减法指令进行运算,如下所示:CLRC SUBBA,s33.3 顺序程序设计顺序程序设计例3-3 在实际压力测量系统中,通过A/D转换器得到8位二进制数测量值,存于A中。利用除法指令把累加器A中的二进制数测量值转换为3位BCD码,并以压缩BCD码形式存放在地址M1、M2单元中。M1 EQU 30HM2 EQU 31H ORG 0030HMOVB,64H;除数;除数100送送BDIVAB;得;得BCD百位数于百位数于AMOVM1,A;BCD百
18、位数存于百位数存于M1中中MOVA,0AH;取除数;取除数10XCHA,B;第一次余数与第二次除数交换;第一次余数与第二次除数交换DIVAB ;得存;得存A的的BCD十位数和存十位数和存B的的BCD个位数个位数SWAPA;十位数存于;十位数存于A的高的高4位位ADDA,B;组成压缩;组成压缩BCD码码MOVM2,A;压缩;压缩BCD码存码存M2 END 3.3 顺序程序设计顺序程序设计例3-4 多字节加法程序。设被加数存放在:40H(高字节),41H,42H(低字节)。加数存放在:43H(高字节),44H,45H(低字节)。运算结果仍存在被加数单元中。ORG 0030HMOVR0,#42H;地
19、址指针;地址指针0指向被加数指向被加数MOVR1,#45H;地址指针;地址指针1指向加数指向加数MOVA,R0;取被加数低字节;取被加数低字节ADDA,R1;与加数低字节相加;与加数低字节相加MOVR0,A;结果回存入被加数单元;结果回存入被加数单元DECR0;地址指针;地址指针0指向被加数中字节指向被加数中字节DECR1;地址指针;地址指针1指向加数中字节指向加数中字节MOVA,R0;取被加数中字节;取被加数中字节ADDCA,R1;与加数中字节及进位位相加;与加数中字节及进位位相加MOVR0,A;结果回存入被加数单元;结果回存入被加数单元DECR0;地址指针;地址指针0指向被加数高字节指向被
20、加数高字节DECR1;地址指针;地址指针1指向加数高字节指向加数高字节MOVA,R0;取被加数高字节;取被加数高字节ADDCA,R1;与加数高字节及进位位相加;与加数高字节及进位位相加MOVR0,A;结果回存入被加数单元;结果回存入被加数单元 END 3.4 分支程序设计分支程序设计程序要求改变执行顺序,特点是含有控制转移类指令(转移目的地址替换程序要求改变执行顺序,特点是含有控制转移类指令(转移目的地址替换PCPC当前值)当前值)I.I.无条件转移指令无条件转移指令1 1、长转移指令、长转移指令LJMPLJMP:Long JumpLong JumpLJMP addr16;PCPC+3 PC当
21、前值PCaddr16 程序实现转移转移范围:任意转移范围:任意1616位地址,即位地址,即64KB64KB空间。空间。ORG 0030HMAIN:ORG 0000HLJMP 0030HORG 0000HLJMP MAIN0030H0032H0034HROMR ROOMM地地址址E 9F 42 40 1F 9E 80031H0035H0000H0002H0 20 03 00001H0003H转转移移常用标号代替常用标号代替addr16addr16,程序员只需在要跳转到的,程序员只需在要跳转到的汇编语句前加标号,由汇编器负责计算。汇编语句前加标号,由汇编器负责计算。LJMP LJMP 3.4 分支
22、程序设计分支程序设计程序要求改变执行顺序,特点是含有控制转移类指令(转移目的地址替换程序要求改变执行顺序,特点是含有控制转移类指令(转移目的地址替换PCPC当前值)当前值)3.4.1 3.4.1 无条件转移指令无条件转移指令2 2、短转移指令和相对寻址方式、短转移指令和相对寻址方式SJMPSJMP:Short JumpShort JumpSJMP relSJMP rel或或SJMP SJMP 机器码机器码PCPCPC+2 ,PCPC+2 ,PC当前值当前值PCPCPCPC当前值当前值+rel+rel转移范围:转移范围:转移目的地址转移目的地址PCPC当前值当前值+rel+relrelrel是是
23、8 8位符号数(补码),因此转移范围位符号数(补码),因此转移范围(PC(PC当前值当前值128)128)(PC(PC当前值当前值+127)+127)relrel 转移目的地址转移目的地址PCPC当前值当前值 补补 =转移目的地址转移目的地址(PC+(PC+指令字节数指令字节数)补补 PCPC是转移指令首字节地址是转移指令首字节地址;80rel rel80rel rel是是8 8位符号数(补码位符号数(补码)相对寻址方式相对寻址方式机器汇编只需在指令写出要转移到语句的标号,由汇编器自动计算相对偏移量。机器汇编只需在指令写出要转移到语句的标号,由汇编器自动计算相对偏移量。原地踏转指令原地踏转指令
24、 SJMP$原地踏转指令一般用于程序结束处,实现原地踏步效果,原地踏转指令一般用于程序结束处,实现原地踏步效果,原地踏转指令原地踏转指令relrel计算:计算:relrel$($+2)($+2)补补 22补补0FEH0FEH$表示所在指令的表示所在指令的ROMROM地址。地址。HERE:SJMP HERE 这类指令在执行过程中需要判断某种条件是否满足而决定要不要转移的指令。若这类指令在执行过程中需要判断某种条件是否满足而决定要不要转移的指令。若满足条件就转移,否则程序顺序执行。这类指令无一例外的都是相对寻址方式。满足条件就转移,否则程序顺序执行。这类指令无一例外的都是相对寻址方式。3.4.2
25、3.4.2 条件转移指令条件转移指令1 1、累加器、累加器A A状态转移指令状态转移指令JZ JZ JNZ JNZ JZJZ:J Jump if A is ump if A is Z ZeroeroJNZJNZ:J Jump if A is ump if A is N Not ot Z Zeroero2 2、累加位、累加位C C状态转移指令状态转移指令 JCJC:J Jump if ump if C C is set is setJNCJNC:J Jump if ump if C C is is N Not setot setJC JC JNC JNC 3.4.2 3.4.2 条件转移指令条件
展开阅读全文