MCS-51单片微型计算机及其应用:第4章 MCS-51的指令系统

上传人:m**** 文档编号:569510296 上传时间:2024-07-30 格式:PPT 页数:56 大小:329.50KB
返回 下载 相关 举报
MCS-51单片微型计算机及其应用:第4章 MCS-51的指令系统_第1页
第1页 / 共56页
MCS-51单片微型计算机及其应用:第4章 MCS-51的指令系统_第2页
第2页 / 共56页
MCS-51单片微型计算机及其应用:第4章 MCS-51的指令系统_第3页
第3页 / 共56页
MCS-51单片微型计算机及其应用:第4章 MCS-51的指令系统_第4页
第4页 / 共56页
MCS-51单片微型计算机及其应用:第4章 MCS-51的指令系统_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《MCS-51单片微型计算机及其应用:第4章 MCS-51的指令系统》由会员分享,可在线阅读,更多相关《MCS-51单片微型计算机及其应用:第4章 MCS-51的指令系统(56页珍藏版)》请在金锄头文库上搜索。

1、第第4 4章章 MCS-51MCS-51的指令系统的指令系统 4.1 4.1 指令系统概述指令系统概述 指令和助记符指令和助记符: 指指令令本本身身是是一一组组二二进进制制数数代代码码,为为了了便便于于记记忆忆,将将这这些些代代码码用用具具有有一一定定含含义义的的指指令令助助记记符符来来表表示示,助助记记符符一一般般采采用用英英文文单词的缩写。单词的缩写。 指令代码指令代码 助记符助记符 功能功能 740A MOV A740A MOV A,#0AH #0AH 将十六进制数将十六进制数0AH0AH 放入累加器放入累加器A A中中指令分类说明:指令分类说明:MCS-51MCS-51的基本指令共的基

2、本指令共111111条条按功能分类按功能分类 (1 1)数据传送类)数据传送类(28(28条条) ) (2 2)算术操作类)算术操作类(24(24条条 (3 3)逻辑运算类)逻辑运算类(25(25条条) ) (4 4)控制转移类)控制转移类(17(17条条) ) (5 5)位操作类)位操作类(17(17条条) )按指令所占的字节来分按指令所占的字节来分 (1) (1) 单字节指令单字节指令(49(49条条) ) (2) (2) 双字节指令双字节指令(45(45条条) ) (3) (3) 三字节指令三字节指令(17(17条条) )按指令的执行时间来分按指令的执行时间来分(1) 1(1) 1个机器

3、周期个机器周期(64(64条条) )(2) 2(2) 2个机器周期个机器周期(45(45条条) )(3) (3) 乘、除两条指令的执行乘、除两条指令的执行 时间为时间为4 4个机器周期个机器周期4.2 4.2 数据传送类指令数据传送类指令 通用格式:通用格式: MOV MOV , ( (属属“复制复制”性质,而性质,而不是不是“搬家搬家”) ) ( (数据传送类指令数据传送类指令不影响标志位不影响标志位:CyCy、AcAc和和OVOV,影响奇偶标志位影响奇偶标志位P P) ) 1 1、以累加器为目的操作数的指令、以累加器为目的操作数的指令 MOV MOV A,RnA,Rn ; ( ; (Rn)

4、ARn)A,n=0n=07 7 MOV MOV A,RiA,Ri ; ( ; (Ri)A,iRi)A,i=0,1=0,1 MOV MOV A,directA,direct ; ( ; (direct)Adirect)A MOV MOV A,#dataA,#data ; # ; #dataAdataA例:例: MOV A,R6MOV A,R6 ;(R6)A ;(R6)A,寄存器寻址寄存器寻址 MOV A,70HMOV A,70H ;(70H)A ;(70H)A,直接寻址,直接寻址 MOV A,R0MOV A,R0 ;(R0)A ;(R0)A,间接寻址,间接寻址 MOV A,#78HMOV A,#

5、78H ;78HA ;78HA,立即寻址立即寻址 2 2、以、以RnRn为目的操作数的指令为目的操作数的指令 MOV MOV Rn,ARn,A ; ( ; (A)RnA)Rn, n=0, n=07 7 MOV MOV Rn,directRn,direct ; ( ; (direct)Rndirect)Rn, n=0, n=07 7 MOV MOV Rn,#datRn,#dat ; # ; #dataRndataRn, n=0, n=07 7 功能:功能:把源操作数的内容送入把源操作数的内容送入当前一组当前一组工作寄存器区工作寄存器区 的的R0R0R7R7中的某一个寄存器。中的某一个寄存器。3

