欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    内核单片机汇编语言程序设计.pptx

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

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

    内核单片机汇编语言程序设计.pptx

    会计学1内核单片机汇编语言程序设计内核单片机汇编语言程序设计2第第4章章 51内核单片机汇编语内核单片机汇编语言程序设计言程序设计4.14.1、汇编指令格式、汇编指令格式4.24.2、寻址方式、寻址方式4.34.3、指令系统、指令系统4.44.4、汇编程序常用伪指令、汇编程序常用伪指令4.54.5、汇编语言程序设计、汇编语言程序设计第1页/共141页3一、基本概念一、基本概念指令使单片机完成基本操作的命令。程序完成某项特定任务的指令的集合。高级语言:汇编语言:机器语言:程序设计语言:用二进制代码表示指令和数据。用助记符表示指令操作功能,用标号表示操作对象。独立于机器,面向过程,接近自然语言和数学表达式。第四章51内核单片机汇编语言程序设计第2页/共141页4 汇编程序功能 源程序 (汇编指令程序)汇编 目标程序(机器语言程序)汇编指令与机器码指令有一一对应的关系。汇编程序是一种翻译程序,将源程序翻译成目标程序。(翻译)手工汇编 机器汇编(常用)汇编的两种方式第3页/共141页5 关于机器汇编的说明两次扫描过程。第一次扫描:检查语法错误,确定符号名字;建立使用的全部符号名字表;每一符号名字后跟一对应值(地址或数)。第二次扫描:在第一次扫描基础上,将符号地址转换成地址(代真);利用操作码表将助记符转换成相应的目标码。第4页/共141页6源程序目标程序地址 ORG 1000HSTART:MOV R0,2FH MOV R2,#00H MOV A,R0 MOV R3,A INC R3 SJMP NEXT LOOP:INC R0 CJNE R0,#44H,NEXT INC R2 NEXT:DJNZ R3,LOOP MOV 2AH,R2 SJMP$END第一次汇编第二次汇编1000A82F10027A001004E61005FB10060B100780NEXT100908100AB644NEXT100D0A100EDBLOOP10108A2A101280FEA82F7A00E6FB0B800508B644010ADBF98A2A80FE第5页/共141页7n n时间属性:指一条指令执行完毕所需要的时间时间属性:指一条指令执行完毕所需要的时间n n空间属性:指一条指令存储于程序存储器中所占的字节数空间属性:指一条指令存储于程序存储器中所占的字节数n n功能属性:指一条指令所对应的一个特定的操作功能功能属性:指一条指令所对应的一个特定的操作功能 指令的三种属性 STC系列单片机采用了80C51内核,其指令集与MCS51系列单片机完全相同,本章介绍的指令系统可适用于所有51内核的单片机。第6页/共141页8指令的构成指令=操作码+操作数操作码表示该指令所能执行的操作功能。操作数表示参加操作的数的本身或操作数所在的地址。汇编语言指令基本格式标号:操作码助记符目的操作数,源操作数;注释4.1汇编指令格式第7页/共141页9描述符号:Rn工作寄存器R0R7Ri间接寻址寄存器R0、R1Direct直接地址,包括内部128BRAM单元地址、所有SFR地址。#data8位立即数#data1616位立即数addr1616位目的地址addr1111位目的地址rel用补码表示的8位相对偏移量bit可直接位寻址的位第8页/共141页10/bit指定位求反,再参与逻辑操作,但取反后不影响该位的原值(x)x中的内容(x)x中的地址中的内容表示操作流程,将箭尾一方内容送入箭头所指一方的单元中去当前指令地址第9页/共141页114.2 4.2 寻址方式寻址方式寻址方式寻址方式n n寻址方式寻址方式寻找操作数或寻找操作数所在存储寻找操作数或寻找操作数所在存储 单元地址的方式单元地址的方式n n共七种寻址方式:共七种寻址方式:寄存器寻址直接寻址立即数寻址寄存器间接寻址变址寻址相对寻址位寻址必须掌握第10页/共141页12操作数以常数的形式直接出现在指令中,用“#”作前缀;该常数与操作码一起存放在ROM中,可以立即得到并执行。例如:MOVA,#52H74HA 立即数操作码程序存储器PC+1PC52H立即(数)寻址52H第11页/共141页13例如:MOVDPTR,#5678HDPTR由两个特殊功能寄存器DPH和DPL组成90H56H78H56H78HPCPC+1PC+2操作码低位立即数高位立即数程序存储器SFRDPLDPH 注意:1.只有源操作数能使用立即寻址方式。2.立即数长度必须小于或等于目的操作数的长度。第12页/共141页14操作数存放在R0R7、A或DPTR中;B寄存器在乘、除法指令中是寄存器寻址,在数据传送指令中是直接寻址。其他SFR的寻址方式不属于寄存器寻址。例如:MOVA,R5寄存器寻址101PC操作码程序存储器内部RAMR5AXXXXR6R711101第13页/共141页15指令中直接给出操作数的地址,数据存放在该地址对应的存储单元中。直接寻址方式可以访问的范围:直接寻址片内RAM低128B 单元(00H7FH)SFR(既可用单元地址形式给出,也可用寄存器符号的形式给出)注意:直接寻址方式是访问特殊功能寄存器的唯一方法。第14页/共141页16MOVP0,A(P0代表符号地址,是直接寻址方式)例如:MOVA,63H直接寻址74H63HPCPC+1操作码直接地址程序存储器内部RAM63HAXXMOV80H,AXX第15页/共141页17可用作地址指针的工作寄存器是R0、R1,以及DPTR例如:MOVA,R1;A(R1)PC操作码程序存储器内部RAMA1110011寄存器间接寻址指令中寄存器的内容作为操作数存放的地址间接寻址寄存器前用“”表示前缀1R130H30H58H58H第16页/共141页18使用该方式访问数据存储器时注意:访问片内RAM只能用R0和R1作指针;若片内扩展RAM或片外RAM仅有256B 单元时,既可以用R0或R1作指针间接访问,也可用DPTR作指针间接访问;大于256B 时只能以DPTR作指针间接访问。第17页/共141页19操作数地址=变地址+基地址基地址寄存器:DPTR或PC;变址寄存器:A该寻址方式常用于访问程序存储器,查表。例如:MOVCA,A+DPTRPC操作码程序存储器SFR32HALUA5H变址寻址10010011DPHDPL32A5H32A5HA23H+23H=32C8H32C8H2FH2FH设DPTR=32A5H,A=23H第18页/共141页20 用于相对转移指令中以当前PC值作为基地址,与指令中给定的相对偏移量rel相加,以所得之和作为目的位置的地址当前PC值源地址转移指令所占的字节数(实际上是转移指令的下一条指令的地址)rel:以补码表示的有符号单字节数(-128127),负数表示从当前地址向下转移,正数表示从当前地址向上转移。相对寻址第19页/共141页21PC操作码程序存储器PCALU2050HPC+12051HPC+2偏移量rel=08H例如:JZ08H;rel为正数,从当前地址向上转移当A=0时,PCPC+2+rel/转移当A0时,PCPC+2/程序顺序执行2052H205AH2052H08H+08H=205AHPC205AHXX2052H60H第20页/共141页22PC操作码程序存储器PCALU2050HPC+12051HPC+2偏移量rel=F4H例如:JZF4H;rel为负数,从当前地址向下转移当A=0时,PCPC+2+rel/转移当A0时,PCPC+2/程序顺序执行2052H2046H2052HF4H+FFF4H=2046HPC2046HXX2052H60H第21页/共141页23操作数是二进制位在指令中直接给出位地址,利用位处理器对某一位进行数据传送、逻辑运算等操作例如:MOVC,07H;C(07H)PC操作码程序存储器C20H00PC+1PSWSFRX位寻址07H07XA2H第22页/共141页24 两种位寻址区:(1)内部RAM中的位寻址区:字节地址为20H2FH;(2)SFR的可寻址位。位地址的几种表示方法:1)直接使用位地址;如:PSW的位6可表示为0D6H 2)字节地址带位号;或0D0H.6 3)SFR名带位号;或PSW.6 4)位符号地址表示;或AC 第23页/共141页25数据传送指令共29条,包括:普通传送指令、数据交换指令和堆栈操作指令程序存储器ROM特殊功能寄存器SFR片内RAM128字节扩展数据存储器RAMMOVCMOVXMOVPUSHPOPXCHXCHD4.3指令系统数据传送指令注意:该类指令只有以A为目的操作数的指令影响PSW中的P标志位,其它数据传送指令对各标志位无影响。第24页/共141页26回忆操作数描述符:direct,Rn,Ri,#data,DPTR等。1)以A为目的操作数的传送指令MOVA,#dataMOVA,directMOVA,RnMOVA,RiMOVRn,#dataMOVRn,directMOVRn,A1、普通传送指令片内RAM传送指令MOV;A(Rn);Adata;A(direct);A(Ri)2)以Rn为目的操作数的传送指令;RnA;Rndata;Rn(direct)第25页/共141页27MOVdirect,RnMOVdirect,Ri4)以Ri为目的操作数的传送指令MOVRi,#data;(Ri)dataMOVRi,direct;(Ri)(direct)MOVRi,A;(Ri)()MOVDPTR,#data16;唯一的16位数据传送指令。(direct)(A)MOVdirect,A;3)以direct为目的操作数的传送指令MOVdirect,#data(direct)dataMOVdirect,direct(direct)(direct)(direct)(Rn)(direct)(Ri)5)以DPTR为目的操作数的传送指令第26页/共141页28MOVRn,RnMOVRi,RiMOVRn,RiMOV#data,A注意:1)在数据传送指令中目的操作数和源操作数中不能 同时出现工作寄存器。2)SFR只能用直接寻址方式访问。3)片内RAM高128B(80H-FFH)只能用寄存器间 接寻址方式访问。【例4-1】写出将R0的内容送到R5中的程序段。MOVA,R0MOVR5,A第27页/共141页29扩展数据存储器传送指令对片内扩展RAM或片外扩展RAM及外部接口电路进行数据传送的相关指令:MOVXA,RiMOVXA,DPTRMOVXRi,AMOVXDPTR,A执行过程中会使/WR、/RD有效。;A(Ri);A(DPTR);(Ri)A;(DPTR)A(读)(读)(写)(写)注意:1)通过DPTR间接寻址,可以对整个64KB片外RAM访问。2)通过Ri间接寻址,只能对扩展RAM的低256字节访问,如果地址范围大于256B 时,应谨防地址冲突。第28页/共141页30【例4-2】试编写一程序段,实现将片外RAM地址为01E0H开始的16个单元中的内容传送到片内扩展RAM地址为04FFH开始的单元中。参考程序为:MOVR2,#10HMOVP2,#01HMOVR0,#0E0HMOVDPTR,#04FFHLOOP:ORLAUXR,#00000010BMOVXA,R0ANLAUXR,#11111101BMOVXDPTR,AINCR0INCDPTRDJNZR2,LOOPD7D6D5D4D3D2D1D0T0 x12T1x12 UART_M0 x6BRTR S2SMODBRTx12EXTRAM S1BRSEXTRAM=1时,访问片外扩展RAM第29页/共141页31程序存储器传送指令MOVC(查表指令)MOVCA,A+DPTRMOVCA,A+PCMOVC含义是传送常数。(A)+(DPTR)或PC当前值=一个16位的地址,将该ROM地址中的内容传送给A。以DPTR为基地址的指令,可在ROM的64KB范围内查 表;(常用)以PC为基地址的指令只能在(PC)+1为基点的256B范 围内查表;(不推荐)使用第一条指令前,需事先将表首地址存入DPTR中,相对于表首偏移量存入A寄存器中。第30页/共141页32例如:(A)=30H,当前地址1000HMOVCA,A+PC;A(?H)例如:ORG8000HMOVA,#30HMOVCA,A+PC;A(?H)ORG8030HDB41H,42H,43H,44H,45H例如:(DPTR)=8100H,(A)=40HMOVCA,A+DPTR;A(?H)80331031阅读以下三个程序段,并回答?的内容。8140第31页/共141页33【例4-3】将ROM02FFH单元的内容送片内RAM的50H单元中。参考程序如下:MOVA,#0MOVDPTR,#02FFHMOVCA,A+DPTRMOV50H,A第32页/共141页34【例4-4】设data是一个BCD码常数,试用查表法获得其相应的ASCII码。将09的ASCII码组成一个表依次存放于程序存储器中以TAB为首地址的各单元中。参考程序如下:MOVA,#data MOVDPTR,#TABMOVCA,A+DPTRTAB:DB30H,31H,32HDB33H,34H,35H,36H,37H,38H,39H第33页/共141页352、数据交换指令普通传送指令数据传送是单向的,传送后只有目的操作数变化。数据交换指令是双向传送,交换后两个操作数都变。整字节交换指令XCHA,Rn(A)(Rn)XCHA,direct(A)(direct)XCHA,Ri(A)(Ri)半字节交换指令XCHDA,Ri(A3-0)(Ri)3-0)A寄存器高低半字节交换指令SWAPA(A3-0)(A7-4)第34页/共141页36【例4-5】已知(R0)30H,(A)65H,(30H)8FH,分析执行如下指令后A与30H单元中数据的变化。XCHA,R0XCHDA,R0SWAPA;交换后,(A)=8FH,(30H)=65H;交换后,(A)=85H,(30H)=6FH;交换后(A)=58H第35页/共141页37【例4-6】将片内RAM30H和31H单元中的ASCII码转换成压缩式BCD码存入20H单元。其中30H单元中的数值为低位,31H单元中的数值为高位。分析:09的ASCII码的低4位即是所对应的BCD码。参考程序如下:MOVR0,#30HMOVR1,#31HXCHDA,R1SWAPAXCHDA,R0XCHA,20H第36页/共141页38(2)(SP)(direct)3、堆栈操作指令PUSHdirectPOPdirectPUSHdirect指令执行中,机器自动进行两步操作:(1)SP(SP)+1POPdirect指令执行中,机器也自动进行两步操作:(1)direct(SP)(2)SP(SP)1不影响任何标志位堆栈:按后进先出原则读写的特殊RAM区。在用户初始化程序中要先给堆栈指针赋初值,确定栈底位置。使用指令:MOVSP,#DATA第37页/共141页394FH50H51H52HSP80HPSW=80H例:“PUSHPSW”指令的执行过程执行前:SP=4FH执行后:SP=50H第38页/共141页404FH50H51H52HSPSP80HPSW=H例:“POPPSW”指令的执行过程80H执行前:SP=50H执行后:SP=4FH第39页/共141页41【例4-7】在程序存储器中从标号为TAB1的单元开始依次存放09的平方值,R7中存有09中的某个数,用查表指令取出R7中数据所对应的平方值并存入R7中,要求执行后DPTR中的内容不改变。参考程序如下:PUSHDPHPUSHDPLMOVA,R7MOVDPTR,#TAB1MOVCA,A+DPTRMOVR7,APOPDPLPOPDPHTAB1:DB00H,01H,04H,09H,第40页/共141页42包括:加、减、乘、除;增量、减量;十进制的BCD码调整。1、加法指令不带进位位加法指令ADDA,#data;A(A)+dataADDA,direct;A(A)+(direct)ADDA,Rn;A(A)+(Rn)ADDA,Ri;A(A)+(Ri)无符号数相加时:若C=1,(其值 255)。有符号数相加时:若OV=1,说明有溢出。3.3.2算术运算类指令第41页/共141页43带进位位加法指令ADDCA,#data;A(A)+data+(CY)ADDCA,direct;A(A)+(direct)+(CY)ADDCA,Rn;A(A)+(Rn)+(CY)ADDCA,Ri;A(A)+(Ri)+(CY)ADD和ADDC指令的目的操作数均是A寄存器。ADD和ADDC指令在执行时要影响CY、AC、OV和P标志位。OV仅用来判断有符号数运算是否正确。常用ADD和ADDC指令配合实现多字节加法运算。对于加法指令的说明第42页/共141页44【例4-8】设(A)=28H,(R1)=7CH,分析执行指令ADDA,R1后的结果。001010000111110010100100结果为:A=0A4H,CY=0,AC=1,P=1,OV=1第43页/共141页45【例4-9】设双字节数X存在片内RAM40H、41H单元,Y存在42H、43H单元,编程求Z=X+Y,并存入片内RAM44H、45H、46H单元。(所有数据按高字节存于低地址单元的规则存放)参考程序如下:MOVA,41HADDA,43HMOV46H,AMOVA,40HADDCA,42HMOV45H,AMOVA,#00HADDCA,#00HMOV44H,A第44页/共141页462、减法指令SUBBA,#data;A(A)-data-(CY)SUBBA,direct;A(A)-(direct)-(CY)SUBBA,Rn;A(A)-(Rn)-(CY)SUBBA,Ri;A(A)-(Ri)-(CY)51指令系统只有带借位的减法指令,当需要执行不带借位的减法运算时,可先通过“CLRC”指令,将进位标志CY清零。SUBB指令在执行时要影响CY、AC、OV和P标志位。OV仅用来判断有符号数运算是否正确。对于减法指令的说明第45页/共141页47【例4-10】设(A)=52H,(R0)=0B4H,分析执行指令CLRCSUBBA,R0后的结果。010100101011010010011110结果为:A=9EH,CY=1,AC=1,P=1,OV=1第46页/共141页48【例4-11】两个双字节无符号数分别存放于寄存器R0R1及R2R3中,试编程计算它们的差,结果存于寄存器R4R5中。其中R0和R1中分别存放被减数的高8位和低8位。R2和R3中分别存放减数的高8位和低8位。差的高、低8位分别存于寄存器R4和R5中。参考程序如下:MOVA,R1CLRCSUBBA,R3MOVR5,AMOVA,R0SUBBA,R2MOVR4,A第47页/共141页493、加1指令INCA;(A)(A)+1,以下类同。INCRnINCdirectINCRiINCDPTRINC指令除了INCA要影响P标志位外,对其它标志位都没有影响。【例4-12】设(R0)=7EH,片内RAM(7EH)=0FFH,(7FH)=40H(DPTR)=21FEH,分析逐条执行下列指令后各单元的内容。INCR0INCR0INCR0INCDPTRINCDPTR;使7EH单元的内容由0FFH变为00H;使R0的内容由7EH变为7FH;使7FH单元的内容由40H变为41H;使DPL为FFH,DPH不变;使DPL为00H,DPH变为22H第48页/共141页504、减1指令DECA;(A)(A)-1,以下类同。DECRnDECdirectDECRiDEC指令除了DECA要影响P标志位外,对其它标志位都没有影响。在51内核单片指令系统中,没有“DECDPTR”指令。对于减1指令的说明第49页/共141页515、乘、除法指令乘法指令MULAB;(A)(B),积的低8位在A中,积的高8位在;B中,CY总为0。当积大于255时(即B中不为0);则置位OV标志。51内核单片机乘、除法指令只针对无符号数运算。这两条指令影响CY、OV和P,其它标志位不受影响。除法指令DIVAB;(A)(B),商在A中,余数在B中。;(CY)总是0。;若除数(B)=0,则(OV)=1,否则(OV)=0。第50页/共141页52【例4-13】试将A寄存器中的二进制数转换为BCD码,结果的百位数存放于31H单元,十位数和个位数压缩后存于30H单元。参考程序如下:MOVB,#100DIVABMOV31H,AMOVA,#10XCHA,BDIVABSWAPAADDA,BMOV30H,A第51页/共141页53DAA;二十进制调整指令。(A30)9时或(AC)=1时,(A30)(A30)+6(A74)9或(C)=1时,(A74)(A74)+6选择修正值的规则:6、十进制调整指令执行过程中,CPU能根据加法运算后,A中的值和PSW中的AC及CY标志位的状况自动选择一个修正值(00H、06H、60H、66H)与原运算结果相加,进行二十进制调整。DAA指令只能跟在加法指令后面使用。参加运算的两数是BCD码才有必要调整。第52页/共141页54【例4-14】设A寄存器内存有BCD码56H,寄存器R3内存有BCD码67H,执行ADDA,R3指令后,结果应该是123,但实际结果为:0101011056+011001116710111101BDH需再执行指令DAA,对上面的结果进行调整,因高4位及低4位数都大于9,故需加66H。10111101+01100110加66H调整100100011123第53页/共141页55BCD码减法方法:减法可以转换为加法运算,将减数转换为十进制补码,然后相加,再用DAA指令进行调整。例如:80-30=80+-30 补=80+(100-30)=150结果中百位数字1在CY中,A寄存器中的50H即80-30的BCD码。在实际运算时,不能用一个字节表示十进制数100,可用99+1表示,即10011001B+1=10011010B=9AH,因为9AH经过十进制调整后就是100。第54页/共141页56十进制无符号数的减法运算可按以下步骤进行:第一步:求减数的十进制补码(9AH-减数);第二步:被减数与减数的十进制补码相加;第三步:经DAA指令调整后就得到所求的十进制减法运算结果。【例415】设M1、M2、M3分别为十进制的被减数、减数和差的符号地址,编写减法运算程序。CLRC;CY清0MOVA,9AH;A9AHSUBBA,M2;求M2的十进制补码ADDA,M1;M1与M2的十进制补码相加DAA;十进制调整MOVM3,A;差存入M3第55页/共141页57逻辑运算指令逻辑运算指令该类指令除了带进位循环及A为第一操作数的指令影响CY和P外,其它指令不影响PSW中的标志位。1.逻辑与指令ANLA,#data;A(A)data,以下类同ANLA,RnANLA,directANLA,RiANLdirect,#dataANLdirect,A【例4-16】设当前P1口输出35H,使其高4位输出0,低4位不变。解;ANLP1,#0FH此做法称为“屏蔽”位。注意:跟“0”相与可将该位清0跟“1”相与该位保持不变第56页/共141页582.逻辑或指令ORLA,#data;A(A)data,以下类同ORLA,RnORLA,directORLA,RiORLdirect,#dataORLdirect,A注意:跟“1”相或可将该位置1跟“0”相或该位保持不变【例4-17】将A中的低3位送入片内RAM30H单元低3位,并且保持30H单元的高5位不变。解;ANLA,#07HANL30H,#0F8HORL30H,A这称为“数位组合”。第57页/共141页593.逻辑异或指令XRLA,#data;A(A)data,以下类同XRLA,RnXRLA,directXRLA,RiXRLdirect,#dataXRLdirect,A注意:跟“1”异或可取反跟“0”异或保持不变【例4-18】设(A)=0B5H=10110101B,执行下列操作:XRLA,#0FH;则A的低4位取反,高4位保持不变,(A)=10111010B这称为“指定位求反”。第58页/共141页604.A寄存器的清零和求反指令清零指令:CLRA;A0求反指令:CPLA;【例4-18】双字节数求补码。一个16位正数X存于R3(高8位)R2(低8位)中,求X的补码,并将结果仍存于R3、R2。参考程序如下:MOVA,R2CPLAADDA,01HMOVR2,AMOVA,R3CPLAADDCA,00HMOVR3,A第59页/共141页615.移位指令循环左移:RLA循环右移:RRA带进位位的循环左移:RLCA带进位位的循环右移:RRCAA.0A.7A.0A.7A.0A.7CYA.0A.7CY循环移位只能对A寄存器进行,每次只能移动一位对于某些数左移一位相当于乘以2,右移一位相当于除以2。第60页/共141页62控制转移类指令控制转移类指令控制转移类指令控制转移类指令作用:改变程序计数器PC的值,从而改变程序执行方向。分为四大类:无条件转移指令;条件转移指令;子程序调用指令;返回指令。1、无条件转移指令LJMPaddr16AJMPaddr11SJMPrelJMPA+DPTR第61页/共141页63长转移指令长转移指令LJMPaddr16;转移目的地址PCaddr16,0000 HFFFFH,64KB 长转移指令:长转移指令:LJMPAAAAHLJMPAAAAH;AAAAHAAAAHPCPCPC=0000HPC=0000HPC=AAAAHPC=AAAAH0000H0000H0001H0001HAAA9HAAA9HAAAAHAAAAH0002H0002H假设执行该指令前,PC的值为0000H。注意注意:该指令可以转移到该指令可以转移到64 KB64 KB程序存储器中的任意位置。程序存储器中的任意位置。第62页/共141页64绝对转移指令绝对转移指令PC高5位(保持不变)PC低11位A10A9A800001A7A6A5A4A3A2A1A0操作码(第一字节)操作数(第二字节)程序计数器PCAJMPAJMPaddr11addr11;PC+2PC+2PCPC,addr11addr11PC.10PC.0PC.10PC.0转移目的地址与(PC)+2在同一个2KB范围内。第63页/共141页65【例4-20】分析AJMP指令地址为2300H,或AJMP指令地址为2FFFH两种情况下,执行指令:AJMP0FFH后,程序转移的目标位置?(1)若AJMP指令的地址为2300H:当执行该指令时,PC=2302H,完成该指令后,PC1511=00100B保持不变,PC10000011111111B即转移目的地址为PC=20FFH。(2)若AJMP指令的地址PC=2FFFH:执行该指令时PC=3001H,指令执行后PC1511=00110B保持不变,PC10000011111111B,转移目的地址PC=30FFH。可见,虽然addr11相同,指令机器码相同,但转移的目的地址却可能不同。第64页/共141页66相对短转移指令相对短转移指令SJMPrel;PC(PC)+2+rel实际使用中常写成SJMPaddr16,汇编时会自动转换成rel。该指令的转移范围是:相对PC当前值向上127字节,向下128字节。注意:在单片机程序设计中,通常用到一条SJMP指令:SJMP$;功能:原地踏步,动态停机。调试程序时通常用它,使程序不再向后执行。第65页/共141页67【例4-21】计算转移指令的目标地址。1)835AH:SJMP35H2)835AH:SJMP0E7H解:1)rel=35H=00110101B为正数,因此程序向上转移。目标地址=当前PC+rel=(835AH+02H)+35H=8391H2)rel=0E7H=11100111B 为负数,因此程序向下转移。目标地址=835AH+02H+0FFE7H=8343H相对长转移指令相对长转移指令JMPA+DPTR;间接转移间接转移,散转移指令。转移目的地址=(A)+(DPTR)本指令不影响标志位,不改变A寄存器及DPTR中的内容。常用于多分支程序结构中,可在程序运行过程中动态地决定程序分支走向。在64KB范围内无条件转移第66页/共141页68【例4-22】R1中存有从00H0FH中的某一个数,编写程序,根据R1中的数值,转移至不同处理程序入口。参考程序如下:MOVA,R1RLAADDA,R1MOVDPTR,#TABLEJMPA+DPTRTABLE:LJMPTAB0LJMPTAB1LJMPTAB2TAB0:TAB1:TAB2:LJMP是三字节指令,跳转前A寄存器中内容需是3的倍数。第67页/共141页69比较LJMP、AJMP、SJMP、JMP转移的起点和范围:LJMPLJMPPC64KAJMPAJMPPC+2SJMPSJMPPC+2127-128JMPJMPA+DPTRPCA+DPTR2K64K第68页/共141页70实现按照一定条件决定转移的方向,分三类:A寄存器判零条件转移 比较条件转移 减1不为零转移JZrel:若(A)=0,则转移,否则顺序执行。JNZrel:若(A)0,则转移,否则顺序执行。转移目的地址=(PC)+2+rel不影响任何标志位。A寄存器判零条件转移指令 2、条件转移指令指令的实际编写形式:“JZ/JNZ目标地址标号”。第69页/共141页71【例4-23】编写程序,将从片外RAM地址2000H单元开始的数据连续传送到片内地址从30H单元开始的RAM中,直到出现0为止。参考程序如下:ORLAUXR,#00000010BMOVDPTR,#2000HMOVR0,#30HLOOP:MOVXA,DPTRMOVR0,AINCR0INCDPTRJNZLOOPD7D6D5D4D3D2D1D0T0 x12T1x12 UART_M0 x6BRTR S2SMODBRTx12EXTRAM S1BRSEXTRAM=1时,访问片外扩展RAM第70页/共141页72 比较转移指令功能:比较两个字节中的值,若不等,则转移。CJNEA,#data,relCJNERn,#data,relCJNERi,#data,relCJNEA,direct,rel用第一操作数内容减去第二操作数内容,但差值不回存。转移目的地址=(PC)+3+rel若前者小于后者,则(CY)=1,否则(CY)=0。第71页/共141页73【例4-24】设P1口的P1.1和P1.2两引脚作为单片机与外部设备通信联络信号输入端,当P1.1为高且P1.2为低时,单片机执行与外设的通信任务,否则等待。参考程序如下:WAIT:MOVA,P1ANLA,#06HCJNEA,#02H,WAIT第72页/共141页74该类指令可产生三分支程序:即,相等分支;大于分支;小于分支。A=B吗?出口YNAB吗?入口YN123第73页/共141页75 减1不为零转移指令功能:本指令为双功能指令,即减1操作和判断转移操作。第一操作数内容减1后,若差值不为零,则转移;否则顺序执行。DJNZdirect,rel;direct(direct)1,若 (direct)0,则PC(PC)+3+rel,否则顺序执行DJNZRn,rel;Rn(Rn)1,若(Rn)0,则PC(PC)+2+rel,否则顺序执行指令的实际编写形式:“DJNZRn/direct,目标地址标号”。第74页/共141页76【例4-25】统计片内扩展RAM中从地址为0700H单元开始的20个字节数据中0的个数,并存于R7中。参考程序如下:ANLAUXR,#0FDHMOVDPTR,#0700HMOVR2,#20MOVR7,#0LOOP:MOVXA,DPTRCJNEA,#0,NEXTINCR7NEXT:INCDPTRDJNZR2,LOOP第75页/共141页77子程序调用指令和普通转移指令相似,但二者有本质区别:执行普通转移指令跳转后不再返回,而执行子程序调用指令跳转执行子程序后,再返回主程序继续执行。3、子程序调用及返回指令执行该类指令不影响任何标志位。为了实现返回:执行子程序调用指令时,硬件电路自动将PC中的断点地址压入堆栈保存,然后再转向子程序入口地址,执行子程序。在子程序的最后安排一条返回指令(RET),将断点地址从堆栈中弹出到PC,即返回主程序继续执行。第76页/共141页78LCALLaddr16;3 3字节字节指令 长调用指令 ;转移范围64KB,执行中自动完成如下过程:(PC)(PC)+3SP(SP)+1(SP)(PC70),保护断点地址低字节;SP(SP)+1(SP)(PC158),保存断点地址高字节;PCaddr16,目的地址送PC,转子程序。第77页/共141页79转移范围与(PC)+2在同一个2KB内。执行中机器自动完成下列过程:(PC)(PC)+2SP(SP)+1(SP)(PC70)SP(SP)+1(SP)(PC158)PC100 addr100 绝对调用指令 ACALLaddr11;2 2字节字节指令在大程序中推荐使用LCALL指令。第78页/共141页80RET执行过程:PC158(SP)SP(SP)1PC70(SP)SP(SP)1 子程序返回指令 【例4-26】利用DJNZ指令设计STC12C5A60S2 系列单片机的循环延时子程序,已知时钟频率fosc=12MHz。分析:因为fosc=12MHz,故该单片机的机器周期T为1/12s。第79页/共141页811)采用单循环方式延时10s调用该子程序的指令ACALLDELAY_10s或LCALLDELAY_10s需要6T时间。t=6+(2+427+4)/12=10s参考子程序如下:DELAY_10s:MOVR7,#27;2TDJNZR7,;4TRET;4T第80页/共141页822)采用双重循环方式延时1ms分析:12(2504)/12=1000s=1ms开始R7#12R6#250R610?R710?返回YYNN程序流程图:第81页/共141页83参考子程序如下:DELAY_1ms:MOVR7,#12;2TDL:MOVR6,#250;2TDJNZR6,;4TDJNZR7,DL;4TRET;4Tt=6+2+(2+4250+4)12+4/12=1007s1ms第82页/共141页843)采用三重循环方式延时1s分析:100120(2504)/12=1000000s=1s程序流程图:开始R7#100R6#120R5#250R510?R610?R710?返回YYYNNN第83页/共141页85参考子程序如下:DELAY_1s:MOVR7,#100;2TDL2:MOVR6,#120;2TDL1:MOVR5,#250;2TDJNZR5,;4TDJNZR6,DL1;4TDJNZR7,DL2;4TRET;4Tt=6+2+2+(2+4250+4)120+4100+4/12=1006051s1s第84页/共141页86【例4-27】设计一款节日灯,通过单片机的P1.0P1.7控制8路由发光二极管组成的灯,输出高电平点亮。先亮1灯(P1.0控制),每隔2秒闪烁1次,共闪烁10次,然后2灯闪10次,如此循环。A#01HR2#10P1AR210?YN延时1秒P1#00H延时1秒A循环左移一位初始化开始程序流程图:分析:P1.0引脚输出高电平时1灯亮,输出低电平时1灯灭,一亮一灭即为闪烁一次。亮的时间和灭的时间各持续1秒,共闪烁10次。其它灯同样控制。第85页/共141页87参考子程序如下:ORG0MOVSP,#4FHMOVA,#01HLOOP1:MOVR2,#10LOOP2:MOVP1,ALCALLDELAY_1sMOVP1,#00HLCALLDELAY_1sDJNZR2,LOOP2RLALJMPLOOP1DELAY_1s:;1秒延时子程序(略)RETEND第86页/共141页88RETI执行过程:PC158(SP)SP(SP)1PC70(SP)SP(SP)1 中断返回指令 ;中断服务子程序的最后一条指令。功能:返回主程序中断的断点位置,继续执行断点位置后面的指令。RETI指令的执行过程与RET基本相同,只是RETI在执行时,

    注意事项

    本文(内核单片机汇编语言程序设计.pptx)为本站会员(莉***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

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




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

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

    收起
    展开