汇编指令系统_第1页
汇编指令系统_第2页
汇编指令系统_第3页
汇编指令系统_第4页
汇编指令系统_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章80C51系列单片机指令系统本章要点

80C51指令的基本格式

80C51指令功能分类指令系统中的常用符号

80C51指令系统的七种寻址方式

数据传送类指令算术运算类指令 逻辑运算及移位指令位操作类指令控制转移类指令

151系列单片机指令集含有111条指令

每条指令在执行时要花去一定的时间,以机器周期为单位。按指令执行时间分类:单周期(64条);双周期(45条);4周期(2条)按指令的功能分类,可分为5大类:数据传送类(29条);算术运算类(24条)逻辑运算及移位类(24);控制转移类(17条)位操作类(17条)每条指令在程序存储器ROM中占据一定的空间,以字节为单位。按指令所占字节数分类:单字节(49条);双字节(46条);3字节(16条)2§3-1指令系统基本概念标号:操作码操作数;注释

3.1.1指令基本格式方括符[]表示可选项标号代表指令所在地址,1-8个字母/数字,“:”结尾[标号:]操作码[目的操作数][,源操作数][;注释]START:MOVA,#30H;将立即数30H传送至A中MOVDPTR,#5678H;将立即数5678H传送至DPTR3⑴标号:指令的符号地址。①用于一段功能程序的识别标记或控制 转移地址。指令前的标号代表该指令的地址,是用符号表示的地址。一般用英文字母和数字组成。④标号必须用冒号“:”与操作码分隔。4⑵操作码:表示指令的操作功能。①操作码用助记符表示,它代表了指令 的操作功能。②操作码是指令的必需部分,是指令的核心,不可缺少。5⑶操作数:参加操作的数据或数据地址。⑤操作数与操作码之间用空格分隔,操作数与 操作数之间用逗号“,”分隔。①操作数可以是数据,也可以是数据的地址、 数据地址的地址或操作数的其他信息。②操作数可分为目的操作数和源操作数。③操作数可用二进制数、十进制数或十六进制 数表示。④操作数的个数可以是0~3个。6⑷注释:指令功能说明。①注释属于非必需项,是为便于阅读, 对指令功能作的说明和注解。②注释必须以“;”开始。73.1.2指令分类⑶ 按指令功能分类:可分为数据传送类、算术运算类、逻辑运算类、位操作类和控制转移类等5大类指令。80C51共有111条指令。⑴ 按指令长度分类:可分为1字节、2字节和3字节指令。⑵ 按指令执行时间分类:可分为1机周、2机周和4机周指令。83.1.3指令系统中的常用符号⑹bit:位地址。SETBACC.7

代表片内RAM中的可寻址位00H~7FH及SFR中的可寻址位。⑴#:立即数符。MOVA,#30H

#data:8位立即数;#data16:16位立即数。⑵direct:8位直接地址MOVA,3AH

代表内RAM00H~7FH或SFR的80H~FFH。⑶@:间接寻址符。MOVA,@R0如@Ri,@DPTR,@A+PC,@A+DPTR。⑷addr11:11位目的地址。

addr16:16位目的地址。⑸rel:带符号的8位偏移地址。SJMPrel

用于转移指令,其范围是相对于下一条指令第1字节地址的-128~+127个字节。93.1.4寻址方式寻址就是寻找操作数的地址。七种寻址方式,一条指令可能含多种寻址方式立即寻址直接寻址寄存器寻址寄存器间接寻址变址寻址(基址寄存器+变址寄存器间接寻址)相对寻址位寻址10【例】⒈立即寻址立即寻址是直接给出操作数,操作数前有立即数符“#”。MOVA,#30H;将立即数30H传送至A中MOVDPTR,#5678H;将立即数5678H传送至DPTRADDA,#05H;(A)←(A)+立即数05H注意:符号“#”表明其后跟的是立即数,立即数——就是数字量本身。11⒉直接寻址MOVA,3AH