6、3、以直接地址、以直接地址directdirect为目的操作数的指令为目的操作数的指令 MOV MOV direct,Adirect,A ;(A)direct ;(A)direct MOVMOVdirect,Rndirect,Rn ;( ;(Rn)directRn)direct, n=0, n=07 7 MOV direct1,direct2MOV direct1,direct2 ;direct2direct1 ;direct2direct1 MOV MOV direct,Ridirect,Ri ;( ;(Ri)directRi)direct MOVMOVdirect,#datadirect,

7、#data ;# ;#datadirectdatadirect 功能:功能:把源操作数送入直接地址指出的存储单元。把源操作数送入直接地址指出的存储单元。 directdirect指的是内部指的是内部RAMRAM或或SFRSFR的地址。的地址。4 4、以寄存器间接地址为目的操作数的指令、以寄存器间接地址为目的操作数的指令 MOV MOV Ri,ARi,A ;( ;(A)(RiA)(Ri), i=0,1), i=0,1 MOV MOV Ri,directRi,direct ;( ;(direct)(Ridirect)(Ri) MOV MOV Ri,#dataRi,#data ;# ;#data(R

8、idata(Ri) 功能:功能:把源操作数指定的内容送入以把源操作数指定的内容送入以R0R0或或R1R1中内容中内容 为地址的片内存储单元。为地址的片内存储单元。 例:例:MOV R0MOV R0,A A MOV R1 MOV R1,20H20H MOV R0 MOV R0,#34H#34H5 5、1616位数传送指令位数传送指令 MOV DPTR,#data16MOV DPTR,#data16 ; #data16DPTR ; #data16DPTR 唯一的唯一的1616位数据的传送指令位数据的传送指令 立即数的高立即数的高8 8位送入位送入DPHDPH,立即数的低立即数的低8 8位送入位送入

9、DPLDPL。 例:例:MOV DPTRMOV DPTR,#1234H#1234H 执行后执行后DPHDPH中的值为中的值为12H12H,DPLDPL中的值为中的值为34H34H。 如果我们分别向如果我们分别向DPHDPH,DPLDPL送数,则结果也一样。送数,则结果也一样。 如下面两条指令如下面两条指令 MOV DPHMOV DPH,#35H#35H MOV DPL MOV DPL,#12H#12H。 相当于执行了相当于执行了 MOV DPTRMOV DPTR,#3512H#3512H。6 6、堆栈操作指令、堆栈操作指令 堆栈区堆栈区 先进后出先进后出 堆栈指针堆栈指针SPSP(1)(1)进

10、栈指令进栈指令 PUSH directPUSH direct 先将栈指针先将栈指针SPSP加加1 1,然后把然后把directdirect中的内容中的内容 送到栈指针送到栈指针SPSP指示的内部指示的内部RAMRAM单元中单元中 例如:例如: 当(当(SPSP)=60H,=60H,(A A)=30H,=30H,(B B)=70H=70H时时 PUSH ACCPUSH ACC ;(SP)+1=61HSP,(A)61H(SP)+1=61HSP,(A)61H PUSH BPUSH B ;(SP)+1=62HSP,(B)62H(SP)+1=62HSP,(B)62H 结果:结果:(61H)=30H,(6

11、2H)=70H,(SP)=62H(61H)=30H,(62H)=70H,(SP)=62H (2)(2)出栈指令出栈指令 POP directPOP direct SP SP指示的单元内容送入指示的单元内容送入directdirect字节字节 单元中,栈指针单元中,栈指针SPSP减减1 1。 例如例如: : 当当 (SP)=62H(SP)=62H,(62H)=70H(62H)=70H,(61H)=30H(61H)=30H时时 POP DPHPOP DPH ;(SP)DPH,(SP)-1SP ;(SP)DPH,(SP)-1SP POP DPLPOP DPL ;(SP)DPL,(SP)-1SP ;(

12、SP)DPL,(SP)-1SP 结果:结果:(DPTR)=7030H(DPTR)=7030H,(SP)=60H(SP)=60H7 7、累加器、累加器A A与外部数据存储器传送指令与外部数据存储器传送指令 MOVX A,DPTRMOVX A,DPTR ;(DPTR)A, ;(DPTR)A,读外部读外部RAMRAM或或I/OI/O MOVX MOVX A,RiA,Ri ;( ;(Ri)ARi)A, ,读外部读外部RAMRAM或或I/OI/O MOVX DPTR,A MOVX DPTR,A ;(A)(DPTR),;(A)(DPTR),写外部写外部RAMRAM或或I/OI/O MOVX MOVX Ri

13、,ARi,A ;( ;(A)(RiA)(Ri),),写外部写外部RAMRAM或或I/OI/O 功能:功能:读外部读外部RAMRAM存储器或存储器或I/OI/O中的一个字节,或把中的一个字节,或把A A中中 一个字节的数据写到外部一个字节的数据写到外部RAMRAM存储器或存储器或I/OI/O中。中。 注意:注意:/RD/RD或或/WR/WR信号有效信号有效 采用采用DPTRDPTR间接寻址间接寻址,高,高8 8位地址(位地址(DPHDPH)由)由P2P2口输出,口输出, 低低8 8位地址(位地址(DPLDPL)由)由P0P0口输出。口输出。 采用采用RiRi(i=0,1i=0,1)间接寻址)间接

