MCS-51系列单片机的指令系统及汇编语言程序设计

PPT
  • 阅读 89 次
  • 下载 0 次
  • 页数 48 页
  • 大小 806.023 KB
  • 2022-11-12 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档25.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
MCS-51系列单片机的指令系统及汇编语言程序设计
可在后台配置第一页与第二页中间广告代码
MCS-51系列单片机的指令系统及汇编语言程序设计
可在后台配置第二页与第三页中间广告代码
MCS-51系列单片机的指令系统及汇编语言程序设计
可在后台配置第三页与第四页中间广告代码
MCS-51系列单片机的指令系统及汇编语言程序设计
MCS-51系列单片机的指令系统及汇编语言程序设计
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 48
  • 收藏
  • 违规举报
  • © 版权认领
下载文档25.00 元 加入VIP免费下载
文本内容

【文档说明】MCS-51系列单片机的指令系统及汇编语言程序设计.ppt,共(48)页,806.023 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-2344.html

以下为本文档部分文字说明:

主要内容➢寻址方式➢指令系统✓传送与交换指令✓算术运算、逻辑运算指令✓控制转移指令✓位操作指令➢伪指令➢程序设计举例第3章MCS-51系列单片机的指令系统及汇编语言程序设计docin/sundae_meng计算机

通过执行程序完成人们指定的任务,程序由一条一条指令构成,能为CPU识别并执行的指令的集合就是该CPU的指令系统。MCS-51单片机汇编语言指令格式:操作符目的操作数,源操作数操作符指明该指令完成什么操作;操作数是指明该指令的操作对象。目的操作数是存放结果的。指令中操作数提供的方式称为寻址方

式。docin/sundae_meng指令中的常用符号Rn:表示当前工作寄存器R0~R7中的一个。Ri:代表R0和R1寄存器中的一个,用作间接寻址寄存器。dir:8位直接字节地址(片内RAM和SFR)#data:8位立即数,即8位常数。可以为2进制(B)、1

0进制、16进制(H)、字符(‘’)#data16:表示16位立即数,即16位常数,取值范围为:#0000H~#0FFFFHaddr16:表示16位地址addr11:表示11位地址rel:相对偏移量(为一字节

补码)用于相对转移指令中bit:位地址,在位地址空间中。$:表示当前指令的地址。docin/sundae_meng指令中直接给出操作数的寻址方式。在51系列单片机的指令系统中,立即数用一个前面加“#”号的8位数(#data,如#30H)或16位数(#data16,如#2052H)表

示。立即寻址中的数,称为立即数。例如指令:MOVA,#58H;58H→A3.1寻址方式3.1.1立即寻址docin/sundae_meng操作数的地址直接出现在指令中。寻址对象:①内部数据存贮器:使用它的地址。②特殊功能寄

存器:既可使用它的地址,也可以直接使用寄存器名。③位地址空间④程序存储器空间例:MOVA,40H;(40H)→AMOV40H,41H;(41H)→(40H)MOVP0,#45H;45H→P0MOV80H,#45H;45H→P

0MOVC,18H;位地址18H→C3.1.2直接寻址docin/sundae_meng操作数存放在寄存器中。寻址对象:A,B,C,DPTR,R0~R7。B仅在乘除法指令中为寄存器寻址,在其他指令中为直接寻址。A可以寄存器寻址

又可以直接寻址,直接寻址时写作ACC例如:MOVA,R0;R0→AMULAB;A*B→BAADDA,ACC;A+A→A3.1.3寄存器寻址docin/sundae_meng操作数存放在以寄存器内容为地址的单元中,用做间址的寄存器为Ri(i=0,

1)、DPTR。①对片内的间接寻址用Ri(i=0,1)如:MOVR0,#20HMOVR0,A;A→(20H)②对片外的间接寻址可用Ri(i=0,1)或DPTR如:MOVXDPTR,A;A→以DPTR的内容为地址的外部RAM中MOVXR1,A;A→以P