;将内RAM3AH单元中的数据传送至A中MOVA,P0

;将特殊功能寄存器P0口中的数据传送至A中说明:3AH和P0是以direct形式出现的直接地址访问特殊功能寄存器SFR只能采用直接寻址方式。直接寻址是给出操作数的直接地址。直接寻址范围为内RAM128B和特殊功能寄存器。【例】12⒊寄存器寻址MOVA,R0;将R0中的数据传送至A中INCAMULAB从寄存器中读取操作数或存放操作数进寄存器寄存器寻址的操作数在规定的寄存器中。

规定的寄存器有:①工作寄存器R0~R7

②累加器A

③双字节AB

④数据指针DPTR

⑤位累加器Cy这些被寻址寄存器中的内容就是操作数【例】13⒋寄存器间接寻址MOVA,@R0;将以R0中内容为地址的存储单元中的数据传送至A中MOVXA,@DPTR;将外RAMDPTR所指存储单元中的数据传送至A中PUSHPSW;将PSW中数据传送至堆栈指针SP所指的存储单元中MOV@R1,#0FH;(30H)←立即数0FH

寄存器中的内容是一个地址,由该地址单元寻址到所需的操作数。间接寻址用间址符“@”作为前缀。【例】注意:1)“间接”表示某寄存器中的“内容”只是一个“单元地址”,这个地址单元中存放的数据才是要找的“操作数”。2)符号“@”表示“在…”,其含义与读音皆同“at”。14⒌变址寻址MOVCA,@A+DPTR

【例】在变址寻址中,操作数地址=基址+变址用于读ROM数据操作。;将A的内容与DPTR内容相加,得到一个新地址,从该地址ROM中读取数据送入A中。以16位的地址指针寄存器DPTR或16位的PC寄存器为基址寄存器,以累加器A为变址寄存器,两者中的“内容”形成一个16位的“地址”,该“地址”所指的存储单元中的内容才是操作数。MOVCA,@A+PC;A(A+PC)

15

当前PC值加上指令中规定的偏移量rel,构成实际的操作数地址

例:SJMPrel

操作:跳转到的目的地址=当前16位PC值+rel⒍相对寻址注意:1)“当前PC值”指程序中下一条指令所在的首地址,是一个16位数;2)符号“rel”表示“偏移量”,是一个带符号的单字节数,范围是:-128—+127(80H—7FH)在实际编程中,“rel”通常用标号代替16在实际编程中,“rel”通常用标号代替例:SJMPLOOP1例:2000H:SJMP08H;原PC值为2000H;执行这条指令后的当前PC值为2002H,rel为08H。2002H+08H=200AH,转移目的地址为200AH,程序就跳转至200AH去执行了。右图为SJMP08H相对寻址示意图。17;将位地址07H(字节地址20H中最高位)中的数据传送至进位位Cy。⒎位寻址位寻址是对内RAM和特殊功能寄存器中的可寻址位进行操作的寻址方式。MOVC,07H

指令中直接给出了操作数所在的位地址。例:CLRP1.0;(P1.0)←0SETBACC.7;(ACC.7)←1CPLC;(C)←NOT(C)18注意:1)位地址里的数据只可能是一个0或12)有的位地址十分明确,如P1.0,ACC.7等,有的位地址则“不太明确”,如:MOVA,17H;(A)←(17H),17H是字节地址MOVACC.0,17H;(ACC.0)←(17H),这里ACC.0是位地址所以该指令中的17H是22H单元的第7位19§3-2指令系统功能分五类,共111条指令

数据传送类指令

算术运算类指令

逻辑运算及移位指令

位操作类指令

控制转移类指令20①MOVA,Rn ;Rn→A,n=0~7

②MOVA,@Ri ;(Ri)→A,i=0、1③MOVA,direct;(direct)→A④MOVA,#data;data→A