14、寻址,可寻址片外,可寻址片外RAMRAM的的256256个个 单元范围。高单元范围。高8 8位地址为位地址为P2P2口上一次锁存输出,低口上一次锁存输出,低8 8位位 地址(地址(RiRi)由)由P0P0口输出。口输出。8 8、查表指令、查表指令 共两条,用于读程序存储器中的数据表格的指令共两条,用于读程序存储器中的数据表格的指令 (1) (1) MOVC A,A+PCMOVC A,A+PC 以以PCPC作基址寄存器,作基址寄存器,A A的内容的内容和和PCPC中的内容(下一条指中的内容(下一条指 令的起始地址)令的起始地址)相加后得到一个相加后得到一个1616位的地址,位的地址,该地址该地址

15、 指出的程序存储单元的内容送到累加器指出的程序存储单元的内容送到累加器A A。 注意:注意:/PSEN/PSEN信号有效信号有效。 例如例如: : (A)=30H (A)=30H时时, ,执行地址执行地址1000H1000H处的指令处的指令 1000H1000H: MOVC A,A+PCMOVC A,A+PC ( (本条指令为本条指令为1 1字节指令字节指令),),执行结果将程序存储执行结果将程序存储 器中器中1031H1031H的内容送入的内容送入A A 表格只能存放在该条查表指令后面的表格只能存放在该条查表指令后面的256256个单元之内,个单元之内, 表格的大小受到限制,且表格只能被一段

16、程序所利用。表格的大小受到限制,且表格只能被一段程序所利用。(2)(2) MOVC A,A+DPTRMOVC A,A+DPTR 以以DPTRDPTR作为基址寄存器,作为基址寄存器,A A的内容和的内容和DPTRDPTR的内容相加得到的内容相加得到 一个一个1616位的地址,把由该地址指出的程序存储器单元的内位的地址,把由该地址指出的程序存储器单元的内 容送到累加器容送到累加器A. A. 例如例如:(DPTR)=8100H(DPTR)=8100H,(A)=40H(A)=40H,执行指令,执行指令 MOVC A,A+DPTRMOVC A,A+DPTR 执行结果只和指针执行结果只和指针DPTRDPT

17、R及累加器及累加器A A的内容有关,与的内容有关,与 该指令存放的地址,表格的大小和位置可以在该指令存放的地址,表格的大小和位置可以在64K64K 程序存储器中任意安排,一个表格可为各个程序块程序存储器中任意安排,一个表格可为各个程序块 公用。公用。9 9、字节交换指令、字节交换指令 XCH XCH A,RnA,Rn XCH A,directXCH A,direct XCH XCH A,RiA,Ri 例如:例如:(A)=80H,(R7)=08H,(40H)=F0H,(R0)=30H,(30H)=OFH(A)=80H,(R7)=08H,(40H)=F0H,(R0)=30H,(30H)=OFH 执