2R1内容为地址的外部RAM中③PUSH和POP指令的源操作数是以SP间接寻址注意:寄存器间接寻址不能访问SFRMOVR1,#81HMOVA,R1;不能访问SP,只能用MOVA,SP3.1.4寄存器间址docin/sundae

_meng变址寻址只能访问程序存储器。操作数所在位置的地址由DPTR或PC寄存器与A的内容相加后形成。其中累加器A内容是可变的。变址寻址只有三条指令。MOVCA,A+DPTR;(A+DPTR)→AMOVCA

,A+PC;(A+PC)→AJMPA+DPTR;A+DPTR→PC注意:①A的内容是无符号数。②PC值是指令的当前PC值,即下条指令的PC值3.1.5变址寻址docin/sundae_meng3.1.6相对寻址变址寻址只能访问程序存储器。相对寻

址是将程序计数器PC的当前值与指令第二字节给出的偏移量相加,从而形成转移的目标地址。如:JZ61H注意:①相对偏移量是一字节有符号数,用补码表示,偏移范围是:-128~+127。②PC值是指令的当前PC值,即下条指令的PC值。③源程序中偏移量常用符号地址表示

。docin/sundae_meng对可位寻址的位地址寻址。包括片内RAM的位地址空间和可位寻址的SFR(地址能被8整除)如:MOVC,20H;位寻址MOVA,20H;字节寻址以上两条指令究竟是位寻址还是字节寻址,根据两操作数类型一致的原则,由另一个操作数决定。3.1.7位寻址docin/

sundae_meng立即寻址直接寻址寄存器寻址寄存器间接寻址变址寻址相对寻址位寻址片内RAM低128B单元√√工作寄存器组R0~R7√√√特殊功能寄存器SFRA、B、DPTR、C√√√程序存储器√√√√片外RAM√位地址空间√√寻址方式与存储空间的对应关系docin/

sundae_mengdirRiRn#dataAMOVA,Rn#datadirRiMOVdir,ARn,Ri#datadirMOVRi,Adir#data1.内部RAM、SFR之间的传送MOV指令MOVRn,Adir#data3.2指令系统3.2.1数据传送与交换指令docin/

sundae_meng➢例R1=20H,(20H)=55H,MOVA,R1执行后,A=55H。➢例(40H)=30H,MOVR7,40H执行后,R7=30H。➢例MOVR7,#40H执行后,R7=40H。注意:➢寄存器之间无传送;➢寄存器间

址和寄存器之间无传送;➢立即数不能做目标地址;docin/sundae_mengRi,ADPTR,AA,RiA,DPTRMOVXMOVCA,A+PCA,A+DPTR2.外部存储器和A累加器之间的传送MOVXA外

部数据存储器程序存储器MOVCdocin/sundae_meng利用MOVX实现片外数据存储器数据传送(2000H)→(2100H)MOVDPTR,#2000HMOVXA,DPTRMOVDPTR,#2100HMOV

XDPTR,A片外RAM地址内容2000HX…DPTR→2100H;DPTR=2000H;DPTR=2100H;A←X片外RAM地址内容2000HX…DPTR→2100H;(2100H)←Xx片外数据存储器不能直接寻址。下列为非法指令:MOVXA,2000H×MOVX2100H

,2000H×docin/sundae_meng利用Ri间址来实现将(2000H)→(2100H)MOVP2,#20H;高位地址MOVR0,#00;低位地址MOVXA,R0;读片外RAMMOVP2,#21H;改变高位地址MOVXR0,A;写片外RAMdocin/sundae

_meng利用MOVC指令实现查表功能注:①只能从程序存储器读取数据到A累加器。②只能使用变址间接寻址方式1)DPTR为基址寄存器MOVCA,A+DPTR;A←(A+DPTR)查表范围为64KB程序存储器任意空间。2)PC为基址寄存

器MOVCA,A+PC;A←(A+PC)常数表只能在查表指令后256B范围内。docin/sundae_meng例查表法求Y=X2。设X(0≤X≤15)在片内RAM20H单元,要求将查表求Y,存入片内RAM21H单元1)用DPTR作基址寄存器ORG0100HSQU:MOVDPT