3.2.1数据传送类指令⒈内RAM数据传送指令⑴以累加器A为目的字节的传送指令(4条)【例3-1】若R0=40H,(30H)=60H,(40H)=50HMOVA,R0;将工作寄存器R0中的数据传送至A中,A=40HMOVA,@R0;将以R0中内容为地址的存储单元中的数据送至A中A=50HMOVA,30H;将直接地址30H存储单元中的数据传送至A中,A=60HMOVA,#30H;将立即数#30H送入A中,A=30H21①MOVRn,A;A→Rn,n=0~7②MOVRn,direct;(direct)→Rn,n=0~7③MOVRn,#data;data→Rn,n=0~7⑵以工作寄存器Rn为目的字节 的传送指令(3条)22⑶以直接地址为目的字节的传送指令(5条)①MOVdirect,A ;A→(direct)②MOVdirect,Rn ;Rn→(direct),n=0~7③MOVdirect,@Ri ;(Ri)→(direct),i=0、1④MOVdirect1,direct2;(direct2)→(direct1)⑤MOVdirect,#data ;data→(direct)23⑷以寄存器间址为目的字节的传送指令(3条)①MOV@Ri,A ;A→(Ri),i=0、1②MOV@Ri,direct;(direct)→(Ri),i=0、1③MOV@Ri,#data;data→(Ri),i=0、124⒉16位数据传送指令MOVDPTR,#data16;data16→DPTR【例】MOVDPTR,#1234H;DPTR=1234H该指令也可以用两条8位数据传送指令实现:MOVDPH,#12H;DPH=12HMOVDPL,#34H;DPL=34H,DPTR=1234H25①MOVXA,@Ri;(Ri)→A,i=0、1②MOVXA,@DPTR;(DPTR)→A③MOVX@Ri,A;A→(Ri),i=0、1④MOVX@DATR,A;A→(DATR)⒊外RAM传送指令(4条)26⒋读ROM指令(2条)内RAM(包括特殊功能寄存器):用MOV指令传送;外RAM:用MOVX指令传送;ROM:用MOVC指令传送。①MOVCA,@A+DPTR;(A+DPTR)→A②MOVCA,@A+PC;PC+1→PC,(A+PC)→A三个不同的存储空间用三种不同的指令传送:27【例3-9】按下列要求传送数据:设ROM(2000H)=ABH(1)ROM2000H单元数据送内RAM10H单元;(2)R0M2000H单元数据送外RAM80H单元;(3)ROM2000H单元数据送外RAM1000H单元;解(1):MOVDPTR,#2000H;置基址2000H,DPTR=2000H MOVA,#00H;置变址0,A=00H MOVCA,@A+DPTR;读ROM2000H,A=ABH MOV10H,A;存内RAM10H单元,(10H)=ABH解(2):MOVDPTR,#1FFFH;置基址1FFFH,DPTR=1FFFH MOVA,#01H;置变址01H,A=01H MOVCA,@A+DPTR;读ROM2000H,A=ABH NOVR0,#80H;置外RAN间址,R0=80H MOVX@R0,A;写外RAM80H,外RAM(80H)=ABH解(3):MOVDPTR,#2000H;置基址2000H,DPTR=2000H MOVA,#00H;置变址0,A=00H MOVCA,@A+DPTR;读ROM2000H,A=ABH MOVDPH,1OH;修改外RAN地址,DPTR=1000H MOVX@DPTR,A;写外RAM1000H,外RAM(1000H)=ABH28【例3.10】已知ROM中存有0~9的平方表,首地址为2000H,试根据累加器A中的数值查找对应的平方值,存入内RAM30H。(设A=3)

解:若用DPTR作为基址寄存器,可编程如下:1000H:MOVDPTR,#2000H;置ROM平方表首地址MOVCA,@A+DPTR;A+2000H=2003H(设A=3),;A=(2003H)=09HMOV30H,A;平方值存入内RAM30H中 …………2000H:00H;平方表:02=02001H:01H;12=12002H:04H;22=42003H:09H;32=92004H:10H;42=16,16=10H…………2009H:51H;92=81,81=51H29①PUSHdirect;SP+1→SP,(direct)→(SP)