18、行下列指令执行下列指令 XCH A,R7XCH A,R7 ;(A) ;(A)与与(R7)(R7)互换互换 XCH A,40HXCH A,40H ;(A) ;(A)与与(40H)(40H)互换互换 XCH A,R0XCH A,R0 ;(A) ;(A)与与(R0)(R0)互换互换 结果结果 (A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H(A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H 1010、半字节交换指令、半字节交换指令 XCHD XCHD A,RiA,Ri 累加器的低累加器的低4 4位与内部位与内部RAMRAM低低4 4位交换。位交换。 例如

19、:例如: (R0)=60H,(60H)=3EH,(A)=59H (R0)=60H,(60H)=3EH,(A)=59H 执行执行 XCHD A,ROXCHD A,RO 则则(A)=5EH,(60H)=39H(A)=5EH,(60H)=39H。 1111、累加器、累加器A A半字节交换指令半字节交换指令 SWAP ASWAP A ;A A4 47 7 A A0 03 34.3 4.3 算术运算类指令算术运算类指令主要用于主要用于8 8位无符号数运算;也可用于带符号数运算。位无符号数运算;也可用于带符号数运算。包括:包括:加、减、乘、除、加加、减、乘、除、加1 1、减、减1 1运算指令运算指令. .

20、指令操作将影响指令操作将影响PSWPSW中有关状态位。中有关状态位。1 1、加法指令加法指令ADD AADD A,#data #data ; A AdataAdataAADD AADD A,direct direct ; A A(direct )A(direct )AADD AADD A,RnRn ; A ARnARnAADD AADD A, RiRi ; A A( (Ri)ARi)A 用途:用途:将将A A中的值与源操作数所指内容相加,最终中的值与源操作数所指内容相加,最终 结果存在结果存在A A中。中。(1 1)不带进位位的加法指令不带进位位的加法指令例例1 1: ADD AADD A,#

21、47H#47H ADD A ADD A,34H34H ADD A ADD A,R7R7 ADD A ADD A,R0R0例例2 2: MOV AMOV A,#0AEH #0AEH ADD A ADD A,#81H#81H 执行完,执行完,A A中的值为中的值为2FH2FH PSWPSW中状态位中状态位 C=1,AC=0,OV=1,P=1C=1,AC=0,OV=1,P=1 对无符号数:结果为对无符号数:结果为12FH;12FH; 对带符号数:对带符号数:OV=1OV=1,有错。有错。(2 2)带进位位的加法指令带进位位的加法指令ADDC AADDC A,RnRn; A ARnRnCYCYAAAD

22、DC AADDC A,directdirect; A A(direct )(direct )CYACYAADDC AADDC A, RiRi ; A A( (RiRi) )CYACYAADDC AADDC A,#data#data; A AdatadataCYACYA 用途:用途:将将A A中的值和操作数的值以及进位位中的值和操作数的值以及进位位C C中的值相中的值相 加,结果存在加,结果存在A A。常用于多字节数运算中。常用于多字节数运算中。例例1 1: 先做先做67H+A0H=107H67H+A0H=107H,而而1 107H07H显然超过了显然超过了0FF0FFH H,因此最因此最终保存

23、在终保存在A A中的是中的是07H07H,PSWPSW中的中的CY=1CY=1 。换言之,。换言之,CYCY就就相当于是相当于是100H100H。 然后再做然后再做10H + 30H + 10H + 30H + CYCY,结果是结果是41H41H,所以最终的所以最终的结果是结果是4107H4107H。1067H + 30A0H1067H + 30A0H0001 0000 0110 0111 0011 0000 1010 0000 0100 0001 0000 0111 1067H1067H30A0H30A0H4107H4107H例例2 2: 先做先做67H+20H=87H67H+20H=87H

24、,没有超过,没有超过0FF0FFH H,因此最终保存在因此最终保存在A A中的是中的是87H87H,而,而PSWPSW中的中的CY=0CY=0。 然后再做然后再做10H + 30H + 10H + 30H + CYCY,结果是结果是40H40H,所以最终的结所以最终的结果是果是4087H4087H。1067H + 3020H1067H + 3020H0001 0000 0110 0111 0011 0000 0010 0000 0100 0000 1000 0111 1067H1067H3020H3020H4087H4087H(3 3) 加加1 1指令指令INC AINC A;A+1A+1AA

25、,影响影响P P标志标志INC INC RnRn ;Rn+1RnRn+1RnINC directINC direct;(direct)+1(direct)(direct)+1(direct)INC INC RiRi;(Rn)+1(Rn)(Rn)+1(Rn)INC DPTRINC DPTR;DPTR+1DPTRDPTR+1DPTR例:例:A=12H,R0=33H,(21H)=32H,(34H)=22H,DPTR=1234HA=12H,R0=33H,(21H)=32H,(34H)=22H,DPTR=1234H。 INC AINC A ; A=13HA=13H INC R0INC R0 ; R0=3

26、4HR0=34H INC 21H INC 21H ;(21H21H)=33H=33H INC R0 INC R0 ;(34H34H)=23H=23H INC DPTRINC DPTR ; DPTR=1235HDPTR=1235HDA ADA A在进行在进行BCDBCD码加法运算时,跟在码加法运算时,跟在ADDADD和和ADDCADDC指令之后,指令之后,用来对用来对BCDBCD码加法运算结果码加法运算结果进行进行自动修正自动修正。例:例:A=00010101A=00010101 ADD AADD A,#8#8 ; A=1DH; A=1DH,按二进制规律加,按二进制规律加 DA ADA A ;

27、A=23H ; A=23H,按十进制规律加,按十进制规律加(4 4) 十进制调整指令十进制调整指令修正方法应是:修正方法应是:(a a)累加器低累加器低4 4位位大于大于9 9或辅助进位位或辅助进位位Ac=1Ac=1, 则进行则进行低低4 4位加位加6 6修正修正。(b b)累加器高累加器高4 4位位大于大于9 9或进位位或进位位Cy=1Cy=1,则进,则进 行行高高4 4位加位加6 6修正修正。2 2、减法指令减法指令SUBB ASUBB A,RnRn ;A ARnRnCYCYAASUBB ASUBB A,directdirect ;A A(direct )(direct )CYACYASU

28、BB ASUBB A, RiRi ;A A( (RiRi) )CYCYAASUBB ASUBB A,#data#data ;A AdatadataCYACYA将将A A中的值减去源操作数所指内容以及进位位中的值减去源操作数所指内容以及进位位C C中的中的值,最终结果存在值,最终结果存在A A中。中。说明:说明:没有不带借位的减法指令,如果需要做不带没有不带借位的减法指令,如果需要做不带位的减法指令(在做第一次相减时),只要先将位的减法指令(在做第一次相减时),只要先将CYCY清零即可。清零即可。(1 1)带借位的减法指令带借位的减法指令(2 2)减减1 1指令指令DEC ADEC A ;A-1

29、A-1AADEC DEC RnRn;Rn-1RnRn-1RnDEC directDEC direct ;(direct)-1(direct)(direct)-1(direct)DEC DEC RiRi;(Rn)-1(Rn)(Rn)-1(Rn) 3 3、乘法指令乘法指令MUL ABMUL AB ;A AB BBABA此指令的功能是将此指令的功能是将A A和和B B中的两个中的两个8 8位无符号数相乘,结果位无符号数相乘,结果将为将为1616位无符号数。其中高位无符号数。其中高8 8位放在位放在B B中,低中,低8 8位放在位放在A A中。中。在乘积大于在乘积大于FFHFFH时,时,0V0V置置1

30、 1,否则,否则OVOV为为0 0;而;而CYCY总是总是0 0。例:例: A=4EHA=4EH,B=5DHB=5DH, 执行执行 MUL ABMUL AB 指令后,乘积是指令后,乘积是1C56H1C56H,所以,所以 在在B B中放的是中放的是1CH1CH,而,而A A中放的则是中放的则是56H56H。 4 4、除法指令除法指令DIV ABDIV AB;(A(AB) B) 商商A A 余数余数B B此指令的功能是将此指令的功能是将A A中的中的8 8位无符号数除位无符号数除B B中的中的8 8位位无符号数,商放在无符号数,商放在A A中,余数放在中,余数放在B B中。中。如果在做除法前如果在

31、做除法前B B中的值是中的值是00H00H,也就是除数为,也就是除数为0 0,那么那么0V=10V=1。例:例:A=11HA=11H,B=04HB=04H 执行执行 DIV ABDIV AB 指令后,结果为:指令后,结果为:A=04HA=04H,B=1B=1。4.4 4.4 逻辑运算与循环类指令逻辑运算与循环类指令主要用于对主要用于对2 2个字节操作数个字节操作数( (按位按位) )进行逻辑操进行逻辑操作,结果送到作,结果送到A A或直接寻址单元。或直接寻址单元。主要操作主要操作与、或、异或、移位、取反、清零等与、或、异或、移位、取反、清零等对标志位的影响对标志位的影响除了目的操作数为除了目的

32、操作数为ACCACC的指令影响奇偶的指令影响奇偶标志标志P P外,一般不影响标志位。外,一般不影响标志位。1 1、逻辑或指令逻辑或指令ORL AORL A,RnRn ;ARnAARnAORL AORL A,directdirect ;A(direct)AA(direct)AORL AORL A, RiRi ;A(Ri)AA(Ri)AORL AORL A,#data#data ;AdataAAdataAORL directORL direct,A A ;(direct)A(direct)(direct)A(direct)ORL directORL direct,#data#data ;(dire

33、ct)data(direct)(direct)data(direct)影响影响P P标志标志例:例:71H71H和和56H56H相或:相或:01110001 01110001 (71H71H) ) 01010110 01010110 (56H56H) 01110111 01110111 即即(77H)(77H)后两条指令,若直接地址为后两条指令,若直接地址为I/OI/O端口,则端口,则为为“读改写读改写”操作。操作。2 2、逻辑与指令逻辑与指令 ANL AANL A,RnRn ;ARnAARnAANL AANL A,directdirect ;A(direct)AA(direct)AANL A