R,#TAB;确定表首地址MOVA,20H;取XMOVCA,A+DPTR;查表求Y=X2MOV21H,A;保存YRET;子程序结束…;其它程序段ORG0200H;常数表格首地址TAB:DB00,01,04,09,…,225;平方表doc

in/sundae_meng指令地址源程序ORG0100H;程序起始地址0100HSQU:MOVA,20H;取X0102HADDA,#3;修正偏移量0104HMOVCA,A+PC;查表求Y=X20105HMOV21H,A;存结果010

7HRET;子程序结束0108HTAB:DB00,01,04;平方表010BHDB09,…,225思考题:当0≤X≤255时,如何用查表法编程求Y=X22)用PC作基址寄存器docin/sundae_meng3.交换指令实现片内RAM区的数据双向传送1)字节交换指令XCHA,Rn;A←→

RnXCHA,Ri;A←→(Ri)XCHA,dir;A←→(dir)2)半字节交换指令XCHDA,Ri;A0~3←→(Ri)0~3SWAPA;A4~7←→A0~3dirRiRnA4.堆栈操作指令入栈指令:PUSHdir;SP←SP+1,(SP)←(dir)出

栈指令:POPdir;(dir)←(SP),SP←SP-1RiA7~47~43~03~0A7~43~0docin/sundae_mengdirRiRn#dataAdirRiRn#dataAA,Rn,Ri#datadirADDADDCSUBBANLORLXRL加进位加借位

减与或异或1.以A为目的操作数的算术、逻辑运算指令(24条)3.2.2算术运算和逻辑运算指令docin/sundae_meng2.以dir为目的操作数逻辑运算指令(6条)A#datadir与ANL或ORL异或XRLdir,#dat

aA3.加1、减1指令RiAdirRnDPTRINCRiAdirRnDECdocin/sundae_meng4.十进制调整指令DAA;仅对存于A中的加法结果进行十进制调整若需完成十进制减法运算,则应变减法运算为补码的加法运算即可,其减数X的补码通过(99-X)+1

再DAA后得到。原则:和低4位大于9或有半进位,则低4位加6和高4位大于9或有进位,则高4位加6例:(DATA)-(DATA+1)=>(DATA+2)Y-X=Y-X+100-->有效位为2位十进制,模为100=Y+(9

9-X)+1docin/sundae_meng5.乘、除法指令MULAB;A×B→BADIVAB;A÷B→商在A中,余数在B中6.专对A的指令CPLACLRA;0→A;A→AMOVA,#99HDAACLR

CADDA,DATASUBBA,DATA+1DAAADDA,#1MOVDATA+2,Adocin/sundae_mengCYRRARLARLCARRCA移位指令(仅对A)00101101A01001011ACY11001011A000101101A1CY10010110A设

1CYCYdocin/sundae_meng1.调用程序和返回类指令1)长调用LCALLaddr16;addr16→PC0~15指令功能同80X86中的CALL,调用范围64KB全部空间,指令的机器码为三字节。2)短调用ACALLaddr11;addr11→P

C0~10指令的功能同前,主要区别为:addr11→PC0~10,而PC11~15保持原值不变,故其调用范围为2KB,即子程序入口距当前PC不得超过2KB地址范围。本指令的机器码为二字节。3.2.3控制转移类指令docin/sundae_meng3)子程序返回

指令(从栈顶弹出断点到PC)RET;从调用子程序返回。RETI;从中断服务程序返回并恢复中断优先级状态触发器。2.转移指令1)无条件转移指令(1)短转移AJMPaddr11;addr11→PC0~10转移范围:2KB机器码为2字节docin/sundae_

meng(2)长转移LJMPaddr16;addr16→PC0~15转移范围:64KB机器码为3字节。(3)间接转移JMPA+DPTR;A+DPTR→PC分析下列程序段,说出当A分别为0和2时,程序转置何处?该程序段的功能是什么?

MOVDPTR,#TABLEJMPA+DPTRTABLE:AJMPPROC0AJMPPROC1AJMPPROC2AJMPPROC3docin/sundae_meng(4)无条件相对转移SJMPrel;PC+rel→PC,即As+2+rel