②POPdirect;(SP)→(direct),SP-1→SP

⒌堆栈操作指令(2条)30⑴PUSH为入栈指令例PUSH30H;(30H)=2BH,具体操作是:

先将堆栈指针SP的内容(0FH)加1,指向堆栈顶的一个空单元,此时SP=10H;②然后将指令指定的直接寻址单元30H中的数据(2BH)送到该空单元中。31⑵POP为出栈指令例POP40H;(40H)=4CH,具体操作是:先将SP所指单元0FH(栈顶地址)中的数据(4CH)弹出,送到指定的内RAM单元40H,(40H)=4CH;②然后SP-1→SP,SP=0EH,SP仍指向栈顶地址。32⒍交换指令(5条)

①XCHA,Rn ;A←→Rn,n=0~7②XCHA,@Ri ;A←→(Ri),i=0、1③XCHA,direct;A←→(direct)SWAPA;A7~4←→A3~0⑴字节交换指令⑵半字节交换指令XCHDA,@Ri;A3~0←→(Ri)3~0高4位不变。i=0、1⑶累加器高低四位互换33①ADDA,Rn;A+Rn→A(n=0~7)

有进位,Cy=1;无进位,Cy=0②ADDA,@Ri;A+(Ri)→A(i=0、1)

有进位,Cy=1;无进位,Cy=0③ADDA,direct;A+(direct)→A有进位,Cy=1;无进位,Cy=0④ADDA,#data;A+data→A有进位,Cy=1;无进位,Cy=0

3.2.2算术运算类指令⒈加法指令⑴不带Cy加法指令(4条)34⑵带Cy加法指令(4条)①ADDCA,Rn;A+Rn+Cy→A(n=0~7)有进位,Cy=1;无进位,Cy=0②ADDCA,@Ri;A+(Ri)+Cy→A(i=0、1)有进位,Cy=1;无进位,Cy=0③ADDCA,direct;A+(direct)+Cy→A有进位,Cy=1;无进位,Cy=0④ADDCA,#data;A+data+Cy→A有进位,Cy=1;无进位,Cy=0

35⒉减法指令(4条)①SUBBA,Rn;A-Rn-Cy→A,(n=0~7),

有借位,Cy=1;无借位,Cy=0

②SUBBA,@Ri;A-(Ri)-Cy→A,(n=0~1),有借位,Cy=1;无借位,Cy=0③SUBBA,direct;A-direct-Cy→A,有借位,Cy=1;无借位,Cy=0④SUBBA,#data;A-data-Cy→A,有借位,Cy=1;无借位,Cy=0

36①INCA ;A+1→A②INCRn ;Rn+1→Rn,n=0~7③INC@Ri ;(Ri)+1→(Ri),i=0、1④INCdirect ;(direct)+1→(direct)⑤INCDPTR ;DPTR+1→DPTR⒊加1减1指令⑴加1指令(5条)⑵减1指令(4条)①DECA ;A-1→A②DECRn ;Rn-1→Rn,n=0~7③DEC@Ri ;(Ri)-1→(Ri),i=0、1④DECdirect;(direct)-1→(direct)

加1减1指令涉及A时,会影响P,但不影响其他标志位。

37⒋BCD码调整指令DAA功能:对加法运算结果进行BCD码调整。十进制调整:(DAA——1条)用于两个BCD码之间的相加,这条指令只能跟在ADD或ADDC之后38BCD码是指“用二进制表达的十进制数”。如:十进制数20可以用二进制数00010100B表示;也可以用十六进制数14H表示;还可以用BCD码00100000B或20H表示。4个二进制位就可以表示一位BCD码:0000~1001可表示十进制数(BCD数)0~9;8个二进制位就可以表示两位压缩的BCD码:00000000~10011001表示00~99。

