您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 述职报告 > 3第3章 MCS-51单片机指令系统及汇编语言程序设计
第3章MCS-51单片机指令系统及汇编语言程序设计§3-1汇编语言与指令系统简介§3-2数据传送类指令§3-3算术运算类指令§3-4逻辑运算类指令§3-5控制转移类指令§3-6位操作类指令§3-7汇编语言程序设计高级语言:§3-1汇编语言与指令系统简介一、汇编语言的定义完成某项特定任务的指令的集合。计算机按程序一条一条地依次执行指令,从而完成指定任务。要让计算机完成各项任务,就应设计各种程序。汇编语言:机器语言:程序设计语言:用二进制代码表示指令和数据。用助记符表示指令操作功能,用标号表示操作对象。独立于机器,面向过程,接近自然语言和数学表达式。什么是程序?MCS-51指令格式:汇编语言程序的每一条语句都与计算机的某一条机器指令对应,并且与CPU系统的硬件密切相关。——表示参加操作的数的本身或操作数所在的地址。指令=操作码+操作数操作码——表示了该指令所能执行的操作功能。操作数LOOP:MOVA,R0;将R0的内容送A[标号]操作码第一操作数第二操作数[注释](目的操作数)(源操作数)注:红色的内容不是必须的ORG1000HSTART:MOVR0,2FHMOVR2,#00HMOVA,@R0MOVR3,AINCR3地址指令码1000HA82F1002H7A001004HE61005HFB1006H0B汇编程序与机器程序◆汇编程序由若干指令助记符组成◆指令助记符→机器码源程序(汇编指令程序)目标程序(机器码指令程序)源程序汇编(手工汇编)(机器汇编)汇编语言格式:地址机器码源程序注释ORG0000H;整个程序起始地址0000200030LJMPMAIN;跳向主程序ORG0030H;主程序起始地址0030C3MAIN:CLRC;MAIN为程序标号0031E6LOOP:MOVA,@R0003237ADDCA,@R1003308INCR00034DAFBDJNZR1,LOOP;相对转移00368003SJMPNEXT00387803MOVR0,#03H003A18NEXT:DECR0003B80FESJMP$;HERE:SJMPHEREEND;结束标记数据传送类(29条)算术运算类(24条)逻辑运算类(24条)控制转移类(17条)位操作类(17条)二、MCS-51系列单片机的指令系统1、MCS-51指令系统的分类111条,255种代码;与Intel处理器系统指令助记符基本一致;单字节指令49条,双字节指令46条,三字节指令16条;单周期指令64条,双周期指令45条,四周期指令2条;具有一个独特的布尔变量处理指令集。五大类基本情况Rn——工作寄存器R0~R7Ri——间接寻址寄存器R0、R1Direct——直接地址,包括内部128BRAM单元地址、26个SFR地址。#data——8位常数#data16——16位常数addr16——16位目的地址addr11——11位目的地址rel——8位带符号的偏移地址DPTR——16位外部数据指针寄存器bit——可直接位寻址的位2、指令中操作数的助记符号A——累加器B——寄存器BC——进、借位标志位,或位累加器@——间接寄存器或基址寄存器的前缀/——指定位求反(x)——x中的内容((x))——x中的地址中的内容$——当前指令存放的地址——箭头左边内容被右边内容替代。三、寻址方式寻址方式——寻找操作数存放单元的地址的方式,共7种1、立即数寻址指令的操作数为8位或16位数据,称为立即数。这种寻址方式就叫立即寻址。在MCS—5l单片机的指令系统中,用符号“#”表示立即数,以区别直接地址。例:MOVA,#30H;(A)←30H指令码74H,立即数#30H送到累加器A的过程①②③3、直接寻址直接访问内部存储单元的地址:RAM单元、SFR单元的直接地址例如:MOVA,30H;(30H)→(A)MOV80H,A;(80H)←(A)操作数为R0~R7、B、A、DPTR、C、SP、AB等例如:MOVA,R2MOVA,DPHINCR6MULAB2、寄存器寻址这些可寄存器寻址的单元,其具体的寄存器已隐含在其操作码中,而不需要再用操作数指定MOV30H,#11H;(30H)←11HMOVR0,#30H;(R0)←30HMOVA,@R0;(A)←((R0))4、寄存器间接寻址指令中寄存器的内容作为操作数存放的地址,在工作上间接寻址寄存器前用“@”表示前缀执行过程①②③操作数地址=变地址+基地址基地址寄存器DPTR或PC变址寄存器@A5、变址寻址该寻址方式常用于访问程序存储器,查表。例如MOVXA,@A+DPTRMOVCA,@A+DPTR设(A)=0FH,(DPTR)=2400H则执行MOVXA,@A+DPTR过程如下①②②③④把指令中给定的地址偏移量与本指令所在单元地址(PC内容)相加得到真正有效的操作数所存放的地址6、相对寻址(PC)+2+rel→(PC)例如,设(PC)=2000H,rel=23H;则当C=1时,(PC)=2000H+2+23H=2025HJC23H执行过程①②③④7.位寻址对RAM、FSR中的位单元的寻址称为位寻址例如:SETB20H.1CLR01HMOVC,01H位寻址空间:◆片内RAM的20H~2FH字节单元的每一位位地址为00H~7FH;◆SFR中12个字节单元(字节地址能被8整除的单元)位地址为80H~FFH;思考题1、汇编语言有何种特点?指令格式?2、MCS—51单片机共有多少条指令?分几类?3、MCS—51系列汇编语言指令有哪几种寻址方式?§3-2数据传送类指令数据传送类29条:◆22条数据复制指令◆5条数据交换指令◆2条栈操作指令程序存储器EPROMSFR片内RAM128B片外数据存储器RAMMOVCMOVXMOVPUSHPOPXCHXCHD1、数据复制指令实现ROM、RAM、SFR、外部RAM之间的数据复制MOVA,#dataMOVRn,#dataMOVdirect,#dataMOV@Ri,#dataMOVDPTR,#data16(1)立即数#data传送指令MOVA,RnMOVRn,AMOVdirect,RnMOVRn,directMOVRn,#data(2)寄存器Rn传送指令MOVdirect,AMOVA,directMOVdirect,#dataMOVdirect,RnMOVRn,direct(3)直接内存单元direct传送指令MOVdirect,@RiMOV@Ri,directMOVdirect1,direct2MOVXA,@RiMOVX@Ri,AMOVXA,@DPTRMOVX@DPTR,A(4)外部RAM传送指令MOVCA,@A+DPTRMOVCA,@A+PC(5)程序存储器ROM单元变址寻址指令例:3-2-13-2-23-2-32、数据交换指令XCHA,Rn;寄存器Rn内容AXCHA,@Ri;寄存器Ri指定内存单元的内容AXCHA,direct;直接寻址的单元内容AXCHDA,@Ri;寄存器Ri指定内存单元内容低4位A的低4位SWAPA;A的高4位A的低4位PUSHdirect;(SP)+1→SP,(direct)→((SP))SP指针加1,直接寻址单元的内容栈顶POPdirect;((SP))→(direct),(SP)-1→SP栈顶内容直接寻址的单元,SP指针减13、栈操作指令注意:1)PUSH与POP操作过程刚好相反;2)进、出栈规则:先进后出,后进先出。应注意指令书写先后顺序;3)可用于“保护现场,恢复现场”。例2-2-5:设(SP)=09H,(DPTR)=0123H,分析执行以下指令后,各单元中的内容。PUSHDPLPUSHDPH例2-2-4:设栈顶为压入的PSW,解释以下程序执行后,Ri位于哪个区?MOVR0,SP;取栈顶地址ORL@R0,#18H;修改栈顶为#XXX11XXXBPOPPSW;栈顶内容弹出到PSW,Ri位于3区;(SP)=0AH,(0AH)=23H;(SP)=0BH,(0AH)=23H,(0BH)=01H解:例2-2-6:设初始值为SP=#30H,A=#20H,R0=#45,DPTR=#0450H,以下程序执行过程中的SP、A、R0、DPTR的变化情况如何?PUSHA;SP=#31H,A=#20H,R0=#45,DPTR=#0450HPUSHR0;SP=#32H,A=#20H,R0=#45,DPTR=#0450HPUSHDPH;SP=#33H,A=#20H,R0=#45,DPTR=#0450HPUSHDPL;SP=#34H,A=#20H,R0=#45,DPTR=#0450HMOVA,R0;SP=#34H,A=#45,R0=#45,DPTR=#0450HMOVDPTR,#1000H;SP=#34H,A=#45,R0=#45,DPTR=#1000HPOPDPL;SP=#33H,A=#45,R0=#45,DPTR=#1050HPOPDPH;SP=#32H,A=#45,R0=#45,DPTR=#0450HPOPR0;SP=#31H,A=#45,R0=#45,DPTR=#0450HPOPA;SP=#30H,A=#20H,R0=#45,DPTR=#0450H例2-2-7:试编写一程序段,实现将外RAM0FAH单元中的内容传送到外RAM04FFH单元中。解:MOVDPTR,#04FFHMOVR0,#0FAHMOVXA,@R0MOVX@DPTR,A例2-2-8:设(A)=一个BCD码常数,试用查表法获得其相应的ASCII码。解法II:MOVCA,@A+PCDB30H,31H,32H,33H,34HDB35H,36H,37H,38H,39H······解法I:MOVDPTR,#TABMOVCA,@.A+DPTR······TAB:DB30H,31H,32HDB33H,34H,35HDB36H,37H,38H,39H······注意:以DPTR为基地址的指令,可在ROM的64KB范围内查表;而以PC为基地址的指令只能在(PC)+1为中心上、下256B范围内查表。位置任意紧跟之后指令代码、长度、速度助记符功能指令代码长度Byte速度TCY字节1字节2字节3MOVA,Rn(A)←(Rn)11101rrr11MOVRn,A(Rn)←(A)11111rrr11MOVRn,direct(Rn)←(direct)10101rrrdirect22MOV@Ri,#data((Ri))←#data0111011i#data21MOVA,#data(A)←#data01110100#data21MOVCA,@A+DPTR(A)←((A)+(DPTR))1001001112MOVDPTR,#data16(DPTR)←#data1610010000#data高#data低32参见讲义指令码?指令长度?指令执行时间?作业:3-13-2•什么是汇编语言?•MCS—51单片机指令分类?•MCS—51单片机指令寻址方式有哪些?•数据传送类指令的几种类型?•指令码、长度、速度的概念?小结§3-3算术运算类指令一、加法指令1、不带进位加法指令ADDADDA,Rn;(A)←(A)+(Rn)以下类同。ADDA,directADDA,@RiADDA,#data这4条指令使得累加器A可以和内部RAM的任一单元内容相加,也可以和一个8位立即数#data相加,相加结果存放在A中。如果D7位有进位,则进位C置“1”,否则清“0”。如果D3位有进位,则辅助进位AC置“1”,否则清“0”。如果D6位有进位而D7位没有进位,或者D6位无进位而D7位有进位,则溢出标志OV置“1”,否则清“0”。C=1,表示无符号数加法的和溢出,结果>255;OV=1,表示带符号数加法的和溢出,结果>127或<-128;AC=1,表示十进制数加法产生半进位。包括:加、减、乘、除;加1、减12、带进位的加法指令ADDCADDCA,Rn;(A)←(A)+(Rn)+(C)ADDCA,directADDCA,@RiADDCA,#data上述四条指令多用于多字节数相加。10000101+1010111110011
本文标题:3第3章 MCS-51单片机指令系统及汇编语言程序设计
链接地址:https://www.777doc.com/doc-3368462 .html