配色: 字号:
第3章MCS8051单片机指令系统
2022-05-27 | 阅:  转:  |  分享 
  
第三章MCS-8051指令系统3.1汇编语言与指令格式及寻址方式3.1.1汇编语言程序设计的重要性完成某项特定任务的若干条指令的集合
称为程序计算机或单片机就是按照所编程序,一条指令一条指令地依次执行来完成各项工作任务。要计算机或单片机完成某项任务,就要先设计
相应的应用程序。设计程序就要用到不同的程序设计语言。程序设计语言归纳起来有三大类:※机器语言(目标程序/二进制表示的指令码)
,是计算机或单片机唯一能识别的语言;※高级语言(面向问题和计算过程的语言), 只要你懂得某种高级语言,你不懂计算机原 理和性能
,也能设计程序。优点:不懂计算机也能编程序,功能强。缺点:指令码占用存储空间大,程序运行速度慢 ※汇编语言(低级语言/面向机器
的语言) 用汇编语言编写的程序,每一个语句都对应着计算机的一条具体的指令。因此,用汇编语言编写程序,必须熟悉计算机或单片机的指令
功能。优点:目标码所占存储空间小,程序运行速度 快缺点:采用汇编语言编写程序,必须熟悉计算 机或单片机的硬件及
指令系统。 由于汇编语言具有面向机器、目标码占用存储空间少、运行速度快等优点,在很多实时采集、实时处理、实时控制领域和高精密仪器设
备产品中,都需要采用汇编语言程序设计。可见,学习汇编语言程序设计是非常重要的。3.1.2指令格式MCS-8051汇编语言指令格式
如下:【标号:】操作助记符【目的操作数】【,源操作数】【;注释】标号——由用户设定,表示该指令所在地址。操作码助记符——由英
文缩写词组成的字符串,它规定了指令的操作功能。目的操作数——指出操作数结果存放单元的地址 (目的地址)。源操作数——指出操
作数来源的地址(源地址)注释——说明该条指令或程序段功能作用, 便于阅读程序。在8051指令系统中,操作数项规
定了数据类型和所用的寻址方式。两操作数之间必须用“,”分开,与操作码之间用空格分隔,带“【】”的项可有可无,称可选项。操作码助记符
是指令系统的核心,不可缺少。 8051汇编语言中的数值形式可采用:二进制数(B),十进制数(D),十六进制数(H)。3.1
.3寻址方式指令的一个重要组成部分是操作数,它指出了参与运算的数或数所在地址。如何得到这个数或数所在地址——就叫寻址方式。寻
址方式与计算机的存储空间结构有密切的关系,寻址方式越多,则计算机的功能越强,编程灵活性越好。8051单片机的寻址方式:1、立即寻址
2、直接寻址3、寄存器寻址4、寄存器间接寻址5、变址寻址6、相对寻址7、位寻址PC:操作码(74H)当
前PC+1:立即数(20H)1、立即寻址如:MOVA,#20H;把常数20H传送到A中。——立即寻址方
式的指令是双字节的: 该操作数(立即数)紧跟在操作码后面,一起存放在ROM中。如下图所示。MOVA,#20H指令执行演
示:74H20H操作码PCPC+120H立即数A:ROM2.直接寻址——指令中直接给出操作数所在存储单元的地址。直接寻
址可访问3种地址空间: (1)、访问专用寄存器SFR(特殊寄存器),是唯一方式;(2)、访问片内RAM中的低128字节; (3)
、访问221个可直接寻址位地址空间。如:MOVA,70H;把片内RAM中70H地址单元的内容送A中,即实际的操作数在
70H地址单元中。直接寻址指令是双字节的,具体形式为:访问专用寄存器时,在用助记符指令中,可直接用符号代替地址。如:M
OV A,P0MOV A,80H;是等价的。PC操作码当前直接地址PC+1具体执行过程演示:MOV A,70
H A:E5H70H操作码PC55H70HPC+1直接地址RAMROM3.寄存器寻址——指出所选定的通用工作寄存器组R0~R7
中某一个寄存器的内容作为操作数。这条指令的操作码包含了所选用的寄存器,即操作码的低三位指定了所选用的工作寄存器(R0~R7)中的
一个。如:INC R3;把所选的寄存器组中 的R3的内容加1后送回R3。指令码:0000
1011RRRALUR3:XXXXXXXXRS1RS0ROMPSW:此外,ACC,B,DPTR,AB和
C(位累加器)都可作寄存器寻址。注意:在寄存器寻址前,通过PSW中的RS1和RS0设定当前工作的寄存器组。1INC R3执行过
程演示:100001011形成8位地址000PC011004.寄存器间接寻址——用于访问片内RAM和片外RAM如:MOV
A,@Ri将R0指定的片内RAM单元中的内容送到A中。MOVXA,@Ri将R0指定的片外RAM单元中的内容送入A
中。MOVXA,@DPTR把DPTR指定的片外RAM中的内容送A中。在执行PUSH和POP时,可采用SP作寄存器
间接寻址。(1)当访问片内RAM低128字节或片外RAM低256字节时,可用当前工作寄存器中的R0或R1作间接地址寄存器。即R
0或R1作为存放操作数单元地址的指针。这类指令操作码的最低位指出了R0或R1。(2)访问片外RAM时,可用DPTR作间址寄存
器;DPTR是16位,可对64KB的片外RAM寻址。下面请看:MOV A,@Ri的执行情况。MOVRi,#
60H;设地址指针MOVA,@Ri011000001110011iRiA:60Hpci00000ROM77HPSW
:RS1RS0RAMXX5.基址加变址寄存器寻址——(基址寄存器+变址寄存器间接寻址)如:MOVC A,@A+DPT
R;——把DPTR和A的内容相加,形成的程序存储 器地址单元中的内容送A中。——以DPTR或PC为基址寄存器,A为变址
寄 存器。两者内容相加形成16位程序存储器 地址,作为操作数地址。MOVC这是一种查表操作指令。如:MOVC A,@A
+PC设:(A)=88HPC=8020H10000011A…PCH88H80HPC20HPCL…33H80A8HALU…ROM
6.相对寻址如:JC 80H ;条件转移——C=0不满足条件,顺序执行,C=1满足条件,跳转。——从本指令的下一条指令的第一
个字节地址(PC为基址)转移到-128~+127范围内某一程序存储器地址,由指令给出补码形式的偏移字节数,这种方式用于转移类指令。
JC80H40H80H…XX…PC1007HPC1005H操作码1006H偏移量80H1007H…0F87HA
LUROM7.位寻址如:MOV Acc.x,C——位累加器(C)的内容传送给A累加器的 某一位。在8051单片
机中,可位寻址和位处理机的RAM空间有:※片内RAM20H~2FH字节单元,对应的位是00H~7FH;※专用寄存器SFR中的
某些单元也可位寻址,其位地址是80H~0FFH中的一部分。 位处理机有以下特点:※有位累加器为C(即进位标志CY)※有一套完整的位
指令系统,共17条指令。※能对位操作地址空间的每一位进行传送和 逻辑操作。※能简化控制、简化处理、提高运行速度。 三.寻址空间及符
号注释 1.寻址空间——(每种寻址方式可涉及 的存储器空间)寻址方式寻址空间立即ROM直接片内RAM中的低
128字节/专用寄存器SFR寄存器寻址工作寄存器R0~R7,A,B,CY,DPTR,AB寄存器间接寻址片内RAM中的低128字节[
@R0,@R1,SP]片外RAM中0~255,0~64KB(@R0,@R1@DPTR)变址寻址程序存储器(@A+PC,@A+DP
TR)相对寻址RAM256字节范围(PC+偏移量)位寻址片内RAM的20H~2FH字节地址,部分专用寄存器SFR2.寻址方式中常
用的符号注释(1)Rn——当前选中的R0~R7(n=0~7)。它在片内RAM的地址由PSW中的RS1,RS0确定:00H~
07H(0区);08H~0FH(1区), 10H~17H(2区);18H~1FH(3区)。(2)Ri——当前选中的工作寄存器R
0、R1。可作为地址指针(间接寄存器)。Ri在片内RAM中的地址与Rn同。(3)#data——8位立即数,即包含在指令
中的8位常数。(4)#data16——16位立即数,即包含在指令
中的16位常数。(5)dir——8位片内RAM单元(包括SFR)
的直接地址。(6)addr11——11位目的地址,用于ACALL和AJMP指令中,目的地址必
须在与下条指令的地址相同的2K字节ROM地址空间之内。(7)addr16——16位目的地址,用
于LCALL和LJMP指令中。目的地址在64K字节ROM地址空间内。(8)rel——补码形式的8位地址偏移量。对应下条指令第一字
节地址为基 址,其偏移量在-128~+127范围 内。用在SJMP和所有的条件
转移 指令中。(9)bit——片内RAM或专用寄存器(SFR)的 直接寻址位地址。
(10)@——间接寻址中表示间址寄存器的符 号。(11)/——位操作指令中,表示对该位先取反
再参与操作,但不影响该位原值。(12)(X)——X中的内容。(13)((X))——由X指出的地址单元中的内容。(1
4)——指令操作流程,将箭头左边的 内容送入箭头右边的单元内。目录3.2指令系统3.2
.18051指令系统有111条指令组成。按字节数分类有:单字节指令49条双字节指令46条三字节指令16条按运算速度分类有
:单周期指令64条双周期指令45条四周期指令2条按指令操作的功能分类有:数据传送类指令29条。算术运算类指令24条。
逻辑操作类指令24条。控制转移类指令17条。位操作类指令17条。3.2.2数据传送指令传送指令共有29条,有可以通过A进行数
据传送的指令,也可以在RAM之间或工作寄存器与RAM之间直接进行数据传送的指令。数据传送路径如图所示:DPTRCYRAMA@R0、
@R1#DATA@SPR0~R7数据传送指令一般的操作: 1.数据传送指令执行后,把源操作数传送到目的操作数,源操作数不改变
,目的操作数修改为源操作数。 2.若要求在进行数据传送时,不丢失目的操作数,可采用交换类传送指令。 3.数据传送指令不影
响标志(C、AC和OV)。4.数据传送指令用到的助记符有:MOV——内部RAM传送;MOVX——外部RAM传送
;MOVC——ROM的查表传送;XCH——字节(8位)交换传送;XCHD——低半字节交换;SWAP——A
中高四位与低四位交换;POP——弹栈指令;PUSH——压栈指令。※传送类指令寻址方式源操作数可以采用五种寻址方法:
立即、直接、寄存器、寄存器间接、基址+变址寄存器间接寻址。目的操作数可采用三种寻址方法:直接、寄存器、寄存器间接。8051
还有一条16位传送指令,专用于设定地址指针。如:MOV DPTR,#1000H11101rrr下面逐条介绍数据传送
指令1.寄存器内容送累加器格式:MOVA,Rn代码:0E8H~0EFH操作:(A)(Rn),n=0~7说明:
Rn在片内RAM中的地址由当前工作寄存器区选择位RS1,RS0确定.可以是00H~07H,08H~0FH,10H或18H~1
FH.2.(A)(Rn)格式:MOV RN,A代码:0F8H~0FFH11111rrr说明:目的操作数采用寄存器
寻址方式Rn在片内RAM中的地址由当前工作寄存器区选择位RS1,RS0确定.可以是00H~07H,08H~0FH,10H或
18H~1FH.3.((Ri))(A)格式:MOVA,@Ri代码:0E6H~0
E7H说明:Ri在内部RAM中的地址由当前工作寄存器区选择位RS1,RS0确定。该指令可访问内部RAM的0~255个单元,对于
8051子系列内部RAM为0~127单元。1110011i1111011i01110100立即数4.(A)((
Ri))格式:MOV@Ri,A代码:0F6H~0F7H5.立即数(A)格式:MOVA,
#data代码:74H 说明:代码的
第一个字节为指令码,第二个字节为立即数。11100101直接地址6.内部RAM或专用寄存器内容(A)格式:
MOVA,direct代码:0E5H说明: 代码的第二个字节为直接地址,可以指向专用寄存器或内部RAM(0~127单
元),它与指令一起放在ROM中,执行该指令时,与操作码一起取到CPU,经地址译码访问指定单元。11110101直接地址01111r
rr立即数7.(A)内部RAM或专用寄存器中格式:MOVdir,A代码:
0F5H8.立即数寄存器格式:MOV
Rn,#data代码:78H~7FH0111011i立即数01110101直接地址立即数9.((Ri))#data格式:
MOV@Ri,#data代码:76H~77H10.direct#da
ta格式:MOVdir,#data代码:75H说明:这是一条三字节指令,代码的第二个字节为直接地址,第三
个字节为立即数,执行时,他们与指令操作码一起从ROM中取入CPU中。10001rrr直接地址10101rrr直接地址1
1.dir(Rn)格式:MOVdir,Rn代码:88H~8FH操作:(dir)?(
Rn)12.(Rn)dir格式:MOVRn,dir代码:0A8H~0AFH操作:
(Rn)?(dir)1000011i直接地址011i1010直接地址13.dir((Ri))格式:MOV
dir,@Ri代码:86H~87H操作:(dir)?((Ri)),I=0,114.((Ri))dir
格式:MOV@Ri,dir代码:0A6H~0A7H操作:((Ri))?(dir),I=0,110000101
直接地址(源)直接地址(目)15.(dir2)(dir1)格式:MOVdir,dir代码:
85H操作:(dir2)?(dir1)说明:3字节指令,代码中的源操作数和目的操作数为绝对地址,功能很强,能实现内部RAM之
间,专用寄存器之间或专用寄存器与内部RAM之间的直接数据传送。而执行时间仅2个周期。10010000立即数15~8立即数7~01
6.16位立即数送数据指针格式:MOVDPTR,#data16代码:90H 操作:(DPH)#data15~#d
ata8(DPL)#data7~#data01110001i17.(A)((Ri))格式:MOV
XA,@Ri代码:0E2H~0E3H说明:执行时,P3.7脚(RD)有效,用作 外部RAM读选通。P0口上
分时输出由Ri指定的8位地址信息及输入单元的数 据。1111001i18.((Ri))(A)格式:MOVX
@Ri,A代码:0F2H~0F3H说明:执行时,P3.6(WR)有效,作为外部RAM写选通。P0口上分时输出由R
i指定 的8位地址信息和输出该单元中的数据。 这两条可寻址外部RAM的256字节。111100001110000019.((
DPTR))(A)格式:MOVX@DPTR,A代码:0F0H说明:同18,DPTR的16位地址信息由P0(低八位)和
P2(高八位)输 出,A中内容由P0输出。20.(A)((DPTR))格式:MOVXA,@
DPTR代码:0E0H100110000011001121.(A)((A)+(DPTR))(近程查表)格式:MOVC
A,@A+DPTR代码:93H操作:(A)((A)+(DPTR))22.(A)((A)+(PC))(近程查表
)格式:MOVCA,@A+PC代码:83H操作:(PC)(PC)+1(A)((A)+(PC));基址+变址110
0011i1100010111001rrr23.(A)(Rn);寄存器内容与A内容交换格式:XCH
A,Rn代码:0C8H~0CFH24.(A)((Ri));内部RAM内容与A中内容交换格式:XCHA,@Ri
代码:0C6H~0C7H25.(A)direct;内部RAM或专用寄存器内容与A中内容交换格式:XCHA,di
r代码:0C5H1101001i1100010026.(A3~0)((Ri3~0));;内部RAM单元低4位
内容与A中低四位容交换,高四位不变。格式:XCHDA,@Ri代码:0D6H~0D7H27.(A3~0)(A7~4)
;;A的低四位与A的高四位交换。格式:SWAPA代码:0C4H11010000直接地址28.(dir)((sp))
;栈顶内容送内部RAM或专用寄存器格式:POPdir代码:0D0H操作:(dir)((sp))(sp)
(sp)-111000000直接地址29.内部RAM或专用寄存器内容送栈顶格式:PUSHdir代码:0C0H操作
:(sp)(sp)+1((sp))(dir)3.23算术操作类指令 共24条,其中有+
、-、×、÷4种基本算术操作指令,这四种指令能对8位无符号数进行直接的运算。借助溢出标志:可对带符号数进行2的补码
运算。借助进位标志:可实现多精度的加,减和 环移,也可以对压缩的
BCD数进行运算。算术运算指令的结果将使:---进位(CY),---辅助进位(AC),三种标志置位或复位---溢出(0V
),加1,减1——不影响以上标志。算术运算类指令用到的助记符有:ADD——无进位加法;ADDC——带进位加;INC——加一指令
;DA——BCD码调整;SUBB——带进位减;DEC——减一指令;MUL——乘法指令;DIV——除法指令。00101rrr0
010011i每条指令的功能:1、(A)(A)+(Rn)格式:ADDA,Rn代码:28H~2
FH2、(A)(A)+((Ri))格式:ADDA,@Ri代码:26H~27H00100101直接寻址001
00100立即数3.(A)?(A)+(dir);(A)+内部RAM或专用寄存器,源操作数为直接寻址格式:A
DDA,dir代码:25H4.(A)?(A)+data;A内容+立即数格式:ADDA,#d
ata代码:24H0010001001000101立即数直接地址3.(A)(A)+(dir)格式:A
DDA,dir代码:25H4.(A)(A)+#data格式:ADDA,#data代码:
24H从以上4条指令,在相加过程中:——若位3和位7有进位,则AC和Cy置位。否则,复位。——对无符号数相加时,若Cy置位,和
数溢 出(>255)。——对带符号数相加时,用OV判断溢出:若位6和位7不同时进位时,OV=1,即溢出(>+127或<-12
8)。0011011i00111rrr5.(A)(A)+(C)+(Rn);格式:ADDCA
,Rn代码:38H~3FH6.(A)(A)+(C)+((Ri));格式:ADDCA,@Ri代码:36H~
37H0011001101010100立即数立即数7、(A)(A)+(C)+#data;格式:ADDCA
,#data代码:34H8、(A)(A)+(C)+(dir);格式:ADDCA,dir代码:35
H0000010000001rrr9.(A)(A)+1格式:INCA代码:04H10.
(Rn)(Rn)+1格式:INCRn代码:08H~0FH00000101直接地址0000011i11.
(dir)(dir)+1格式:INCdir代码:05H12.((Ri))
((Ri))+1格式INC@Ri代码:06H~07H1010001113、(DPTR)(DPTR)+
1;格式:INCDPTR代码:0A3H说明:这是一条16位数加1指令。按216取模,指令首先对DPL内容加1,
当溢出时,DPH内容加1,并不影响标志。1101010014.十进制调整格式:DAA代码:0D4H操作:若
[(A3~0)>9]∨[(AC)=1],则(A3~0)(A3~0)+6;若[(A7~4)>9
]∨[(C)=1],则(A7~4)(A7~4)+6。说明:1).DA不影响O∨;2).不能用DA对十进制减
法操作的结果进行调整;3).借助Cy可实现多位BCD数加法结果的调整;4).必须在加法指令后使用。100110011r
rr011i15.(A)(A)-(C)-(Rn);格式:SUBBA,Rn代码:98H~9FH16.
(A)(A)-(C)-(Rn);格式:SUBBA,@Ri代码:
96H~97H1001100101010100直接地址立即数17.(A)(A)-(C)-#data
格式:SUBBA,#data代码:94H18.(A)(A)-(C)-(direct)格式:S
UBBA,direct代码:95H0001000101001rrr19.(A)(A)-1格式:
DECA代码:14H20.(Rn)
(Rn)-1格式:DECRn代码:18H~1FH00010101直接地址0001011i21.((Ri)
)((Ri))-1格式:DEC@Ri代码:
16H~17H22.(dir)(dir)-1;格式:DECdir代码:15H说明:直接地址为p
0~p3时,此指令具有“读—修改—写”功能。101010000100010023.(B7~0)(A7~0)(A)×(B)
格式:MULAB代码:0A4H24.累加器A内容除以寄存器B的内容格式:DIVAB代码:
84H操作:(A)(A)÷(B)的商(B)(
A)÷(B)的余(C)0,(0V)03.2.4逻辑操作指令共有24条:与,或,异或,清除,求反,左右移位。此类指令操作数
都是8位的。逻辑类指令助记符有:ANL—逻辑与ORL—逻辑或XRL—异或RL—循环左移RLC—连进位循环左移RR—循环右移R
RC—连进位循环右移CLR——清零CPL—按位取反01010100立即数010101011rrr011i1.ANLA
,Rn代码:58H~5FH操作:(A)(A)∧
(Rn)2.ANLA,@Rn代码:56H~57
H操作:(A)(A)∧((Ri))3.ANLA,#data代码:54H操作:(A)(A)∧#data010
1010101000101直接地址直接地址4.ANLA,dir代码:55H操作:(A)(A)∧(dir)说
明:为p0~p3时,操作数来自端口锁存器5.ANLdir,A代码:52H操作:(dir)(dir)∧(A)
说明:为p0~p3时,“读——修改——写”。01010011直接地址立即数01001rrr6.ANLdir,#dat
a代码:53H操作:(dir)(dir)∧#data说明:为p0~p3时,“读——修改——写”7.ORLA,
Rn代码:48H~4FH操作:(A)(A)∨(Rn)0
100011i8.ORLA,@Ri代码:
46H~47H操作:(A)(A)∨((Ri))0100010001010100直接地址立即数9.
ORLA,#data代码:44H操作:(A)(A)∨#data10.ORLA,dir代码:45H操
作:(A)(A)∨(direct)说明:当dir为端口P0~P3时,数据 来自端口的锁存器。010
00010直接地址00010101直接地址立即数11.ORLdir,A代码:42H操作:(dir)(dir)∨
(A)说明:为p0~p3时,“读——修改——写”12.ORLdir,#data代码:15H操作:(dir)(
dir)∨#data说明:为p0~p3时,“读——修改——写”011001101rrr011i13.XRLA
,Rn代码:68H~6FH操作:(A)(A)⊕(Rn
)14.XRLA,@Ri代码:66H~67H
操作:(A)(A)⊕((Ri))0110011001010100直接地址立即数15.XRLA,#data代码:64H
操作:(A)(A)⊕#data16.XRLA,dir代码:65H操作:(A)(A)⊕(dir)说明:
当dir为p0~p3时,数据来自端口寄存器。01100010直接地址01000010直接地址立即数17.XRLdir,
A代码:62H操作:(dir)(dir)⊕(A)说明:地址为p0~p3时,是一条“读—修改—写”指令18.XRLdir
,#data代码:63H操作:(dir)(dir)⊕#data说明:地址为p0~p3时,是一条“读—修改—
写”指令001000100011001019.RLA;A内容循环左移代码:
23H操作:(An+1)←(An)(A0)←(A1)说明:不影响标志20.R
LCA;A内容连进位循环左移代码:
23H操作:(An+1)←(An)(A0)←(C)(C)←(A7)000000010011001121.RRA;
A内容循环右移代码:03H操作:(An)←(
An+1)(A7)←(A0)22.RRCA;A内容连进位循环右移代码:
13H操作:(An)←(An+1)(A)7←(C)(C)←(A0)1111111001000
10023.CPLA代码:0F4H操作:(A
)()24.CLRA代码:0E4H操作
:(A)03.2.5控制程序转移类指令控制程序转移类指令共17条,不包含按布尔变量控制程序转移类指令。指令分为:64K全空间的长
调用指令;64K内长转移指令;按2KB分块的ROM内的绝对调用;绝对转移指令;64K全空间的长相对转移;一页范围内的短相对转移;条
件转移等指令。这类指令的助记符为:ACALL——绝对调用;AJMP——绝对转移;LCALL——长调用;LJMP——长转移;
SJMP——短转移;JMP——间接长转移;JZ——累加器为零转移;JNZ——累加器非零转移;CJNE——累加器内容与内部RAM或专
用 寄存器内容不等转移;DJNZ——寄存器内容减1不为零转移。A10A9A810001A7
A6A5A4A3A2A1A01.绝对调用:ACALLaddr11代码:操作:(PC)←(PC)+2得本条指
令的下一条指令首址(SP)←(SP)+1((SP))←(PC7~0)(PC)←(SP)+1((SP))←(PC15
~8)(PC10~0)指令中的2KB区内地址a10~0新PC=PC15~11+PC10~0A10~A8表示页号;A7
~A0表示页內地址。保护PC低八位地址保护PC高八位地址A10A9A800001A7A6A5A4A3A2A1
A02.绝对转移:AJMPaddr11代码:操作:(PC)←(PC)+2(PC10~0)←指令中的A10
~0新PC=PC15~11+A10~000010010addr15~8addr7~03.长调用:LCALLadd
r16代码:12H操作:(PC)←(PC)+3;得本指令的下一条
指令首址,(SP)←(SP)+1((SP))←(PC7~0)(PC)←(SP)+1((SP))←(PC
15~8)(PC)指令中的addr15~0保护PC低八位地址保护PC高八位地址00000010addr15~8addr7~0
4.长转移LJMPaddr16代码:02H操作:(PC)←指令中的addr15~0。说明:可转移的目的
地址在64KB中的任意单元。10000000相对地址5.短转移STMPREL80H代码:80H操作:(PC)(PC)+
2(PC)(PC)+相对地址说明:相对地址——是带符号(2的补码)的偏 移量其范围:-128~+12
7。负——向后转移正——向前转移011100116.间接长转移JMP@A+DPTR代码:73H操作:(P
C)(A)+(DPTR)说明:不改变A和DPTR内容。001000107.子程序返回RET代码:22H操作:(PC
15~8)((SP))(SP)(SP)-1(PC7~0)((SP))(SP)(SP)-1恢复断点地址高八位恢复断点地
址低八位001100108.中断返回RETI代码:32H操作:(PC15~8)((SP))(SP)(SP)-1(PC7~
0)((SP))(SP)(SP)-1恢复断点地址高八位恢复断点地址低八位01100000相对地址9.累加器为零转移
JZ REL代码:60H操作:(A)0,(PC)(PC)+2;(A)=0,(PC)(PC)
+2+相对地址。01110000相对地址10.累加器非零转移JNZREL代码:70H操作:(A)=0,(P
C)(PC)+2;(A)0,(PC)(PC)+2+相对地址。10110100立即数相对地址11.A中
的内容与#data不等转移CJNEA,#data,rel代码:0B4H操作:#data=(A),(PC)
(PC)+3,(C)←0;#data<(A),(PC)(PC)+3+相对地址,(C)←0;#data>(A),(
PC)(PC)+3+相对地址,(C)←1。10110101直接地址相对地址12.A中的内容与内部RAM或专用寄存器不
等转移CJNEA,dir,rel代码:0B5H操作:(dir)=(A),(PC)(PC)+3,(C)←0;
(dir)<(A),(PC)(PC)+3+rel,(C)←0;(dir)>(A),(PC)(PC)+3+rel
,(C)←1。10111rrr立即数相对地址13.Rn中的内容与#data不等转移CJNEA,#data,rel
代码:0B8H~0BFH操作:#data=(Rn),(PC)(PC)+3,(C)←0;#data<(Rn),(P
C)(PC)+3+rel,(C)←0;#data>(Rn),(PC)(PC)+3+rel,(C)←1。1011011i
立即数相对地址14.内部RAM的内容与#data不等转移CJNE@Ri,#data,reL代码:0B6H~0B7H操
作:#data=(Ri),(PC)(PC)+3,(C)←0;#data<(Ri),(PC)(PC)+3+rel,(C)
←0;#data>(Ri),(PC)(PC)+3+rel,(C)←1。11011rrr相对地址15.Rn中的内容减1
不为零转移DJNZRn,rel代码:0D8H~0DFH操作:(Rn)(Rn)—1Rn=0:(PC)
(PC)+2(顺序排列);Rn0:(PC)(PC)+2+rel。10110101直接地址相对地址16.内部
RAM或专用寄存器内容减1不为零转移DJNZdir,rel代码:0D5H操作:(dir)(di
r)—1(dir)=0,(PC)(PC)+2(顺序排列);(dir)0,(PC)(PC)+2+re
l。说明:当direct为端口P0~P3时,这是一条“读—修改—写”指令。0000000017.空操作NOP代码:00H
操作:(PC)(PC)+13.2.6布尔变量操作类指令在MCS—51硬件结构中有一个布尔处理器和一个专门处理布尔变量的指令子
集,包括有:布尔变量的传送;逻辑运算;控制程序转移指令。在布尔处理器中,CY的作用相当于一般的CPU中的A,通过CY完成
位的传送和逻辑运算。共有17条指令,其格式有四种形式:操作码(单字节)操作码偏移地址(双字节)操
作码位地址(双字节)操作码位地址偏移地址(三字节)位地址有:内部RAM(20H~2FH)中
连续的128位和专用寄存器中的可寻址位:80H~0FFH中不连续单元的位。从80H开始,每八个单元有一个可位寻址的专用寄存器。目
前已定义了12个:B,ACC,PSW,IP,P3,IE,P2,SCON,PI,TCON,P0,T2CON。其中:B,ACC加
上内部RAM中的128位,共144位,可用作软件标志或存放布尔变量。 指令中位地址的表达有多种方式:直接地址方式:0D5H点操
作符方式:PSW·5位名称方式:F0用户定义方式:用伪指令bit例如:USR_FLGbitF0定义后,允许指
令中用USR_FLG代替F0。以上四种方式都是指PSW中的位5(它的位地址:0D5H;名称为:F0;用户定义名为:U
SR_FLG)。位操作的17条指令助记符有:MOV——传送;CLK——清进位标志;CPL——进位标志取反;SETB——置位标志
;ANL——逻辑与;ORL——逻辑或;JC——进位标志置位转移;JNC——进位标志为零转移;JB——直接寻址位置位转移;JNB—
—直接寻址位为零转移;JBC——直接寻址位置位转移并将该位复位。1001101000100010位地址位地址1.格式:MOV
C,bit;(C)(bit)代码:0A2H2.格式:MOVbit,C;(b
it)(C)代码:92H说明:bit为P0~P3口的某一位,实现“读——修改——写”。操作:先读P口
的8位,然后C送指令位,再后8位送P口锁存器。11000010位地址110000113.格式:CLRC;(C)
0代码:0C3H4.格式:CLRbit;(bit)0代码:0C2H说明:b
it为P0~P3口某一位时:实现“读—修改—写”指令11010010位地址11011011001100115.格式:S
ETRC;(C)1代码:0D3H6.格式:SETBbit;(bit)
1代码:0D2H7.格式:CPLC;(C)(C)代码:0B3H1000101100100010位地址位
地址8.格式:CPLbit;(bit)(bit)代码:0B2H说明:当寻址位为P0~P3口中的某一位时,实现“
读—修改—写”功能。9.格式:ANLC,bit;进位标志逻辑与 直接寻址位代码:82H操作:(C)(C)
∧(bit)0111101100100000位地址位地址 10.格式:ANLC,/bit代码:0B0H操作:(C)←(C)∧() 11.格式:ORLC,bit代码:72H操作:(C)←(C)∨(bit)10100000位地址12.格式:ORLC,/bit代码:0A0H操作:(C)←(C)∨()例:P=0,C=0执行:ORLC,/P结果:C=1,P=0。0101010000000000相对地址相对地址13.格式:JCREL代码:40H操作:(C)=1:(PC)(PC)+2+rel。(C)=0:(PC)(PC)+2。14.格式:JNCREL代码:50H操作:(C)=0:(PC)(PC)+2+rel。(C)=1:(PC)(PC)+2。15.格式:JBbit,REL代码:20H操作:(bit)=1:(PC)(PC)+3+rel。(bit)=0:(PC)(PC)+3。00100000位地址相对地址16.格式:JNB bit,Rel代码:0011000030H位地址相对地址操作:(bit)=0(PC) (PC)+3+Rei(bit)=1(PC)(PC)+300010000位地址相对地址17.格式:JBCbit,Rel代码:10H操作:(bit)=0:(PC)(PC)+3。(bit)=1:(PC)(PC)+3+Rel;(bit)0说明:若直接寻址为P0~P3中的某一位,则为“读—修改—写”目录 2.伪指令8051汇编语言,除了有可执行的指令外,为了方便程序的编制,还定义了一些指令,这些指令不参加也不影响指令的执行,也不在计算机内运行。这些指令叫:伪指令。 ——在编写源程序时经常会用到一些伪指令。这些伪指令是用来告诉汇编程序(汇编器)如何进行汇编的指令。机器码(.EXE)源程序(.ASM)汇编/连接(.obj)常用伪指令有:1、ORG 2000H——定义某段程序的开始——指出了程序在存储器中的起始地址。2、标号DB11H,21H——定义字节数——表示将DB后面几项数值存入指定的连续单元中,每个数据占一个字节单元,DB常用来定义数据常数项。3、标号DW1784H——定义一个字数——表示将DW后面的几项数据存入指定的连续单元中,每项数值占两个字节。DW常用来定义地址表。4、标号Bitwei——定义一位 如:KK BitP1.05、标号:EQUnn或表达式——为标号赋值 如:scl EQUP1.16、标号:DS表达式——预留存储区 如:ORG 100HMM DS67、END——程序结束标志
献花(0)
+1
(本文系太好学原创)