您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > MCS-51单片机指令系统及汇编语言程序设计
第三章MCS-51单片机指令系统及汇编语言程序设计内容提要:§3-1汇编语言与指令系统简介§3-2数据传送类指令§3-3算术运算类指令§3-4逻辑运算类指令§3-5控制转移类指令§3-6位操作类指令§3-7汇编语言的汇编过程§3-8汇编语言的程序设计及应用高级语言:§3-1汇编语言与指令系统简介一、汇编语言程序设计的意义什么是程序?完成某项特定任务的指令的集合。计算机按程序一条一条地依次执行指令,从而完成指定任务。要让计算机完成各项任务,就应设计各种程序。汇编语言:机器语言:程序设计语言:用二进制代码表示指令和数据。用助记符表示指令操作功能,用标号表示操作对象。独立于机器,面向过程,接近自然语言和数学表达式.汇编语言程序的每一条语句都与计算机的某一条指令对应,所以必需熟悉指令系统。指令=操作码+操作数操作码——表示了该指令所能执行的操作功能。操作数——表示参加操作的数的本身或操作数所在的地址。MCS-51指令格式:[标号:]操作码助记符[第一操作数][,第二操作数][;注释]二、MCS-51系列单片机的指令系统111条指令,共分五大类:数据传送类;(29条)算术运算类;(24条)逻辑运算类;(24条)控制转移类;(17条)位操作类。(17条)指令中操作数的描述符号:Rn——工作寄存器R0~R7Ri——间接寻址寄存器R0、R1Direct——直接地址,包括内部128BRAM单元地址、26个SFR地址。#data——8位常数#data16——16位常数addr16——16位目的地址addr11——11位目的地址rel——8位带符号的偏移地址DPTR——16位外部数据指针寄存器bit——可直接位寻址的位A——累加器B——寄存器BC——进、借位标志位,或位累加器@——间接寄存器或基址寄存器的前缀/——指定位求反(x)——x中的内容((x))——x中的地址中的内容$——当前指令存放的地址三、寻址方式寻找操作数存放单元的地址的方式,共6种方式。1、立即数寻址所要找的操作数是一二进制数或十进制数,出现在指令中,用“#”作前缀MOVA,#20H2、寄存器寻址操作数存放在工作寄存器R0~R7中,或寄存器B中。MOVA,R23、直接寻址指令中直接给出操作数的地址。MOVA,30HMOV30H,DPH;书放在甲抽屉中;甲抽屉的钥匙放在乙抽屉中;取书,A中20HMOV30H,#20HMOVR0,#30HMOVA,@R0此例中,20H就当成是那本书;30H就当成是甲抽屉;R0就当成是乙抽屉,执行的结果就是将20H这个立即数装入A中。期间也经历了两次寻址,即间接寻址。4、寄存器间接寻址指令中寄存器的内容作为操作数存放的地址,在工作上间接寻址寄存器前用“@”表示前缀。例如:“一本书放在甲抽屉中,上了锁;其开锁的钥匙放在乙抽屉中,乙抽屉也上了锁。问如何才能取到哪本书?”这就是一个间接寻址的问题,要经过两次寻址才能找到哪本书。而寄存器间接寻址也是同样。例如:5、变址寻址操作数地址=变地址+基地址基地址寄存器DPTR或PC变址寄存器@A该寻址方式常用于访问程序存储器,查表。如MOVCA,@A+DPTR6、相对寻址把指令中给定的地址偏移量与本指令所在单元地址(PC内容)相加得到真正有效的操作数所存放的地址。例如“李同学20岁,张同学比李同学大3岁,问张同学多少岁?”这就是一个相对寻年龄的问题,而相对寻址与此类似。如JC60H;设(PC)=2000H为基址,相对偏移量为60H;;则当C=1时,转移的目的地址=2000H+2+60H巩固新课:1、汇编语言有何种特点?指令格式?2、MCS—51系列机共有多少条指令?分几类?3、MCS—51系列汇编语言指令有几种寻址方式?§3-2数据传送类指令一、内部RAM数据传送类1、一般数据传送指令片外程序存储器ROMEPROM特殊功能寄存器SFR片内RAM128字节片外数据存储器RAMMOVCMOVXMOVPUSHPOPXCHXCHD回忆前述操作数描述符:A,direct,Rn,@Ri,#data,DPTR等。经排列组合可写出下列指令:MOVA,Rn;(A)(Rn)以下类似。MOVA,directMOVA,@RiMOVA,#dataMOVRn,AMOVRn,directMOVRn,#dataMOVdirect,RnMOVdirect,directMOVdirect,@RiMOVdirect,#dataMOV@Ri,AMOV@Ri,directMOV@Ri,#dataMOVDPTR,#data16;唯一的16位数据传送指令。上述指令不影响任何标志位,但PSW的P位除外。(direct)(A)MOVdirect,A;上述指令不影响任何标志位,但PSW的P位除外。注意:MOVRn,RnMOV@Ri,@RiMOVRn,@RiMOV#data,A等等指令是非法指令。ХХХХ哇!好容易出错啊!(2)(direct)2、栈操作指令PUSHdirectPOPdirect不影响任何标志位。PUSHdirect指令执行中,机器自动进行两步操作:(1)(SP)+1例1、设(SP)=09H,(DPTR)=0123H,分析:执行PUSHDPLPUSHDPH后,各单元中的内容。(SP)((SP))POPdirect指令执行中,机器也自动进行两步操作:(1)(direct)((SP))(2)(SP)(SP)-1例2、设(SP)=0BH,(0BH)=01H,(0AH)=23H执行POPDPHPOPDPL后,各单元中的内容。结论:1)PUSH与POP操作过程刚好相反;2)进、出栈规则:先进后出,后进先出。应注意指令书写先后顺序;3)可用于“保护现场,恢复现场”。3、字节交换指令XCHA,RnXCHA,direct整字节交换XCHA,@RiXCHDA,@RiSWAPA半字节交换不影响任何标志位。二、外部RAM数据传送MOVXA,@RiMOVXA,@DPTRMOVX@Ri,AMOVX@DPTR,A执行过程中会使/WR、/RD有效。例3、试编写一程序段,实现将外RAM0FAH单元中的内容传送到外RAM04FFH单元中。解:MOVDPTR,#04FFHMOVR0,#0FAHMOVXA,@R0MOVX@DPTR,A三、查表指令与ROM之间的数据传送。MOVCA,@A+DPTRMOVCA,@A+PC执行后会使/PSEN有效。MOVC含义是传送常数。以DPTR为基地址的指令,可在ROM的64KB范围内查表;而以PC为基地址的指令只能在(PC)+1为中心上、下256B范围内查表。例4、设(A)=一个BCD码常数,试用查表法获得其相应的ASCII码。解法II:MOVCA,@A+PCTAB:DB30H,31H,32H,33HDB34H,35H,36H,37H······解法I:MOVDPTR,#TABMOVCA,@.A+DPTRTAB:DB30HDB31HDB32H,33H,34H,35H······小结:数据传送类指令有几种类型?是否影响标志位?§3-3算术运算类指令包括:加、减、乘、除;加一、减一。一、加法指令ADDA,Rn;(A)(A)+(Rn)以下类同。ADDA,directADDA,@RiADDA,#data无符号数相加时:若C=1,说明有溢出(其值255)。带符号数相加时:若OV=D7c⊕D6c=1,说明有溢出。ADDCA,Rn;(A)(A)+(Rn)+(C);以下类同。ADDCA,directADDCA,@RiADDCA,#data上述四条指令多用于多字节数相加。INCA;(A)(A)+1,以下类同。INCRnINCdirectINC@RiINCDPTRINCA;(A)(A)+1;以下类同。INCRnINCdirectINC@RiINCDPTR例1、设(R0)=7FH;(7EH)=40H执行:INC@R0INCR0INC@R0后,(R0)=7FH;(7EH)=00H;(7FH)=41HDAA;二——十进制调整指令。执行过程中,CPU能根据加法运算后,累加器中的值和PSW中的AC及C标志位的状况自动选择一个修正值(00H、06H、60H、66H)与原运算结果相加,进行二——十进制调整。(A3~0)9时或(AC)=1时,(A3~0)(A3~0)+6(A7~4)9或(C)=1时,(A7~4)(A7~4)+6选择修正值的规则:例2、设(A)=56H为56的压缩的BCD码数,(R3)=67H,(CY)=1执行ADDCA,R3DAA结果为:124注意:1)DA指令只能跟在加法指令后面使用;2)调整前参与运算的两数是BCD码数;3)DA指令不能与减法指令配对使用,但可以实现对A中压缩BCD数进行减一操作。例3、设(A)=30H(压缩BCD码数),执行:ADDA,#99HDAA后,便实现了30-1=29的操作。例4、两个4位BCD码相加,一个存放在(31H)(30H);另一个存放在(33H)(32H);和数拟回存在(31H)(30H)中,试编程实现之。解:MOVR0,#30HMOVR1,#32HMOVA,@R0ADDA,@R1DAAMOV@R0,AINCR1MOVA,@R0ADDCA,@R1DAAMOV@R0,AINCR0二、减法指令SUBBA,Rn;(A)(A)-(Rn)-(C),以下类同。SUBBA,directSUBBA,@RiSUBBA,#data注意:减法之前先清零C。DECA;(A)(A)-1,以下类同。DECRnDEC@RiDECdirect例5、设(R0)=7FH,在内RAM中,(7EH)=00H,(7FH)=40H执行:DEC@R0DECR0DEC@R0结果为:(R0)=7EH,(7EH)=0FFH,(7FH)=3FH。三、乘法和除法指令乘法:MULAB;(A)×(B),积的低8位在A中,积的;高8位在B中;C总为0。除法:DIVAB;(A)÷(B),商在A中,余数在B中。;若(B)=0,则结果不定,(OV)=1,;(C)=0。例6、试将A中的二进制数转换为3位BCD码,其中,百位数存放于31H单元,十位数和个位数压缩后存于30H单元中。解:MOVB,#100DIVABMOV31H,AMOVA,#10XCHA,BDIVABSWAPAADDA,BMOV30H,A小结:算术运算类指令都有哪些类型?§3-4逻辑运算类指令共分两大类:单字节逻辑操作,双字节逻辑操作,共24条。一、单字节逻辑操作指令CLRA;(A)0CPLAA中8位按位求反。循环左移、右移指令:RLARLCARRARRCA注:左移一位相当于乘2;右移一位相当于除2。二、双字节逻辑操作指令“与操作”:ANLA,Rn;(A)(A)∧(Rn),以下类同。ANLA,directANLA,@RiANLA,#dataANLdirect,AANLdirect,#data例1、(P1)=35H,使其高4位输出0,低4位不变。解;ANLP1,#0FH此做法称为“屏蔽”位。“或操作”:ORLA,Rn;(A)(A)∨(Rn),以下类同。ORLA,directORLA,@RiORLA,#dataORLdirect,AORLdirect,#data例2、将A中的低3位送入P1中,并且保持P1中高5位不变。ANLA,#07HANLP1,#0F8HORLP1,A;(P1)=P17P16P15P14P13A2A1A0这称为“数位组合”。“异或操作”:XRLA,Rn;(A)(A)⊕(Rn),以下类同。XRLA,directXRLA,@RiXRLA,#dataXRLdirect,AXRLdirect,#data例3、设(P1)=0B4H=10110100B,执行:XRLP1,#00110001B结果按#00110001取反,即:(P1)=10000101B=85H这称为“指定位取反”。在上述ANL、ORL、XRL操作中,用于端口操作时,无论P0~P3是第一,还是第二操作数,都遵循“读—修改—写”端口锁存器的操作。小结:1、逻辑操作分为哪两类操作?2、循环移位指令每执行一次,移几位?3、ANL、ORL、XRL指令有哪些使用技巧
本文标题:MCS-51单片机指令系统及汇编语言程序设计
链接地址:https://www.777doc.com/doc-4006021 .html