34、ANL A, RiRi ;A(Ri)AA(Ri)AANL AANL A,#data#data ;AdataAAdataAANL directANL direct,A A ;(direct)A(direct)(direct)A(direct)ANL directANL direct,#data#data ;(direct)data(direct)(direct)data(direct)影响影响P P标志标志例:例:71H71H和和56H56H相与:相与:01110001 01110001 (71H71H) ) 01010110 01010110 (56H56H) 01010000 0101000

35、0 即即(50H)(50H)后两条指令,若直接地址为后两条指令,若直接地址为I/OI/O端口,则端口,则为为“读改写读改写”操作。操作。3 3、逻辑逻辑异或异或指令指令 XRL AXRL A,RnRn ;A ARnARnAXRL AXRL A,directdirect ;A A(direct)A(direct)AXRL AXRL A, RiRi ;A A(Ri)A(Ri)AXRL AXRL A,#data#data ;A A dataAdataAXRL directXRL direct,A A ;(direct)(direct) A(directA(direct) )XRL directXRL

36、 direct,#data#data ;(direct)(direct) data(directdata(direct) )影响影响P P标志标志例:例:71H71H和和56H56H相相异或异或:01110001 01110001 (71H71H) ) 01010110 01010110 (56H56H) 00100111 00100111 即即(27H)(27H)后两条指令,若直接地址为后两条指令,若直接地址为I/OI/O端口,则端口,则为为“读改写读改写”操作。操作。 4 4、取反与清、取反与清0 0指令指令取反:取反: CPL ACPL A ;/AA/AA例:例:若若 A = 5CHA