→PC,机器码为2字节As为源地址(本指令的首地址),执行本指令时当前PC=As+2,rel为转移的偏移量,转移可以向前转(目的地址小于源地址),也可以向后转(目的地址大于源地址),因此偏移量rel是

1字节有符号数,用补码表示(-128~+127),所以指令转移范围在离源地址As的-126~+129字节之间。docin/sundae_meng2)条件转移指令(1)累加器为零(非零)转移JZ/JNZrel;A=0/(A≠0)则转移,否则顺序执行程序(2)减1不

等于零转移DJNZRn/dir,rel功能为:Rn(dir)-1→Rn(dir)相减结果≠0转,否则顺序执行程序docin/sundae_meng(3)比较转移指令CJNEA,dir,relCJNEA,#data,relCJNERn,#data,relCJNERi,#da

ta,rel操作数1不等于操作数2则转,否则顺序执行。1例:Y=-1X≥ZX<ZZXYDATA+2DATA+1DATAMOVDATA+2,#0FFHMOVA,DATACJNEA,DATA+1,NEXTNEXT:JCNEXT1MOVDATA+2,#1NEXT1

:RETdirRiRn#dataAdocin/sundae_meng1.位传送指令MOVC,bit;(bit)→CYMOVbit,C;CY→bit2.位状态控制指令CLRC;0→CYCLRbit;0→bitSETBC;1→CYSETBbit;1

→bitCPLC;CY→CYCPLbit;bit→bit3.2.4位操作指令docin/sundae_meng3.位逻辑运算指令ANLC,bit;CY∧(bit)→CYANLC,/bit;CY∧(bit)→C

YORLC,bit;CY∨(bit)→CYORLC,/bit;CY∨(bit)→CYdocin/sundae_meng4.位转移位转移根据位的值决定转移,均为相对转移指令。JCrel;CY=1,则转移,否则顺序执行程序JNCrel;CY=0

,则转移,否则顺序执行程序JBbit,rel;(bit)=1,则转移,否则顺序执行程序JNBbit,rel;(bit)=0,则转移,否则顺序执行程序JBCbit,rel;(bit)=1,则转移,且该位清零,否则顺序执行程序docin/sundae_meng1.定义:汇编

控制指令,没有指令代码,不能被CPU执行,只用于汇编过程,为汇编程序提供汇编信息。2.常用伪指令(1)ORGORG是设置起始地址伪指令,其格式是:ORG16位地址或标号(2)ENDEND是结束汇编伪指令,其格式是:E

ND(3)DBDB是定义字节伪指令,其格式是:[标号:]DB字节型数表(4)DWDW是定义字伪指令,其格式是:[标号:]DW字型数表3.3伪指令docin/sundae_meng(5)DSDS是定义存储空间伪指令,其格式是:[标号:

]DS表达式(6)EQUEQU是赋值伪指令,其格式是:字符名称EQU数据或汇编符号(7)DATADATA是数据地址赋值伪指令,其格式是:字符名称DATA表达式(8)BITBIT是位地址赋值伪指令,其格式是:字符名称BIT位地址详见表3.3MCS-

51中的伪指令docin/sundae_meng进制间的转换1.十进制→二进制(整数)任何十进制数D有:D=dn-1×10n-1+dn-2×10n-2+…+d1×101+d0×100=(…(dn-1×10+

dn-2)×10+…+d1)×10+d0规律:di×10+di-1(i=1,2,…n-1)按二进制运算规则运算则得二进制数3.4程序设计举例docin/sundae_meng例:将4位十进制数D3D2D1D0转换成二进制数,设4位十进制数D3D2D1

D0按分离BCD码形式存放,要求结果的高位存放在R3中,结果的低位存放在R2中。方法:D3D2D1D0=(((0×10+D3)×10+D2)×10+D1)×10+D0结果:16位二进制数0D30D20D10D

