欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    系列单片机指令系统和汇编语言程序示例.ppt

    • 资源ID:6013494       资源大小:3.07MB        全文页数:123页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    系列单片机指令系统和汇编语言程序示例.ppt

    单片微机原理及应用教学课件,第三章 51系列单片机指令系统和汇编语言程序示例,本重点:寻址方式;MCS-51指令集;伪指令;汇编语言与简单程序设计.,它通过单片机的内部总线,将单片机内部的各个部分:程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等联系在一起。,内部总线有三种,数据总线:专门用来传送数据信息。,地址总线:专门用来传送地址信息,选中各操作单元。,控制总线:专门用来传送CPU各种控制命令,以便CPU统一指挥协调工作。完成程序所要执行的各种功能。,程序计数器PC(program Counter),程序计数器在物理上是独立的,它不属于特殊内部数据存储器块中。PC是一个16位的计数器,由两个八位寄存器PCH和PCL组成,用于存放一条要执行的指令地址,寻址范围为64kB(ROM),PC有自动加1功能,即完成了一条指令的执行后,其内容自动加1。PC本身并没有地址,因而不可寻址,用户无法对它进行读写,但是可以通过转移、调用、返回等指令改变其内容,以控制程序的执行顺序。,CPU执行程序一般包括两个主要过程,第一,就是从程序存储器中取出指令,指令的地址由PC指针提供。,第二,就是执行指令过程,取出的指令代码首先被送到CPU中控制器中的指令寄存器,再通过指令译码器译码变成各种电信号,从而实现指令的各种功能。,执行,取指令,分析,3.1 51系列单片机指令系统概述,指令与指令系统的概念,汇编语言:由于机器语言不便被人们识别、记忆、理解和使用,因此给每条机器语言指令赋予助记符号来表示,这就形成了汇编语言。,指令:是使计算机内部执行的一种操作,提供给用户编程使用的一种命令。,机器语言:由构成计算机的电子器件特性所决定,计算机只能识别二进制代码。以二进制代码来描述指令功能的语言,称之为机器语言。,也就是说,汇编语言是便于人们识别、记忆、理解和使用的一种指令形式,它和机器语言指令一一对应,也是由计算机的硬件特性所决定的。,指令系统:计算机能够执行的全部操作所对应的指令集合,称为这种计算机的指令系统。,指令系统全面展示出了计算机的操作功能,也就是它的工作原理;从用户使用的角度来看,指令系统是提供给用户使用计算机功能的软件资源。要让计算机处理问题,首先要编写程序。编写程序实际上是从指令系统中挑选一个指令子集的过程。,单片微机原理及应用教学课件,指令一般有功能、时间和空间三种属性。,51系列单片机指令集含有111条指令,每条指令在执行时要花去一定的时间,以机器周期为单位。按指令执行时间分类:单周期(64条);双周期(45条);4周期(2条),按指令的功能分类,可分为5大类:数据传送类(29条);算术运算类(24条)逻辑运算及移位类(24);控制转移类(17条)位操作类(17条),每条指令在程序存储器ROM中占据一定的空间,以字节为单位。按指令所占字节数分类:单字节(49条);双字节(46条);3字节(16条),指令的描述形式有两种:机器语言形式和汇编语言形式。现在描述计算机指令系统及实际应用中主要采用汇编语言形式。,目标程序:采用机器语言编写的程序称之为目标程序。,源程序:采用汇编语言编写的程序称之为源程序。,汇编有两种方式:机器汇编和手工汇编。机器汇编是用专门的汇编程序,在计算机上进行翻译;手工汇编是编程员把汇编语言指令逐条翻译成机器语言指令。现在主要使用机器汇编。,汇编:计算机能够直接识别并执行的只有机器语言。汇编语言程序不能被计算机直接识别并执行,必须经过一个中间环节把它翻译成机器语言程序,这个中间过程叫做汇编。,目前,比较流行C语言单片机。C语言具有移植性强,具有通用性,阅读性好等特点,因此得到广泛应用。用C语言编写单片机程序,编译软件是先把C程序编译成汇编语言,在把汇编语言翻译成机器语言。汇编的特点:简洁,准确,生成代码质量高。我们学习以汇编为主,今后应用,鼓励大家用C。,单片微机原理及应用教学课件,ASM-51指令的格式,方括符 表示可选项标号代表指令所在的首地址,在跳转、调用时常常用到,1-8个字母/数字,“:”结尾操作码就是指令功能助记符,指令实体目的操作数源操作数(无操作数,单操作数,双操作数)注释,以“;”开头,标号:操作码 目的操作数,源操作数;注释,3.1.2 MCS-51单片机指令系统及其指令格式,指令描述符号介绍,Rn当前选中的寄存器区中的8个工作寄存器R0R7(n=07)。Ri当前选中的寄存器区中的2个工作寄存器R0、R1(i=0,1)。direct 表示直接寻址的地址,一般指片内低128字节RAM或SFR。#data包含在指令中的8位常数。#data16包含在指令中的16位常数。addr1616位直接地址,现在长以标号地址代替。addr1111位直接地址,现在长以标号地址代替。,rel8位带符号的偏移字节,简称偏移量,现在长以标号地址代替。DPTR数据指针,可用作16位地址寄存器。bit内部RAM或专用寄存器中的直接寻址位。A累加器。B专用寄存器,用于乘法和除法指令中。C进位标志或进位位,或布尔处理机中的累加器。,间址寄存器或基址寄存器的前缀,如Ri,DPTR。/位操作数的前缀,表示对该位操作数取反,如/bit。()片内RAM的直接地址或寄存器中的内容。()表示以单元的内容为地址的存储器单元中的内容,即(X)作地址,该地址单元中的内容用(X)表示。所以X只能是Ri/SP所对应的地址。箭头左边的内容被箭头右边的内容所代替。,单片微机原理及应用教学课件,1、立即寻址操作数直接在指令中给出。例:MOV A,#64H;(A)立即数 64H ADD A,#05H;(A)(A)+立即数 05H注意:符号“#”表明其后跟的是立即数,立即数就是数字量本身,存放在ROM区。,单片微机原理及应用教学课件,2、寄存器寻址从寄存器中读取操作数或存放操作数进寄存器例:MOV A,B;(A)(B)MOV 30H,R0;(30H)(R0)MOV A,R1;(A)(R1),寄存器寻址方式的寻址范围:1)4个工作寄存器组共32个通用寄存器(在指令中只能使用当前寄存器组)2)部分特殊功能寄存器。如A,B,DPTR。注意:(1)寄存器B只有在执行乘除法指令时才是寄存器寻址方式;(2)累加器A有三种表示方式:A、ACC、0E0H,它们分别属于不同的寻址方式,A为寄存器寻址,ACC、0E0H属于直接寻址。(3)DPTR:程序中写DPTR则为寄存器寻址;如果程序中写DPH(83H)和DPL(82H),则为直接寻址。,单片微机原理及应用教学课件,3、直接寻址指令中直接给出了操作数所在单元的地址或名称 例:MOV R1,1FH;(R1)(1FH)MOV 30H,4AH;(30H)(4AH),在本单片机中规定:访问特殊功能寄存器SFR只能采用直接寻址方式。例如:MOV A,SP;(A)(SP)MOV A,81H;(A)(SP)MOV P1,#5AH;(P1)(#5AH)MOV 90H,#5AH;(P1)(#5AH)MOV B,30H;(B)(30H),相同,相同,直接寻址方式可访问的范围-direct,1)特殊功能寄存器。这部分存储单元既可以用单元地址给出,也可以用寄存器符号的形式给出。如:MOV A,90H 或 MOV A,P1为同一条指令的两种写法。(A、B、DPTR除外,前面已说明)2)内部数据存储器的低128个字节单元。直接以单元地址的形式给出(00H-7FH)。对于8032/8052等单片机,其内部高128字节RAM(80HFFH)不能用直接寻址方式访问。,单片微机原理及应用教学课件,4、寄存器间接寻址寄存器中的内容是一个地址,由该地址单元寻址到所需的操作数,注意:1)“间接”表示某寄存器中的“内容”只是一个“单元地址”,这个地址单元中存放的数据才是要找的“操作数”。2)符号“”表示“在”,其含义与读音皆同“at”。,例:MOV R1,#80H;(R1)立即数80H MOV R1,#2FH;(80H)立即数2FH MOV A,R1;(A)(R1)=2FH,图3.1 寄存器间接寻址示意图,单片微机原理及应用教学课件,52系列单片机有256字节的片内RAM,其中的80H0FFH的RAM与SFR所占地址重叠。,MOV A,90H 等效于 MOV A,P1 属直接寻址 MOV A,R0;事先已知(R0)=#90H 执行的操作:A(90H)属寄存器间接寻址,随意写的指令如:MOV A,85H 则是非法的!,于是规定:80H0FFH范围内的RAM只能用寄存器间接寻址方式,而SFR只能用直接寻址方式。从而解决了地址冲突的问题。例如:,单片微机原理及应用教学课件,存储器配置(片内RAM),89C51片内RAM 128字节(00H7FH)89C52片内RAM 256字节(00H0FFH),00H,20H,2FH,7FH,1FH,30H,80H,FFH,52子系列才有的RAM区,普通RAM区,位寻址区,工作寄存器区,SFR分布在80H-FFH其中92个位可位寻址,80H,FFH,89C51 128字节,89C52 256字节,只能直接寻址,那么对于这高128的RAM如何访问?(间址),可以直接寻址,小结:1、对低128B的RAM可以采用直接寻址,或寄存器间接寻址方式进行读写。2、对于高128B的RAM只能采用寄存器间接寻址方式进行读写。3、对SRF只能采用直接寻址方式进行读写,常常采用助记符。,单片微机原理及应用教学课件,5、变址寻址 也称为:基址寄存器+变址寄存器间接寻址,以16位的地址指针寄存器DPTR或PC寄存器(16位)为基址寄存器,以累加器 A 为变址寄存器,两者中的“内容”形成一个16位的“地址”,该“地址”所指的存储单元中的内容才是操作数。,例:MOV A,#0A4H MOV DPTR,#1234H MOVC A,A+DPTR;(A)(A)+(DPTR)操作:将A4H+1234H=12D8H单元中的数放进累加器AMOVC A,A+PC;(A)(A)+(PC)单字节指令,单片微机原理及应用教学课件,6、相对寻址(P.58)当前PC值加上指令中规定的偏移量 rel,构成实际的操作数地址例:JZ rel;累加器A为零,则转移到rel目的地址=当前PC值+rel=指令存储地址+指令字节数(2)+rel,注意:1)当前PC值:指相对转移指令的存储地址加上该指令的字节数。例如:JZ rel 是一条累加器A为零就转移的双字节指令。若该指令的存储地址为2050H,则执行该指令时的当前PC值即为2052H。即当前PC值是对相对转移指令取指结束时的值。,注意:2)符号“rel”表示“偏移量”,是一个带符号的单字 节数,范围是:-128+127(80H7FH),负数表示从当前地址向前转移,正数表示从当前地址向后转移。,在实际编程中,“rel”通常用标号代替,单片微机原理及应用教学课件,7、位寻址指令中直接给出了操作数所在的位地址。例:CLR P1.0;(P1.0)0 SETB ACC.7;(ACC.7)1 CPL C;(C)NOT(C),注意:1)位地址里的数据只可能是一个 0 或 1 2)有的位地址十分明确,如 P1.0,ACC.7等,有的位地址则“不太明确”,如:MOV A,17H;(A)(17H),17H是字节地址 MOV ACC.0,17H;(ACC.0)(17H),这里ACC.0 是位地址所以该指令中的17H是22H单元的第7位,单片微机原理及应用教学课件,片内RAM中有128个位可按位寻址的位,位地址:00H7FH分布在:20H2FH单元;另外,在SFR中还有92个位可按位寻址,00H,20H,2FH,7FH,1FH,30H,80H,FFH,52子系列才有的RAM区,普通RAM区,位寻址区,工作寄存器区,27H,22H,21H,20H,26H,24H,25H,23H,28H,07 06 05 04 03 02 01 00,0F 0E 0D 0C 0B 0A 09 08,17 16 15 14 13 12 11 10,1F 1E 1D 1C 1B 1A 19 18,27 26 25 24 23 22 21 20,2F 2E 2D 2C 2B 2A 29 28,37 36 35 34 33 32 31 30,3F 3E 3D 3C 3B 3A 39 38,47 46 45 44 43 42 41 40,2FH,7F 7E 7D 7C 7B 7A 79 78,位地址,总共128个可按位寻址的位,单元地址,17,D7 D6 D5 D4 D3 D2 D1 D0,单片微机原理及应用教学课件,MCS-51指令集,功能分五类,共111条指令,单片微机原理及应用教学课件,MCS-51指令集(五大类功能),数据传送类指令:(29条)算术运算类指令:(24条)逻辑运算及移位类指令:(24条)控制转移类指令:(17条)位操作(布尔操作)类指令:(17条),3.3 数据传送类指令,3.3.1 访问片内数据存储器的一般数据传送指令,其格式如下:MOV,;目的操作数单元源操作数(或单元)该类指令的功能是实现数在片内RAM单元之间、寄存器之间、寄存器与RAM单元之间的传送。目的操作数和源操作数不同寻址方式的组合就派生出该类的全部16条指令。,图3.3 访问片内RAM的一般传送指令操作关系图,根据片内RAM的一般传送指令操作关系图,写出16条指令,例1、设内部RAM(30H)=40H,(40H)=10H,(10H)=00H,(P1)=CAH,分析下面程序。P.60 MOV R0,#30H MOV A,R0MOV R1,AMOV B,R1MOV R1,P1MOV P2,P1MOV 10H,#20H结果:(R0)=,(R1)=(A)=,(B)=,(40H)=(P1)=(P2)=,(10)=;,例1、设内部RAM(30H)=40H,(40H)=10H,(10H)=00H,(P1)=CAH,分析下面程序。P.60 MOV R0,#30H MOV A,R0MOV R1,AMOV B,R1MOV R1,P1MOV P2,P1MOV 10H,#20H结果:(R0)=30H,(R1)=(A)=40H,(B)=10H,(40H)=(P1)=(P2)=CAH,(10)=20H,3.3.2 片内特殊传送指令 1堆栈操作指令 堆栈操作有进栈和出栈,即压入和弹出数据,常用于保存或恢复现场。进栈指令用于保存片内RAM单元(低128字节)或特殊功能寄存器SFR的内容;出栈指令用于恢复片内RAM单元(低128字节)或特殊功能寄存器SFR的内容。堆栈指针寄存器SP,直接地址为81H,复位后(SP)=(81H)=07H。堆栈段一般设在片内RAM30H到7FH区域内。,单片微机原理及应用教学课件,2、堆栈操作指令(2条):,PUSH压栈指令,POP 弹栈指令,堆栈区由特殊功能寄存器堆栈指针SP 管理堆栈区可以安排在片内RAM单元(低128字节)任意位置,一般不安排在工作寄存器区和可按位寻址的RAM区,而是放在RAM区的靠后的位置堆栈总是指向栈顶通常PUSH与POP两条指令成对使用,PUSH direct;(先加1,再入)1)(SP)(SP)+1 修改指针,使其指向栈顶上的一个存数单元;2)(SP)direct 把直接地址单元的内容压入SP所指单元内。POP direct;(先出,再减1)1)(direct)(SP)把栈顶的数据弹出到直接寻址单元中去;2)(SP)(SP)-1 修改指针,指向新栈顶;这两条指令都是双字节指令,机器码分别为:C0 direct 和D0 direct。(先入,先出),例2 若在外部程序存储器中2000H单元开始依次存放09的平方值,数据指针(DPTR)=3A00H,用查表指令取得2003H单元的数据后,要求保持DPTR中的内容不变。,MOV A,#03HPUSH DPH PUSH DPL MOV DPTR,#TABMOVC A,A+DPTR POP DPLPOP DPH执行结果:(A)09H,(DPTR)=3A00H。,;(A)03H;保护DPTR高8位入栈;保护DPTR低8位入栈;(DPTR)2000H;(A)(2000H+03H);弹出DPTR低位;弹出DPTR高位,演示,由此可见,SP只是存放堆栈的地址,所以PUSH和POP指令属寄存器间接寻址方式。,单片微机原理及应用教学课件,2、数据交换指令(5条):XCH A,direct(字节互换)XCH A,Ri(字节互换)XCH A,Rn(字节互换)(A)(direct)或(Ri),或(Rn),XCHD A,Ri 累加器 Acc的低4位与(Ri)的低4位互换,各自的高4位不变,SWAP A 累加器 Acc的低4位与自身的高4位互换,单片微机原理及应用教学课件,3.3.3 片外数据存储器数据传送指令,MOVX类指令可在累加器与以DPTR或Ri所代表的外部 RAM或I/O口之间进行数据传送。,例如:MOVX A,DPTR;(A)(DPTR)读(64KB)MOVX A,Ri;(A)(Ri)读(64KB)MOVX DPTR,A;(DPTR)(A)写(256B)MOVX Ri,A;(Ri)(A)写(256B),MCS-51单片机CPU对片外扩展的数据存储器RAM或I/O口进行数据传送,必须采用寄存器间接寻址的方法,通过累加器A来完成。,数据存储器 6264(8K)的扩展:,89C51单片机,SRAM6264,锁存器74LS373,ALE,P2.7,8D,8Q,OE,A8-A12,A0-A7,D0-D7,G,EA,OE,CE2,51单片机能提供16条地址线,可扩展64K字节的RAM。可以用一片芯片,也可以用多片RAM,RD,WR,WE,CE1,+5V,图7-9 执行MOVX指令时的读时序,执行MOVX指令时的读时序,图7-10 执行MOVX指令时的写时序,执行MOVX指令时的写时序,读/RD有效(P3.7),写/WR有效(P3.6)。由于R0是8位的寄存器,DPTR是16位的寄存器,所以但外部数据存储器小于等于256B是采用R0,当外部数据存储器大于256B时,采用DPTR。当访问外部存贮器时,ALE以每机器周期两次进行信号输出,P0口输出的低八位地址由ALE输出的控制信号锁存到片外地址锁存器,P0口输出地址低八位后,又能与片外存贮器之间传送信息。,单片微机原理及应用教学课件,单片机,锁存器74LS373,ALE,PSEN,8D,8Q,OE,A8-A12,A0-A7,D0-D7,G,EA,OE,CE,EPROM,单片机的引脚(PSEN端),PSEN:寻址外部程序存储器时选通外部EPROM的 读控制端(OE)低有效。,图7-7 片外ROM操作时序图,片外ROM操作时序图,3.3.4 访问程序存储器的数据传送指令 P.61 访问程序存储器的数据传送指令又称作查表指令,采用基址寄存器加变址寄存器间接寻址方式,把程序存储器中存放的表格数据读出,传送到累加器A。共有如下两条单字节指令,指令操作码助记符为MOVC。指令助记符 操作功能注释 机器码(H)MOVC A,A+DPTR;(A)(A)+(DPTR)93MOVC A,A+PC;(PC)(PC)+1,(A)(A)+(PC)83 以上两条指令的区别:,前一条指令采用DPTR作基址寄存器,因此可以很方便地把一个16位地址送到DPTR,实现在整个64 KB程序存储器单元到累加器A的数据传送。即数据表格可以存放在程序存储器64 KB地址范围的任何地方。后一条指令以PC作为基址寄存器,CPU取完该指令操作码时PC会自动加1,指向下一条指令的第一个字节地址,即此时是用(PC)+1作为基址的。另外,由于累加器A中的内容为8位无符号数,这就使得本指令查表范围只能在256个字节范围内(即(PC)+1H(PC)+100H),使表格地址空间分配受到限制。同时编程时还需要进行偏移量的计算,即MOVC A,A+PC指令所在地址与表格存放首地址间的距离字节数的计算,并需要一条加法指令进行地址调整。偏移量计算公式为:偏移量=表首地址-(MOVC指令所在地址+1),例5 若在外部程序存储器中2000H单元开始依次存放09的平方值,以PC作为基址寄存器进行查表,得9 的平方值。设MOVC指令所在地址为1FF0H,则偏移量=2000H-(1FF0H+1)=0FH,相应程序如下:,MOV A,#09HADD A,#0FHMOVC A,A+PC,;(A)09H;用加法指令进行地址调整;(A)(A)+(PC)+1),演示MOVC-PC,以DPTR为基址寄存器的查表指令,程序如下MOV DPTR,#TABMOV A,#09HMOVC A,A+DPTR 执行结果:(A)51H。,演示MOVC-DPTR,图3.2 变址寻址示意图,单片微机原理及应用教学课件,单片机,锁存器74LS373,ALE,PSEN,8D,8Q,OE,A8-A12,A0-A7,D0-D7,G,EA,OE,CE,EPROM,单片机的引脚(PSEN端),PSEN:寻址外部程序存储器时选通外部EPROM的 读控制端(OE)低有效。,图7-7 片外ROM操作时序图,片外ROM操作时序图,3.4 算术运算类指令,3.4.1 加、减法指令,图3.4 加减法指令形式结构图(a)加减法指令关系图;(b)加1、减1指令关系图,单片微机原理及应用教学课件,算术运算类指令,加法运算:(ADD4条)带进位加法运算:(ADDC4条)带借位减法运算:(SUBB4条),所有的加法(ADD)、带进位加法(ADDC)、带借位减法(SUBB)运算都是以 A为一个加数或被减数,最终结果也存进 A。,加法(ADD)、带进位加法(ADDC)以及带借位减法(SUBB)运算中,如果产生了进位或借位,将自动对PSW中的Cy标志位置“1”。,带进位加法(ADDC):(A)(A)+(Cy)+(第二操作数)带借位减法(SUBB):(A)(A)-(Cy)-(第二操作数),单片微机原理及应用教学课件,加1/减1操作:(INC,DEC9条)INC,DEC与用加/减法指令做加1/减1 操作不同之处在于INC、DEC不影响标志位OV和Cy。,例6 设(A)=49H,(R0)=6BH,分析执行指令ADD A,R0后的结果。结果为:(A)=B4H,OV=1,CY=0,AC=1,P=0。例7 设(A)=C3H,数据指针低位(DPL)=ABH,CY=1,分析执行指令ADDC A,DPL后的结果。结果为:(A)=6FH,CY=1,AC=0,P=0。,例8 设(A)=52H,(R0)=B4H,分析执行如下指令后的结果 CLR C;是位操作指令,是进位位清零 SUBB A,R0 结果为:(A)=9EH,CY=1,AC=1,OV=1,P=1。,关于Cy和OV,1、CY(PSW.7)进位标志,简记C 8位无符号数在加法运算时,位7有进位,CY=1;无进位,CY=0 8位无符号数在减法运算时,位7有借位,CY=1;无借位,CY=0 在乘除运算时,CY=0,2、OV(PSW.2)溢出标志 在乘法运算时,乘积超过255,OV=1;否则OV=0 在除法运算时,除数为零,OV=1;否则OV=0 在有符号数加减运算时,数值超出有符号数的范围,OV=1,注意:8位有符号二进制数范围-128+127,任何时候OV都满足:OVC6 C7,例9 设(R0)=7EH,(7EH)=FFH,(7FH)=38H,(DPTR)=10FEH,分析逐条执行下列指令后各单元的内容。INC R0;使7EH单元内容由FFH变为00HINC R0;使R0的内容由7EH变为7FHINC R0;使7FH单元内容由38H变为39HINC DPTR;使DPL为FFH,DPH不变INC DPTR;使DPL为00H,DPH为11HINC DPTR;使DPL为01H,DPH不变,单片微机原理及应用教学课件,3.4.2 十进制调整指令,BCD码是指“用二进制表达的十进制数”。如:十进制数20可以用二进制数00010100B表示;也可以用十六进制数14H表示;还可以用BCD码 00100000B 或 20H 表示。,4个二进制位就可以表示一位BCD码:00001001 可表示十进制数(BCD数)09;8个二进制位就可以表示两位压缩的BCD码:0000000010011001 表示 0099。,十进制调整:(DA A1条)用于两个BCD码之间的相加,这条指令只能跟在 ADD 或 ADDC 之后,单片微机原理及应用教学课件,若(A)309或(AC)=1则(A)30(A)306;若(A)749或(CY)=1则(A)74(A)746;,例:两个十进制数“65”与“58”相加,根据常识,显然其和应当为“123”。,MOV A,#65H ADD A,#58H DA A结果:(A)=23H(CY)=1,指令“DA A”完成的操作:,6 5 0110 0101 5 8 0101 1000 1011 1101,+,1,3,2,0110 0110,1 0010 0011,+,1、使用时应注意:DA指令不能对减法进行十进制调整。做减法运算时,可采用十进制补码相加,然后用 DA A指令进行调整。机内十进制补码可采用:x补=9AH-x。,P.64例11 设片内RAM 30H,31H单元中分别存放着两位BCD码表示的被减数和减数,两数相减的差仍以BCD码的形式存放在32H单元中。可用下面的程序实现:CLR CMOV A,#9AHSUBB A,31H;求减数的十进制补码ADD A,30H;作十进制补码加法DA A;进行BCD调整MOV 32H,A;将BCD码的差送存32H单元,3.4.3 乘、除法指令,MUL AB;,(B)(A)(B)158(A)(A)(B)70CY0,机器码:A4H,乘法指令的功能是把累加器A和寄存器B中的两个8位无符号数相乘,将乘积16位数中的低8位存放在A中,高8位存放在B中。若乘积大于FFH(255),则溢出标志OV置1,否则OV清零。乘法指令执行后进位标志CY总是零,即CY=0。,1.乘法指令,2除法指令,除法指令的功能是把累加器A中的8位无符号整数除以寄存器B中的8位无符号整数,所得商存于累加器A中,余数存于寄存器B中,进位标志位CY和溢出标志位OV均被清零。若B中的内容为0时,溢出标志OV被置1,即OV=1,而CY仍为0。,3.5 逻辑运算及移位指令,图3.5 逻辑指令形式结构图,表3.3 逻辑操作指令表,表3.3 逻辑操作指令表,例12(P1)=C5H=11000101B,屏蔽P1口高4位而保留低4位。执行指令:ANL P1,#0FH 结果为:(P1)=05H=00000101B。()逻辑“或”指令常用来使字节中某些位置“1”,其它位保持不变。则欲置位的位用1与该位相或,保留不变的位用0 与该位相或。,()逻辑“与”指令常用于屏蔽(置0)字节中的某些位。若清除某位,则用“0”和该位相与:若保留某位,则用“”和该位相与,例13 若(A)=C0H,(R0)=3FH,(3FH)=0FH,执行指令:ORL A,R0 结果为:(A)=CFH=11001111B。()逻辑异或指令常用来使字节中某些位进行取反操作,其它位保持不变。欲某位取反该位与1相异或;欲某位保留则该位与0 相异或。还可利用异或指令对某单元自身异或,以实现清零操作。,例14 若(A)=B5H=10110101B,执行下列操作:XRL A,#0F0H;A的高4位取反,低4位保留,(A)=01000101B=45H MOV 30H,A;(30H)=45H XRL A,30H;自身异或使A清零()用移位指令还可以实现算术运算,左移一位相当于原内容乘以2,右移一位相当于原内容除以2,但这种运算关系只对某些数成立(请读者自行思考)。,例15 设(A)=5AH=90,且CY=0,则执行指令RL A后,(A)=B4H=180。执行指令 RR A后,(A)=2DH=45。执行指令 RLC A后,(A)=B4H=90。执行指令 RRC A后,(A)=2DH=45。,3.6 控制转移类指令,3.6.1 无条件转移指令,表3.4 无条件转移指令,1LJMP(长转指令)LJMP addr16 长跳转指令 可在64K范围内跳转 LJMP指令执行后,程序无条件地转向16位目标地址(addr16)处执行,不影响标志位。可以使程序从当前地址转移到64 KB程序存储器地址空间的任意地址。,2AJMP(绝对转移指令)AJMP addr11 绝对跳转指令 可在指令所在的2K范围内跳转 AJMP的机器码是由11位直接地址addr11和指令操作码00001,按下列分布组成的:,该指令执行后,程序转移的目的地址是由AJMP指令所在位置的地址PC值加上该指令字节数2,构成当前PC值。取当前PC值的高5位与指令中提供的11位直接地址形成转移的目的地址,即,PC15 PC14 PC13 PC12 PC11a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0,转移目的地址(PC),由于11位地址的范围是(000007FFH),即2 KB范围,而目的地址的高5位是由PC当前值,所以程序可转移的位置只能是和PC当前值在同一2 KB范围内。本指令转移可以向前也可以向后,指令执行后不影响状态标志位。例如:若AJMP指令地址(PC)=2300H。执行指令AJMP 0FFH后,结果为:转移目的地址(PC)=20FFH,程序向前转到20FFH单元开始执行。又如:若AJMP指令地址(PC)=2FFFH。执行指令AJMP 0FFH后,结果为:转移目的地址(PC)=30FFH,程序向后转到30FFH单元开始执行因为在执行本指令,当前PC=2FFFH+2。由上可见:若addr11相同,则AJMP指令的机器码相同,但转移的目的地址却可能不同,这是因为转移的目的地址是由PC当前值的高5位与addr11共同决定的。,3SJMP(相对短转指令)SJMP rel 相对跳转指令 可在当前PC-128与+127范围内跳转 指令的操作数rel用8位带符号数补码表示,占指令的一个字节。因为8位补码的取值范围为-128+127,所以该指令的转移范围是:相对PC当前值向前转128字节,向后转127字节。即转移目的地址=SJMP指令所在地址+2+rel 如在2100H单元有SJMP指令,若rel=5AH(正数),则转移目的地址为215CH(向后转);若rel=F0H(负数),则转移目的地址为20F2H(向前转)。,用汇编语言编程时,指令中的相对地址rel往往用欲转移至的地址的标号(符号地址)表示。机器汇编时,能自动算出相对地址值;但手工汇编时,需自己计算相对地址值rel。rel的计算公式如下:向前转移:rel=FEH-(SJMP指令地址与目的地址差的绝对值)向后转移:rel=FEH-(SJMP指令地址与目的地址差的绝对值)-2 若rel=FEH,即目的地址就是SJMP指令的地址,在汇编指令中的偏移地址可用$符号表示。若在程序的末尾加上SJMP$(机器码为80 FEH),则程序就不会再向后执行,造成单指令的无限循环,进入等待状态。,4JMP A+DPTR(相对长转移指令)JMP A+DPTR 间接长跳转指令 可在以DPTR为基址+A为偏移量之和所指向的64K程序范围内跳转 它是以数据指针DPTR的内容为基址,以累加器A的内容为相对偏移量,在64 KB范围内无条件转移。该指令的特点是转移地址可以在程序运行中加以改变。例如,当DPTR为确定值,根据A的不同值就可以实现多分支的转移。该指令在执行后不会改变DPTR及A中原来的内容。,例16 根据累加器A的值,转不同处理程序的入口。MOV DPTR,#TABLE;表首地址送DPTR JMP A+DPTR;根据A值转移ABLE:AJMP TAB1;当(A)=0时转TAB1执行 AJMP TAB2;当(A)=2时转TAB2执行 AJMP TAB3;当(A)=4时转TAB3执行,可见,A必须是偶数,因为AJMP TAB#是双字节指令。若为LJMP TAB#则A值应该为多少?,3.6.2 条件转移指令 条件转移指令是当某种条件满足时,程序转移执行;条件不满足时,程序仍按原来顺序执行。转移的条件可以是上一条指令或更前一条指令的执行结果(常体现在标志位上),也可以是条件转移指令本身包含的某种运算结果。由于该类指令采用相对寻址,因此程序可在以当前PC值为中心的-128+127范围内转移。该类指令共有8条,可以分为累加器判零条件转移指令、比较条件转移指令和减1条件转移指令三类。表3.5中列出了这些指令。,表3.5 条件转移指令,JZ指令:累加器A为0转移,不为0则顺序执行;JNZ指令:累加器A不为0转移,为0则顺序执行。累加器A的内容是否为0,是由这条指令以前的其它指令执行的结果决定的,执行这条指令不作任何运算,也不影响标志位。,1判零条件转移指令,条件转移:JZ,JNZ,JZ relJNZ rel根据Acc的内容是否为0决定是否跳转,例17 将片外RAM首地址为DATA1的一个数据块转送到片内RAM首地址为DATA2的存储区中,遇零终止。外部RAM向内部RAM的数据转送一定要经过累加器A,利用判零条件转移正好可以判别是否要继续传送或者终止。完成数据传送的参考程序如下:MOV R0,#DATA1;R0作为外部数据块的地址指针 MOV R1,#DATA1;R1作为内部数据块的地址指针LOOP:MOVX A,R0;取外部RAM数据送入AHERE:JZ HERE;数据为零则终止传送 MOV R1,A;数据传送至内部RAM 单元 INC R0;修改指针,指向下一数据地址 INC R1 SJMP LOOP;循环取数,2比较转移指令CJNE A,#data,relCJNE A,direct,rel CJNE Ri,#data,relCJNE Rn,#data,rel 将A(或Ri,或Rn)与#data(或direct)相比较,其值不相等就跳转;相等则不跳转,继续往下执行。,单片微机原理及应用教学课件,以上指令执行过程:(1)若第一操作数=第二操作数,顺序执行,进位标志位CY清0;(2)若第一操作数第二操作数,程序转移,进位标志位CY清0;(3)若第一操作数第二操作数,程序转移,进位标志位CY清1;,比较是进行一次减法运算,但其差值不保存,两个数的原值不受影响,而标志位CY要受到影响。利用标志位CY作进一步的判断,可实现三分支转移。,例18 当从P1口输入数据为01H 时,程序继续执行,否则等待,直到P1口出现01H。参考程序如下:MOV A,#01H;立即数01H送AWAIT:CJNE A,P1,WAIT;(P1)01H,则等待,3减1条件转移指令DJNZ direct,relDJNZ Rn,rel将direct(或Rn)里的内容减 1,结果不等于0就跳转;等于0则不跳转继续往下走。减1条件转移指令有两条。每执行一次这种指令,就把第一操作数减1,并把结果仍保存在第一操作数中,然后判断是否为零。若不为零,则转移到指定的地址单元,否则顺序执行。,若单片的晶振频率为6MHZ,问执行下列程序需要的时间DELAY:MOV R3,#100;1LOOP:NOP;1NOP NOPDJNZ R3,LOOP;2RET;2,3.7.3 空操作指令 NOP;(PC)(PC)+1“耗时”一个机器周期。do nothing!空操作指令是一条单字节单周期指令。它控制 CPU不做任何操作,仅仅是消耗这条指令执行所需要的一个机器周期的时间,不影响任何标志位,故称为空操作指令。NOP指令在设计延时程序、拼凑精确延时时间及在程序等待或修改程序等场合是很有用的。,若单片的晶振频率为6MHZ,问执行下列程序需要的时间DELAY:MOV R3,#100;1LOOP:NOP;1NOP NOPDJNZ R3,LOOP;2RET;2,1+,1,+1,+1,+2,()*100,+2,=503,T=503*2uS=1006uS1mS,例19 将内部RAM从DATA单元开始的10个无符号数相加,相加结果送SUM单元保存。设相加结果不超过8位二进制数,则相应的程序如下:CL

    注意事项

    本文(系列单片机指令系统和汇编语言程序示例.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开