37、= 5CH, 执行执行 CPL ACPL A 结果结果 A = A3HA = A3H清清0 0: CLR ACLR A ;0A0A5 5、循环移位指令循环移位指令A.7 A.0A.7 A.0循环左移循环左移 RL ARL A循环右移循环右移 RR ARR AA.7 A.0CYCYA.7 A.0此两条指令,影响此两条指令,影响P P和和CYCY标志。标志。带进位位循环左移带进位位循环左移 RLC ARLC A带进位位带进位位循环右移循环右移 RRC ARRC A例:例:若若A=5CHA=5CH,CY=1CY=1 执行执行 RLC ARLC A 后后 结果结果 A=B9HA=B9H,CY=0CY=

38、0,P=1P=1v 对对RLCRLC、RRCRRC指令,在指令,在CY=0CY=0时时RLCRLC相当于相当于乘乘以以2 2RRCRRC相当于相当于除除以以2 20101 11000101 11001 11011 10011011 10010 0综合举例:综合举例:ANL AANL A,#0FH#0FH ;屏蔽;屏蔽A A的高的高4 4位位SWAP ASWAP AANL P1ANL P1,#0FH#0FH ;清;清P1P1口高口高4 4位位ORL P1ORL P1,A A ;P1P1口高口高4 4位输出位输出A A的低的低4 4位;位; 把累加器把累加器A A中的低中的低4 4位状态,通过位状

39、态,通过P1P1口的高口的高4 4位输出,位输出, P1P1口的低口的低4 4位状态不变。位状态不变。4.5 4.5 程序转移类指令程序转移类指令此类指令一般不影响此类指令一般不影响PSWPSW。包括以下类型:包括以下类型:无条件转移和条件转移无条件转移和条件转移相对转移和绝对转移相对转移和绝对转移长转移和短转移长转移和短转移调用与返回指令调用与返回指令1 1、无条件转移类指令、无条件转移类指令 短转移指令:短转移指令: AJMP addr11AJMP addr11 长转移指令:长转移指令: LJMP addr16LJMP addr16 相对转移指令:相对转移指令: SJMP SJMP rel

40、rel 间接转移指令:间接转移指令: JMP A+DPTRJMP A+DPTR前三条指令区别:前三条指令区别: 跳转的范围不同跳转的范围不同 短转移类指令:短转移类指令:AJMP addr11AJMP addr11 长转移类指令:长转移类指令:LJMP addr16LJMP addr16 相对转移指令:相对转移指令:SJMP SJMP relrel 转移范围转移范围: 2KB 2KB 64KB 64KB -128 -128+127+127指令构成不同。指令构成不同。 AJMPAJMP、LJMPLJMP后跟的是后跟的是绝对地址绝对地址, 而而SJMPSJMP后跟的是后跟的是相对地址相对地址。指令

41、长度不同指令长度不同原则上,原则上,SJMPSJMP或或AJMPAJMP都可以用都可以用LJMPLJMP来替代。来替代。 散转指令:散转指令:JMP A+DPTRJMP A+DPTR 这条指令的用途也是跳转,转到什么地方去呢?往往由这条指令的用途也是跳转,转到什么地方去呢?往往由运算结果运算结果决定。决定。 转移地址由转移地址由A+DPTRA+DPTR形成,并直接送入形成,并直接送入PCPC。 指令对指令对A A、DPTRDPTR和标志位均无影响。和标志位均无影响。 本指令可代替众多的判别跳转指令,又称为本指令可代替众多的判别跳转指令,又称为散转指令散转指令,多用于多分支程序结构中。多用于多分