十进制调整:(DAA——1条)用于两个BCD码之间的相加,这条指令只能跟在ADD或ADDC之后39若(A)3~0

9或(AC)=1则(A)3~0

(A)3~0+6;若(A)7~4

9或(CY)=1则(A)7~4

(A)7~4+6;例:两个十进制数“65”与“58”相加,根据常识,显然其和应当为“123”。MOVA,#65HADDA,#58HDAA结果:(A)=23H(CY)=1

指令“DAA”完成的操作:

65011001015801011000

+1318192660110011040若(A)3~0

9或(AC)=1则(A)3~0

(A)3~0+6;若(A)7~4

9或(CY)=1则(A)7~4

(A)7~4+6;又如:两个十进制数“39”与“58”相加,根据常识,显然其和应当为“97”。MOVA,#39HADDA,#58HDAA结果:(A)=97H(CY)=0

39001110015801011000

+0723960110指令“DAA”完成的操作:41

DIVAB;(A÷B)商→A,余数→BCy=0,OV=0

⒌乘除法指令⑴乘法指令(1条)MULAB;A×B→BA⑵除法指令(1条)42三、逻辑运算及移位指令①ANLA,Rn;A∧Rn→A②ANLA,@Ri;A∧(Ri)→A③ANLA,#data;A∧data→A④ANLA,direct;A∧(direct)→A⑤ANLdirect,A;(direct)∧A→direct⑥ANLdirect,#data;(direct)∧data→direct⒈逻辑“与”运算指令(6条)43⒉逻辑“或”运算指令(6条)①ORLA,Rn;A∨Rn→A②ORLA,@Ri;A∨(Ri)→A③ORLA,#data;A∨data→A④ORLA,direct;A∨(direct)→A⑤ORLdirect,A;(direct)∨A→direct⑥ORLdirect,#data;(direct)∨data→direct44⒊逻辑“异或”运算指令(6条)①XRLA,Rn;A

Rn→A②XRLA,@Ri;A

(Ri)→A③XRLA,#data;A

data→A④XRLA,direct;A

(direct)→A⑤XRLdirect,A;(direct)

A→direct⑥XRLdirect,#data;(direct)

data→direct45

①CLRA ;0→A ②CPLA ;A→A⒋清零和取反指令⒌循环移位指令(4条)①循环左移:RLA②带Cy循环左移:RLCA

③循环右移:RRA

④带Cy循环右移:RRCA

46①MOVC,bit;(bit)→Cy

②MOVbit,C;Cy→bit四、位操作类指令⒈位传送指令(2条)

指令中C即进位位Cy的助记符,bit为内RAM20H~2FH中的128个可寻址位和特殊功能寄存器中的可寻址位存储单元。

【例3-36】将位存储单元24H.4中的内容传送到位存储单元24H.0。解:MOVC,24H.4;(24H.4)CMOV24H.0,C;C(24H.0)或写成:MOVC,24H;(24H)C,(24H=24H.4)MOV20H,C;C(20H),(20H=24H.0)47⑵位取反指令:①CPLC ;C→C②CPLbit ;(bit)→bit⒉位修正指令(6条)⑴位清0指令:①CLRC ;0→C②CLRbit ;0→bit⑶位置1指令:①SETBC ;1→C②SETBbit ;1→bit48⑴位逻辑“与”运算指令:①ANLC,bit ;C∧(bit)→C②ANLC,/bit ;C∧(bit)→C⑵位逻辑“或”运算指令:①ORLC,bit ;C∨(bit)→C②ORLC,/bit

;C∨(bit)→C⒊位逻辑运算指令(4条)49⑶相对转移指令

SJMPrel;PC+2→PC,PC+rel→PC五、控制转移类指令⒈无条件转移指令(3条)⑴长转移指令LJMPaddr16;addr15~0→PC,