0DATAdocin/sundae_meng流程:设置指针指向DATA计数器初始(R7=3)Di初始→结果单元结果单元内容×10+Di-1→结果单元修改指针计数器-1→计数器↓↓↓↓↓↓计数器=0?↓返回YNdocin/sundae_meng×R3R2R2

×0AHR3×0AH0A000R3R2MOVA,R2MOVB,#0AHMULABMOVR2,AMOVA,BXCHA,R3MOVB,#0AHMULABADDA,R3MOVR3,ARETMUL10:结果单元乘10子程序由于4位10进制(9999)小于16位2进制(65535),所以转

换结果不会大于16位docin/sundae_mengMOVR0,#DATAMOVR7,#03HMOVA,R0MOVR2,AMOVR3,#0ACALLMUL10INCR0MOVA,R0ADDA,R2MOVR2,AMOVA,R3ADDCA,#0MOVR3,ADJNZR

7,BCDB1RETBCDB:BCDB1:0D30D20D10D0DATAdocin/sundae_meng2.十进制→二进制(小数)10进制乘2取整(取溢出)例:0.625=2-1+2-3=0.10100000Ba

.小数点位数由乘2次数定,结果单元字节数也由此定b.第一次的整数权最高=2-1c.乘2是10进制的乘2,自身相加再DAA调整D=b-1×2-1+b-2×2-2+…+b-m×2-mdocin/sundae_meng例:设入

口时10进制数在A中,要求结果放在R2中(8位二进制小数)结果单元清0次数计数器初始十进制小数单元乘2整数移入结果单元计数器-1→计数器↓↓↓↓↓计数器=0?↓返回YNBCDBP:MOVR2,#0MOVR6,#8BCDBP1:ADDA,ACCDAAXCHA,R2RLCAXCHA,R2DJ

NZR6,BCDBP1;结果单元清0;次数初始;10×2;将整数移入结果单元溢出在进位位中docin/sundae_meng3.二进制→十进制(整数)按权展开以8位为例:b7b6b5b4b3b2b1b0=

b7×27+b6×26+…+b0×20=(…((0×2+b7)×2+b6)×2+…)×2+b0将二进制数逐步左移得:b7,b6,b5,b4,b3,b2,b1,b0结果单元字节数:二进制1字节(≤255

)十进制2字节二进制2字节(≤65535)十进制3字节注:这里的乘2为10进制乘2按十进制运算规则运算则得十进制数docin/sundae_meng结果单元清零次数计数器初始清Cy二进制数左移一位到Cy结果单元×2+Cy↓↓↓↓↓计数器=0?↓返回YN计数器-1↓例:被转换数在R

3中,结果在R4R5中IBTD:CLRAMOVR4,AMOVR5,AMOVR7,#8IBTL2:CLRCMOVA,R3RLCAMOVR3,AMOVA,R5ADDCA,R5DAAMOVR5,AMOVA,R4ADDCA,R4DAAMOVR4,ADJ

NZR7,IBTL2RETdocin/sundae_meng4.二进制→十进制(小数)二进制乘10取整(取溢出)0.75D→0.11000000B×1010B111.10000000B×1010B101.00000000B例:8位

二进制小数→4位十进制小数结果位数可自定例:设8位二进制小数在A中,结果放在以DATA为首地址的4个单元中,存放格式如下,试编程实现.0D-10D-20D-30D-4DATAB=d-1×10-1+d-2×10-2+…+d-m×10-mdocin/sundae_meng指针R1指向结果

最高字节DATA位计数器初始二进制小数乘10取溢出存入结果单元修改结果指针↓↓↓↓↓已经4位?↓返回YNBBCDP:MOVR1,#DATAMOVR7,#4BBCDP1:MOVB,#0AHMULABMOVR1,Bdocin/sundae_meng(1)51系列单

片机指令系统的特点是不同的存储空间寻址方式不同,适用的指令不同,必须进行区分。(2)指令是程序设计的基础,应重点掌握传送指令、算术运算指令、逻辑运算指令、控制转移指令和位操作指令,掌握指令的功能,操作的对象和结果,对标志位的影响,应要求熟记。小结docin/sundae_meng

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?