42、支程序结构中。第四条指令不同之处:第四条指令不同之处:2 2、条件转移指令、条件转移指令1 1)判)判A A内容是否为内容是否为0 0转移指令转移指令 JZ JZ relrel ;如果;如果A=0A=0,则转移,否则顺序执行。则转移,否则顺序执行。 JNZ JNZ relrel ;如果;如果A0A0,就转移。就转移。 符合条件,转移到相对符合条件,转移到相对偏偏移量地址去。即:移量地址去。即: 新的新的PCPC值值 = = 当前当前PC + PC + 偏移量偏移量relrel 在编写汇编语言源程序时,可以直接写成:在编写汇编语言源程序时,可以直接写成: JZ JZ 标号标号 ;即转移到标号处(

43、目标地址;即转移到标号处(目标地址标号)标号)2 2)比较不等转移指令)比较不等转移指令CJNE ACJNE A, #data#data,relrel CJNE ACJNE A, directdirect,relrelCJNE CJNE RnRn,#data#data,relrelCJNE CJNE RiRi,#data#data,relrel 此类指令的功能是先将两个操作数进行比较。此类指令的功能是先将两个操作数进行比较。 如果两者相等,就顺序执行;如果两者相等,就顺序执行; 如果不相等,就转移,并影响如果不相等,就转移,并影响C C。 不影响操作数。不影响操作数。指令分析:指令分析:使用时

44、,可以将使用时,可以将relrel理解成标号,即:理解成标号,即: CJNE ACJNE A, #data#data,标号,标号 CJNE ACJNE A, directdirect,标号,标号 CJNE CJNE RnRn,#data#data,标号,标号 CJNE CJNE RiRi,#data#data,标号,标号利用这些指令,可以判断两个数是否利用这些指令,可以判断两个数是否相等相等。但。但有时还想得知两个数有时还想得知两个数哪个大哪个大、哪个小哪个小,本指,本指令也具有这样的功能。令也具有这样的功能。如果两个数不相等,如果两个数不相等,CPUCPU还会用还会用C CY Y来反映哪个数

45、来反映哪个数大哪个数小大哪个数小如果前面的数大,则如果前面的数大,则C CY Y=0=0,否则否则C CY Y=1=1。因此在。因此在程序转移后再次利用程序转移后再次利用C CY Y就可判断出哪个数大,就可判断出哪个数大,哪个数小了。哪个数小了。3 3)减)减1 1不为不为0 0转移指令转移指令 DJNZ DJNZ RnRn,relrel DJNZ direct DJNZ direct,relrel DJNZ DJNZ指令的执行过程指令的执行过程: : 将第一个参数中的值将第一个参数中的值减减1 1,然后看这个值是否等于,然后看这个值是否等于0 0。 如果如果等于等于0 0,就往下执行;,就往

46、下执行; 如果如果不等于不等于0 0,就转移,就转移到第二个参数所指定的地方去。到第二个参数所指定的地方去。 例:例: MOV 23H,#0AHMOV 23H,#0AH CLR A CLR A LOOP: ADD A,23H LOOP: ADD A,23H DJNZ 23H,LOOP DJNZ 23H,LOOP SJMP $ SJMP $执行过程:执行过程:将将23H23H单元中的数连续相加,存至单元中的数连续相加,存至A A中,每加一次,中,每加一次, 23H23H单元单元中的数值中的数值减减1 1,直至减到,直至减到0 0,共加,共加0AH0AH次。次。3 3、子程序调用与返回指令、子程序

47、调用与返回指令1 1)调用指令调用指令 LCALL addr16LCALL addr16 ;长调用指令;长调用指令 ACALL addr11ACALL addr11 ;短调用指令;短调用指令 用在主程序中调用子程序。用在主程序中调用子程序。 对短调用指令,被调用子程序入口地址必须与调用指对短调用指令,被调用子程序入口地址必须与调用指 令下一条指令的第一字节在相同的令下一条指令的第一字节在相同的2KB2KB存储区之内。存储区之内。 使用时可以用标号表示子程序首地址使用时可以用标号表示子程序首地址2 2)返回指令)返回指令 RETRET;子程序返回指令子程序返回指令 RETIRETI;中断子程序返