⑵短转移指令AJMPaddr11 ;PC+2→PC, addr10~0→PC10~0, PC15~11不变⑷间接转移指令(散转指令)JMP@A+DPTR ;A+DPTR→PC50LJMP、AJMP、SJMP三条无条件转移指令的区别:①转移范围不一样。

LJMP转移范围是64KB;AJMP转移范围是与当前PC值同一2KB;SJMP转移范围是当前PC-128B~+127B。使用AJMP和SJMP指令应注意转移目标地址是否在转移范围内,若超出范围,程序将出错。②指令字节不一样。

LJMP是3字节指令;AJMP、SJMP是2字节指令。51⒉条件转移指令(13条)

条件转移指令根据判断条件可分为:

⑴判C转移

⑵判bit转移

⑶判A转移

⑷减1非0转移

⑸比较不相等转移指令满足条件,则转移;不满足条件,则程序顺序执行。52②

C=0转移指令:

JNCrel ;PC+2→PC,若Cy=0,则PC+rel→PC,转移

若Cy=1,则程序顺序执行。⑴判C转移指令(2条)①C=1转移指令: JCrel ;PC+2→PC,若Cy=1,则PC+rel→PC,转移若Cy=0,则程序顺序执行。53③(bit)=1转移并清0指令: JBCbit,rel;PC+3→PC,;若(bit)=1,则PC+rel→PC,转移,且0→(bit) ;若(bit)=0,则程序顺序执行⑵判bit转移指令(3条)①(bit)=1转移指令: JBbit,rel;PC+3→PC,若(bit)=1,则PC+rel→PC,转移若(bit)=0,则程序顺序执行②(bit)=0转移指令: JNBbit,rel;PC+3→PC,若(bit)=0,则PC+rel→PC,转移若(bit)=1,则程序顺序执行54①A=0转移指令: JZrel;PC+2→PC,若A=0,则PC+rel→PC,转移若A

0,则程序顺序执行⑶判A转移指令(2条)②A0转移指令: JNZrel;PC+2→PC,若A0,则PC+rel→PC,转移若A=0,则程序顺序执行55⑷减1非0转移指令(2条)②DJNZdirect,rel;PC+3→PC,(direct)-1→direct若(direct)=0,则程序顺序执行若(direct)0,则PC+rel→PC,转移

①DJNZRn,rel;PC+2→PC,Rn-1→Rn, 若Rn=0,则程序顺序执行 若Rn

0,则PC+rel→PC,转移56⑸比较转移指令(4条)①CJNEA,direct,rel;PC+3→PC,;若A=(direct),则程序顺序执行;若A≠(direct),则PC+rel→PC,转移;且若A≥(direct),Cy=0;若A<(direct),Cy=1

CJNEA,#data,rel;PC+3→PC,;若A=data,则程序顺序执行;若A≠data,则PC+rel→PC,转移;且若A≥data,Cy=0;若A<data,Cy=1

CJNERn,#data,rel;PC+3→PC,;若Rn=data,则程序顺序执行;若Rn≠data,则PC+rel→PC,转移;且若Rn≥data,Cy=0;若Rn<data,Cy=1④

CJNE@Ri,#data,rel;PC+3→PC,;若(Ri)=data,则程序顺序执行;若(Ri)≠data,则PC+rel→PC,转移;且若(Ri)≥data,Cy=0;若(Ri)<data,Cy=157①产生当前PC:PC+3→PC, (PC+3是因为该指令为三字节指令)②断口地址低8位保存到堆栈中: SP+1→SP,(PC)0~7→(SP)③断口地址高8位保存到堆栈中: SP+1→SP,(PC)8~15→(SP)

④形成转移目标地址:addr16→PC⒊调用和返回指令LCALLaddr16 ;PC+3→PC,SP+1→SP,(PC)0~7→(SP) ;SP+1→SP,(PC)8~15→(SP);addr16→PC⑴长调用指令LCALL指令执行步骤:58①产生当前PC:PC+2→PC,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论