48、回指令中断子程序返回指令子程序执行完后必须返回到主程序。子程序执行完后必须返回到主程序。两者不能互换使用。两者不能互换使用。 NOP NOP 空操作,停一个周期,一般用作短时间的延时。空操作,停一个周期,一般用作短时间的延时。3 3)空操作指令)空操作指令 4.6 4.6 位操作指令位操作指令80518051单片机的硬件结构中,有一单片机的硬件结构中,有一个位处理器个位处理器(又称(又称布尔处理器布尔处理器),它有一套位变量处理的指令集,包括位变),它有一套位变量处理的指令集,包括位变量传送、逻辑运算、控制程序转移等。量传送、逻辑运算、控制程序转移等。在在80518051中,有一部份中,有一部

49、份RAMRAM和一部份和一部份SFRSFR是具有位寻址是具有位寻址功能的。功能的。v位操作区:内部位操作区:内部RAMRAM的的20H-2FH20H-2FH这这1616个字节单元,个字节单元,即即128128个位单元个位单元( (位地址空间位位地址空间位00007FH)7FH);v可以位寻址的特殊功能寄存器。可以位寻址的特殊功能寄存器。 以以PSWPSW中位中位4 4(RS1RS1)为例)为例直接直接( (位位) )地址方式:如地址方式:如 D4HD4H;点操作符号方式:如点操作符号方式:如 PSW.4 PSW.4 或或 D0H.4D0H.4;位名称方式:如位名称方式:如 RS1RS1;用户定

50、义名方式:用户定义名方式:( (如用伪指令如用伪指令 bit)bit)SUB.REG: bit RS1SUB.REG: bit RS1 定义后,可用定义后,可用SUB.REGSUB.REG代替代替RS1RS1。位地址表达方式位地址表达方式:1 1、位传送指令、位传送指令 MOV CMOV C,bitbit ;bit bit C C MOV bitMOV bit,C C ;C C bitbit 这组指令的功能是实现位累加器(这组指令的功能是实现位累加器(CYCY)和其它和其它 位地址之间的数据传递。位地址之间的数据传递。 例:例: MOV CMOV C,P1.0P1.0;将;将P1.0P1.0的

51、状态送给的状态送给C C。 MOV P1.0MOV P1.0,C C ;将将C C中的状态送到中的状态送到P1.0 P1.0 ;引脚上去。;引脚上去。2 2、位清、位清0 0和置位和置位 位清位清0 0指令指令 CLR CCLR C ;使使CY=0CY=0 CLR bit CLR bit ;使指令的位地址等于;使指令的位地址等于0 0。 例:例:CLR P1.0 CLR P1.0 ;即使;即使P1.0P1.0变为变为0 0 位置位置1 1指令指令 SETB CSETB C ;使使CY=1CY=1 SETB bitSETB bit ;使指定的位地址等于;使指定的位地址等于1 1。 例:例:SET

52、B P1.0 SETB P1.0 ;使使P.0P.0变为变为1 1 3 3、位逻辑运算指令、位逻辑运算指令 1 1)位与指令)位与指令 ANL CANL C,bitbit ;CyCy与指定位的值相与,结果送与指定位的值相与,结果送CyCyANL CANL C,/bit/bit ;先将指定的位地址中的值取出后取;先将指定的位地址中的值取出后取 ;反,再和反,再和CyCy相与,结果送相与,结果送CyCy。 ;注意注意: :取反取反的位地址中的值本身并的位地址中的值本身并 ; 不发生变化。不发生变化。3 3)位取反指令)位取反指令 CPL C CPL C ;使;使CyCy值取反。值取反。 CPL b

53、itCPL bit ;使指定的位的值取反。;使指定的位的值取反。2 2)位或指令)位或指令 ORL CORL C,bitbit ORL C ORL C,/bit/bit 4 4、位条件转移指令、位条件转移指令 1 1)判)判CyCy转移指令转移指令 JC JC relrel JNC JNC relrel 第一条指令的功能是如果第一条指令的功能是如果Cy=1Cy=1就转移,否则就顺序执行。就转移,否则就顺序执行。 第二条指令则和第一条指令相反,即如果第二条指令则和第一条指令相反,即如果Cy=0Cy=0就转移,就转移, 否则就顺序执行。否则就顺序执行。 2 2)判位变量转移指令)判位变量转移指令 JB bitJB bit,relrel JNB bit JNB bit,relrel JBC bit JBC bit,relrel 第一条指令:如果第一条指令:如果(bitbit)=1=1,则转移,否则顺序执行;,则转移,否则顺序执行; 第二条指令功能相反;第二条指令功能相反; 第三条指令:如果第三条指令:如果(bitbit)=1=1,则转移,并把该位,则转移,并把该位清清0 0, 否则顺序执行。否则顺序执行。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号