




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第4 4章章 指令系统指令系统4.1 4.1 概述概述4.2 4.2 寻址方式寻址方式4.3 4.3 指令系统指令系统4.1 4.1 概述概述 MCS-51 MCS-51单片机使用单片机使用7 7种寻址方式,有种寻址方式,有111111条指令。其中单字节指条指令。其中单字节指令令4949条,双字节指令条,双字节指令4545条,三字节指令条,三字节指令1717条,可分为以下条,可分为以下7 7类:类:(1 1)数据传送类指令)数据传送类指令2929条;条;(2 2)算术运算类指令)算术运算类指令2424条;条;(3 3)逻辑运算类指令)逻辑运算类指令2020条;条;(4 4)移位类指令)移位类
2、指令4 4条;条;(5 5)控制转移类指令)控制转移类指令1818条;条;(6 6)调用)调用/ /返回类指令返回类指令4 4条;条;(7 7)位操作类指令)位操作类指令1717条。条。 在介绍指令功能之前,先对指令系统中使用的符号作以简要说在介绍指令功能之前,先对指令系统中使用的符号作以简要说明。明。 Rn Rn:当前寄存器工作区中的寄存器,其中:当前寄存器工作区中的寄存器,其中n=0n=07 7; directdirect:内部数据存储器地址,指定一个内部:内部数据存储器地址,指定一个内部RAMRAM单元或一个专用寄存器;单元或一个专用寄存器; RiRi:通过:通过R1R1或或R0R0间接
3、寻址,指定数据存储器间接寻址,指定数据存储器RAMRAM中的一个单元;中的一个单元; #data#data:指令中的:指令中的8 8位立即数;位立即数; #data16#data16:指令中的:指令中的1616位立即数;位立即数; addr11addr11:1111位目的地址,用在位目的地址,用在ACALLACALL或或AJMPAJMP指令中,表示调用或转移地址;指令中,表示调用或转移地址; addr16addr16:1616位目的地址,用在位目的地址,用在LCALLLCALL或或LJMPLJMP指令中,表示调用或转换地址;指令中,表示调用或转换地址; relrel:8 8位偏移量,用补码表示
4、,用在位偏移量,用补码表示,用在SJMPSJMP等转移指令中;等转移指令中; bitbit:表示位寻址空间中的位地址,:表示位寻址空间中的位地址,8 8位,寻址范围为位,寻址范围为0 0FFHFFH。 4.2 4.2 寻址方式寻址方式 MCS-51MCS-51单片机有单片机有7 7种寻址方式。种寻址方式。1.1.立即寻址立即寻址是指操作数在指令操作数域直接给是指操作数在指令操作数域直接给出,因此也称为立即数,用符号出,因此也称为立即数,用符号“# #”说明。说明。例如指令例如指令 MOV AMOV A;#25H#25H其中其中25H25H是立即数。其功能是指立是立即数。其功能是指立即数即数25
5、H25H送入累加器送入累加器A A中,如图中,如图4.14.1所所示。示。PCPC+1M0010010101110100A00100101操作码立即数图4.1 立即寻址(MOV A, #25H)图4.2 立即寻址(MOV DPTR, #1856H)00011000MPCPC+10101011001110100操作码立即数高位立即数低位DPHDPL0001100001010110又如指令又如指令 MOV DPTR, #1856H MOV DPTR, #1856H 1616位立即数送地址寄存器位立即数送地址寄存器DPTRDPTR如图如图4.24.2所示。所示。DPHDPH表示表示DPTRDPTR的
6、高的高8 8位,位,DPLDPL表示低表示低8 8位。实际上,位。实际上,1616位立即数传送指令仅位立即数传送指令仅此一条。此一条。2.2.直接寻址直接寻址 是指操作数的地址直接在指令操作数域给出。是指操作数的地址直接在指令操作数域给出。 例如指令例如指令 MOV AMOV A,3CH3CH 其中其中3CH3CH为直接地址。指令功能是把内部为直接地址。指令功能是把内部RAMRAM中中3CH3CH单元的数据传送给单元的数据传送给累加器累加器A A,其示意如图,其示意如图4.34.3所示。所示。 由于直接地址只能用由于直接地址只能用8 8位数表示,因此仅限于寻址内部数据存储器位数表示,因此仅限于
7、寻址内部数据存储器RAMRAM和特殊功能寄存器,也是唯一能寻址特殊功能寄存器的寻址方式。和特殊功能寄存器,也是唯一能寻址特殊功能寄存器的寻址方式。图4.3 直接寻址(MOV A,3CH)RAM010101010011110011100101M操作码直接地址PCPC+13CHA010101013.3.寄存器寻址寄存器寻址 是指操作数在寄存器中,寄存器用符号表示。是指操作数在寄存器中,寄存器用符号表示。 例如指令例如指令 MOV AMOV A,R1R1 指令功能是把寄存器指令功能是把寄存器R1R1中的内容送入累加器中的内容送入累加器A A,其示意如图,其示意如图4.44.4所示。所示。 寄存器寻址
8、方式可访问寄存器寻址方式可访问4 4个寄存器工作区中的当前工作寄存器组个寄存器工作区中的当前工作寄存器组R0R0R7R7,也可用于累加器,也可用于累加器A A、通用寄存器、通用寄存器B B,地址寄存器,地址寄存器DPTRDPTR和进位位和进位位C C。其中。其中R0R0R7R7由指令操作码的低由指令操作码的低3 3位表示,位表示,A A、B B、DPTRDPTR以及以及C C隐含在指令操作码中隐含在指令操作码中 PCM11101001R1图4.4 寄存器寻址(MOV A, R1)操作码A11111111R1111111114.4.寄存器间接寻址寄存器间接寻址 是指寄存器中存放的是操作数的地址,
9、而操作数在存储器中。寄是指寄存器中存放的是操作数的地址,而操作数在存储器中。寄存器间接寻址用符号存器间接寻址用符号“”表示。表示。 例如指令例如指令 MOV AMOV A,R0R0 R0 R0中存放的是操作数地址,指令功能是把中存放的是操作数地址,指令功能是把R0R0中的内容所指定的中的内容所指定的RAMRAM单元中的数据送入累加器单元中的数据送入累加器A A中,其示意如图中,其示意如图4-54-5所示。可用作间接寻址所示。可用作间接寻址的寄存器有的寄存器有R0R0、R1R1、 DPTRDPTR和和SPSP。 图4.5 寄存器间接寻址(MOV A, R0)3CHA11111111R000111
10、100RAM000110005.5.相对寻址相对寻址 是以程序计数器是以程序计数器PCPC的当前值为基地址,加上指令中给出的偏移量的当前值为基地址,加上指令中给出的偏移量relrel作为作为转移目的地址。由于目的地址是相对于转移目的地址。由于目的地址是相对于PCPC中的当前值,所以称为相对地址。中的当前值,所以称为相对地址。PCPC的当前值是指取出该指令后的内容,即下一条指令地址。因此,转移目的地址的当前值是指取出该指令后的内容,即下一条指令地址。因此,转移目的地址可用如下公式表示:可用如下公式表示:转移目的地址转移目的地址= =下一条指令地址下一条指令地址 + rel+ rel偏移量偏移量r
11、elrel是一个带符号的是一个带符号的8 8位二进制数,表示范围为位二进制数,表示范围为-128-128+127+127。例如指令例如指令 JC 80HJC 80H若进位标志若进位标志Cy=0Cy=0,则,则PCPC值不变;若进位位值不变;若进位位Cy=1Cy=1,则以,则以PCPC当前值加偏移量当前值加偏移量80H80H后所得的值作为转移目的地址,其示意如图后所得的值作为转移目的地址,其示意如图4.64.6所示。所示。图4.6 相对寻址(JC 80H)0F82HPC1000HPC+11001HPC+21002HM1000000001110100操作码偏移量0F82HALU1002HPC 10
12、02H+FF80H 0F82H6.6.变址寻址变址寻址 是以地址寄存器是以地址寄存器DPTRDPTR或程序计数器或程序计数器PCPC作为基址寄存器,累加器作为基址寄存器,累加器A A作为变址寄存器,二者的内容相加,其和作为操作数地址。这种寻址作为变址寄存器,二者的内容相加,其和作为操作数地址。这种寻址方式只能访问程序存储器。方式只能访问程序存储器。 例如例如 MOVC AMOVC A,A+DPTRA+DPTR 指令功能为指令功能为DPTRDPTR中的内容与中的内容与A A中的内容相加,其和所指示的单元中的内容相加,其和所指示的单元的数送入累加器的数送入累加器A A,如图,如图4.74.7所示。
13、所示。 图4.7 变址寻址(MOV A, A+DPTR)10010011MA DPHDPLPC1000HPC+11001H操作码8888H100010001000100000000000ALU7 7位寻址位寻址 是指对一些内部是指对一些内部RAMRAM和特殊功能寄存器进行位操作时的寻址方和特殊功能寄存器进行位操作时的寻址方式。在指令操作数域直接给出该位的地址。位地址与字节直接寻式。在指令操作数域直接给出该位的地址。位地址与字节直接寻址的形式一样,主要由操作码来区分。址的形式一样,主要由操作码来区分。 例如指令例如指令 ORL CORL C,50H50H 指令功能是把位累加器指令功能是把位累加器
14、CyCy中的内容与中的内容与50H50H所指示的位单元中的所指示的位单元中的内容进行内容进行“或或”运算,其结果在位累加器运算,其结果在位累加器CyCy中。中。 以上以上7 7种寻址方式,概括种寻址方式,概括如表如表4.14.1所示。所示。 序号寻址方式使用的变量寻址空间1立即寻址 程序存储器2直接寻址 内部RAM和特殊功能寄存器3寄存器寻址R0R7、A、B、C、DPTR 4寄存器间址R0、R1、SP 内部RAMR0、R1、DPTR外部RAM5相对寻址PC+偏移量程序存储器6变址寻址A+DPTR、A+PC数据程序存储器7位寻址 内部RAM和特殊功能寄存器的位空间表4.1 MCS-51寻址方式
15、4.3 指令系统 在在MCS-51MCS-51单片机使用了单片机使用了4242种助记符,与种助记符,与7 7种寻址方式组合,构成种寻址方式组合,构成111111条指令。下面分为条指令。下面分为7 7 类予以介绍。类予以介绍。4.3.1 4.3.1 数据传送类指令数据传送类指令4.3.2 4.3.2 算术运算类指令算术运算类指令4.3.3 4.3.3 逻辑运算类指令逻辑运算类指令4.3.4 4.3.4 移位类指令移位类指令4.3.5 4.3.5 控制转移类指令控制转移类指令4.3.6 4.3.6 调用调用/ /返回类指令返回类指令4.3.7 4.3.7 位操作类指令位操作类指令4.3.14.3.
16、1数据传送类指令数据传送类指令 共有共有2929条,其中包括条,其中包括8 8位、位、1616位数据传送指令、交位数据传送指令、交换指令、查表指令以及堆栈操作指令等。这类指令除换指令、查表指令以及堆栈操作指令等。这类指令除向累加器向累加器A A传送数据,影响奇传送数据,影响奇/ /偶标志偶标志P P之外,不影响其之外,不影响其它状态标志。它状态标志。1. 1. 内部内部8 8位数据传送指令位数据传送指令内部内部8 8位数据传送指令主要用于内部位数据传送指令主要用于内部RAMRAM、寄存器之间的传、寄存器之间的传送,共有送,共有1515条,如表条,如表4.24.2所示,可分为所示,可分为4 4种
17、。种。(1)(1)累加器传送指令有累加器传送指令有4 4条:条:MOV A,Rn ;A(Rn)MOV A, direct ;A(direct)MOV A, R ;A(R1)MOV A, #data ;Adata例如指令例如指令 MOV A, R4 MOV A, R4 (2) (2) 寄存器传送指令有寄存器传送指令有3 3条:条:MOV Rn,A ;RnA)MOV Rn,direct ;Rndirect)MOV Rn,#data ;Rndata例如指令例如指令 MOV R5, 72H MOV R5, 72H (3) (3) 直接地址单元传送指令有直接地址单元传送指令有5 5条;条;MOV dir
18、ect, A ;direct(A)MOV direct, Rn ;direct(Rn)MOV direct, Ri ;direct(Ri)MOV direct,direct2 ;direct1(direct2)MOV direct, #data ;directdata例如指令例如指令 MOV 80HMOV 80H,75H75H(4) (4) 间接地址单元传送指令有间接地址单元传送指令有3 3条;条;MOV Ri, A ;(Ri)(A)MOV Ri, direct ;(Ri)(direct)MOV Ri, #data ;(Ri)data例如指令例如指令 MOV MOV R0R0,#0FH#0FH
19、 2. 16 2. 16位数据传送指令位数据传送指令MOV DPTR,#dat16 ;DPTRdata161616位数据传送指令仅此一条,如表位数据传送指令仅此一条,如表3.33.3所示,是把所示,是把1616位的立即数位的立即数传送到地址寄存器传送到地址寄存器DPTRDPTR中,其中高中,其中高8 8位送位送DPHDPH中,低中,低8 8位送位送DPLDPL中,中,如图如图4.24.2所示。所示。1616位传送类指令对状态标志没有影响。位传送类指令对状态标志没有影响。3. 3. 外部数据传送指令外部数据传送指令MOVX AMOVX A,Ri ;A(Ri)MOVX MOVX Ri,A ;(Ri
20、)(A)MOVX AMOVX A,DPTR ;A (DPTR)MOVX MOVX DPTR,A ;(DPTR)(A) 其功能是在累加器与外部数据存储器之间进行数据传送。如果用其功能是在累加器与外部数据存储器之间进行数据传送。如果用RiRi间接寻址,其范围为外部数据存储器的低间接寻址,其范围为外部数据存储器的低256256个字节单元。如果用个字节单元。如果用DPTRDPTR间接寻址,其范围是外部数据存储器的间接寻址,其范围是外部数据存储器的64KB64KB单元。外部数据传送指令单元。外部数据传送指令如表如表4.44.4所示。所示。4.4.交换指令交换指令XCH AXCH A,Rn Rn ;(;(
21、A A)(RnRn)XCH AXCH A,direct direct ;(;(A A)(directdirect)XCH AXCH A,Ri Ri ;(;(A A)(RiRi)XCHD AXCHD A,Ri Ri ;(;(A A)3 30 0(RiRi)3 30 0SWAP A SWAP A ;(;(A A)3 30 0 (A A)7 74 4 如表如表4.54.5所示,分为所示,分为3 3种。第一种是累加器种。第一种是累加器A A与工作寄存器与工作寄存器RnRn或直接或直接地址单元或地址单元或RiRi所指示的间接地址单元进行所指示的间接地址单元进行8 8位数据交换,第二种是累加位数据交换,第
22、二种是累加器器A A与与RiRi所指示的间接地址单元进行低半字节交换,第三种是累加器所指示的间接地址单元进行低半字节交换,第三种是累加器A A中的高半字节与低半字节交换。中的高半字节与低半字节交换。 例如指令例如指令 XCH AXCH A,R7 R7 ;累加器;累加器A A与寄存器与寄存器R7R7交换交换 又如指令又如指令 XCHD AXCHD A,R1 R1 ;累加器;累加器A A中的低中的低4 4位与位与R1R1中的内容所指中的内容所指示单元中的低示单元中的低4 4位交换。位交换。5.查表指令查表指令MOVC A,A+DPTR ;A (A)+(DPTR)MOVC A,A+PC ;A (A)
23、+(PC) 采用变址寻址方式,其中采用变址寻址方式,其中A A为变址寄存器,为变址寄存器,DPTRDPTR和和PCPC为基址寄存为基址寄存器。其功能是把器。其功能是把A A中内容与中内容与DPTRDPTR或或PCPC中的内容之和所指示单元中的数中的内容之和所指示单元中的数据送入累加器据送入累加器A A中,查表指令如表中,查表指令如表4.54.5所示。所示。 6.6.堆栈操作指令堆栈操作指令 PUSH direct PUSH direct ;SP(SP)+1SP(SP)+1,(SP)(direct)(SP)(direct) POP direct POP direct ;direct(SP)dir
24、ect(SP),SP(SP)-1SP(SP)-1 堆栈操作指令共有两条,如表堆栈操作指令共有两条,如表4.64.6所示。一条是压栈指令所示。一条是压栈指令PUSHPUSH,也称为进栈;另一条弹栈指令也称为进栈;另一条弹栈指令POPPOP,也称为出栈。这两条指令采用直,也称为出栈。这两条指令采用直接寻址方式,压栈时指针接寻址方式,压栈时指针SP+1SP+1,数据进栈;弹栈时数据出栈,指针,数据进栈;弹栈时数据出栈,指针SP-1SP-1。堆栈操作指令只能对字节数进行操作。堆栈操作指令只能对字节数进行操作。例如指令例如指令 PUSH DPL PUSH DPL ;DPTRDPTR低低8 8位地址压栈位
25、地址压栈 PUSH DPH PUSH DPH ;DPTRDPTR高高8 8位地址压栈位地址压栈又如指令又如指令 POP R1 POP R1 ;堆栈顶部数据弹出,送;堆栈顶部数据弹出,送R1R14.3.2算术运算类指令 这类指令共有这类指令共有2424条,其中包括加法、减法、加条,其中包括加法、减法、加1 1,减,减1 1以及乘法以及乘法除法运算指令,对状态标志位均有影响,如表除法运算指令,对状态标志位均有影响,如表4.74.7所示。所示。1 1加法指令加法指令ADD A,Rn ;A (A)+(Rn)ADD A,direct ;A (A)+(direct)ADD A,Ri ;A (A)+(Ri)
26、ADD A,#data ;A (A)+data带进位的加法指令带进位的加法指令ADD A,Rn ;A (A)+(Rn)+(C)ADD A,direct ;A (A)+(direct)+(C)ADD A,Ri ;A (A)+(Ri)+(C)ADD A,#data ;A (A)+data+(C)用于的把源操作数与累加器中的数相加,结果在累加器中。带进位加法指令用于的把源操作数与累加器中的数相加,结果在累加器中。带进位加法指令还要再加上进位位。运算结果影响还要再加上进位位。运算结果影响PSWPSW中的中的CyCy、OVOV、ACAC和和P P。CyCy:当:当D D7 7有进位时有进位时CyCy置置
27、1 1,否则清,否则清0 0。OVOV:当算术运算有溢出时:当算术运算有溢出时OVOV置置1 1,否则清,否则清0 0。ACAC:当:当D D3 3有进位时有进位时ACAC置置1 1,否则清,否则清0 0。P P:当累加器:当累加器A A中中“1 1”的个数为奇数时的个数为奇数时P P置置1 1,否则清,否则清0 0。【例例4-14-1】试编写计算试编写计算6655H+11FFH6655H+11FFH的程序。的程序。解:两个解:两个1616位数据相加可分为两步,先对低位数据相加可分为两步,先对低8 8位相加,再对高位相加,再对高8 8位用带进位加位用带进位加法指令相加。设结果存入法指令相加。设
28、结果存入51H51H和和50H50H单元中,程序设计如下:单元中,程序设计如下: MOV AMOV A,#55H#55H ADD A ADD A,#0FFH#0FFH MOV 50H MOV 50H,A A MOV A MOV A,#66H#66H ADDC A ADDC A,#11H#11H MOV 51H MOV 51H,A A 2 2带借位的减法指令带借位的减法指令SUBB ASUBB A,Rn Rn ;AA(A A)- -(RnRn)- -(c c)SUBB ASUBB A,direct direct ;AA(A A)- -(directdirect)- -(c c)SUBB ASUB
29、B A,Ri Ri ;AA(A A)- -(RiRi)- -(c c)SUBB ASUBB A,#data #data ;AA(A A)-data-data-(C C) 在在MCS-51MCS-51单片机中只有带进位减法指令,用累加器中单片机中只有带进位减法指令,用累加器中的数减去源操作数后,再减进位位,结果在累加器中。的数减去源操作数后,再减进位位,结果在累加器中。运算结果影响运算结果影响PSWPSW中的中的CyCy、OVOV、ACAC和和P P。【例例4-24-2】 试编写计算试编写计算EE33H-ADE0HEE33H-ADE0H的程序。的程序。解:在进行上述解:在进行上述1616位减法运
30、算时,也要分成两步进行。先进行低位减法运算时,也要分成两步进行。先进行低8 8位运算,若产生借位,则再在高位运算,若产生借位,则再在高8 8位运算时一起减去,程序设计如下:位运算时一起减去,程序设计如下:CLA C CLA C ;进位位;进位位C C清清0 0MOV AMOV A,#33H #33H ;A33HA33HSUBB ASUBB A,#E0H #E0H ;A(A)-E0H-(C)A(A)-E0H-(C)MOV 50HMOV 50H,A A ;50H (A)50H (A)MOV AMOV A,#EEH #EEH ;A EEHA EEHSUBB ASUBB A,#A0H #A0H ;A
31、(A)-A0H-(C)A (A)-A0H-(C)MOV 51HMOV 51H,A A ;51H(A)51H(A) 3. 3. 加加1 1指令指令INC A ;A(A)+1INC Rn ;Rn(Rn)+1INc direct ;direct(direct)+1INC Ri ;(Ri)(Ri)+1INC DPTR ;DPTR(DPTR)+1加加1 1指令是给目的地址单元中的数加指令是给目的地址单元中的数加1 1,结果仍在原来地址单元。加,结果仍在原来地址单元。加1 1指令对状态标志寄存器指令对状态标志寄存器PSWPSW没有影响。没有影响。4. 4. 减减1 1指令指令DEC A ;A(A)-1DE
32、C Rn ;Rn(Rn)-1DEC direct ;direct(direct)-1DEC Ri ;(Ri)(Ri)-1减减1 1指令是把目的地址单元中的数减指令是把目的地址单元中的数减1 1,结果仍在原来地址单元中。,结果仍在原来地址单元中。减减1 1指令对状态标志寄存器指令对状态标志寄存器PSWPSW没有影响。没有影响。 5. 5. 十进制调整指令十进制调整指令 DA ADA A 是一条单字节指令,也称为是一条单字节指令,也称为BCDBCD码修正指令,对码修正指令,对BCDBCD码的加法运算结果进码的加法运算结果进行修正。行修正。 当低半字节的值当低半字节的值99或或AC=1AC=1时,低
33、半字节加时,低半字节加6 6; 当高半字节的值当高半字节的值99或或C=1C=1时,高半字节加时,高半字节加6 6 在使用时只要在在使用时只要在BCDBCD码加法运算指令的后面跟一条十进制调整指令就可码加法运算指令的后面跟一条十进制调整指令就可以了,但不能用于减法运算。以了,但不能用于减法运算。6. 6. 乘法指令乘法指令 MUL AB MUL AB ;BABA(A A)(B B) 是一条单字节指令,是把累加器是一条单字节指令,是把累加器A A和寄存器和寄存器B B中的两个无符号数相乘,结中的两个无符号数相乘,结果的低果的低8 8位在位在A A中,高中,高8 8位在位在B B中。影响状态标志中
34、。影响状态标志OVOV和和CyCy。 OVOV:当乘积结果大于:当乘积结果大于0FFH0FFH时时OVOV置置1 1,否则清,否则清0 0; CyCy:总是清:总是清0 0。7. 7. 除法指令除法指令 DIV ABDIV AB 是一条单字节指令,是把累加器是一条单字节指令,是把累加器A A中的无符号数中的无符号数除以寄存器除以寄存器B B中的无符号数。结果的商在中的无符号数。结果的商在A A中,余数在中,余数在B B中。影响状态标志中。影响状态标志OVOV和和CyCy。 OVOV:若除数为:若除数为0 0,OVOV置置1 1,否则清,否则清0 0。 CyCy:总是清:总是清0 0。 4.3.
35、3、逻辑运算类指令 共有共有2020条,如表条,如表4.84.8所示,包括所示,包括“与与”、“或或”、“异或异或”及累加及累加器清器清“0 0”、取反等。除改变累加器、取反等。除改变累加器A A中的内容的指令对奇中的内容的指令对奇/ /偶标志偶标志P P有影有影响外,不影响其它状态标志。响外,不影响其它状态标志。1 1逻辑逻辑“与与”运算指令运算指令ANL A,Rn ;A(A)(Rn)ANL A,direct ;A(A)(direct)ANL A,Ri ;A(A)(Ri)ANL A,#data ;A(A)dataANL direct,A ;direct(direct)(A)ANL direc
36、t,#data ;direct(direct) data 有有6 6条,把目的操作数与源操作数接位条,把目的操作数与源操作数接位“与与”,结果在目的地址单,结果在目的地址单元中;可用来屏蔽掉字节数据中的某些位。元中;可用来屏蔽掉字节数据中的某些位。【例例4-34-3】把累加器把累加器A A中的低中的低4 4位数据送外部数据存储器的位数据送外部数据存储器的2580H2580H单元中。单元中。 解:用解:用0FH0FH屏蔽掉高屏蔽掉高4 4位,然后传送,程序设计如下:位,然后传送,程序设计如下:MOV DPTRMOV DPTR,#2580H#2580HANL AANL A,#0FH#0FHMOVX
37、 DPTRMOVX DPTR,A A2 2逻辑逻辑“或或”运算指令运算指令ORL AORL A,Rn Rn ;AA(A A)(RnRn)ORL AORL A,direct direct ;AA(A A)(directdirect)ORL AORL A,Ri Ri ;AA(A A)(RiRi)ORL AORL A,#data #data ;AA(A A)datadataORL directORL direct,A A ;directdirect(directdirect)(A A)ORL directORL direct,#data #data ;directdirect(directdirec
38、t)datadata 有有6 6条,把目的操作数与源操作数按位条,把目的操作数与源操作数按位“或或”,结果在目的地址单元,结果在目的地址单元中;可用来把两个操作数中的中;可用来把两个操作数中的“1 1”合并到一个操作数中,或者说把目的操合并到一个操作数中,或者说把目的操作数中的某些位置作数中的某些位置1 1。3. 3. 逻辑逻辑“异或异或”运算指令运算指令XRL A,Rn ;A(A)(Rn)XRL A,direct ;A(A)(direct)XRL A,Ri ;A(A)(Ri)XRL A,#data ;A(A)dataXRL direct,A ;direct(direct)(A)XRL dir
39、ect,#data ;direct(direct)data有有6 6条,把目的操作数与源操作数按位条,把目的操作数与源操作数按位“异或异或”,结果在目的地,结果在目的地址单元中。址单元中。例如累加器例如累加器A A中的内容为中的内容为1100001111000011,寄存器,寄存器R7R7中的内容为中的内容为1010101010101010,执行指令,执行指令XRL A,R7后,累加器后,累加器A A中的内容为中的内容为0110100101101001。 4. 4. 累加器清累加器清0 0指令指令CLR A ;A05. 5. 累加器取反指令累加器取反指令CPL A ;A( )A4.3.4 移位
40、类指令 共有共有4 4条,对累加器条,对累加器A A中的数据进行移位操作,如表中的数据进行移位操作,如表4.94.9所示,除带进所示,除带进位的移位指令对进位位位的移位指令对进位位C C和奇和奇/ /偶标志位偶标志位P P有影响外,不影响其它状态标志位。有影响外,不影响其它状态标志位。1 1不带进位循环左移指令不带进位循环左移指令RL A RL A ;ACC.(i+1)ACC.i, ACC.0ACC.7ACC.(i+1)ACC.i, ACC.0ACC.72 2带进位循环左移指令带进位循环左移指令RLC A RLC A ;ACC.(i+1)ACC.i, ACC.0Cy, CyACC.7ACC.(
41、i+1)ACC.i, ACC.0Cy, CyACC.73. 3. 不带进位循环右移指令不带进位循环右移指令RR A RR A ;ACC.i ACC.(i+1), ACC.7ACC.0ACC.i ACC.(i+1), ACC.7ACC.04.4.带进位循环右移指令带进位循环右移指令RRC A RRC A ;ACC.iACC.(i+1), ACC.7Cy, CyACC.0ACC.iACC.(i+1), ACC.7Cy, CyACC.0移位指令用来把累加器移位指令用来把累加器A A中的数据循环左移一位或者右移一位。对于带中的数据循环左移一位或者右移一位。对于带进位的循环移位指令,进位位进位的循环移位
42、指令,进位位CyCy的状态由移入的数位决定。的状态由移入的数位决定。 4.3.5 控制转移类指令 共共1818条,包括无条件转移指令,条件转移指令,比较转移条,包括无条件转移指令,条件转移指令,比较转移指令及计数转移指令等,如表指令及计数转移指令等,如表4.104.10所示。其功能是无条件或者所示。其功能是无条件或者有条件地控制程序转移到目的地址单元。有条件地控制程序转移到目的地址单元。 1 1无条件转移指令无条件转移指令 无条件转移指令共有无条件转移指令共有4 4条。条。(1 1)LJMP daar16 LJMP daar16 ;PCaddrPCaddr1616 三字节直接寻址的无条件转移指
43、令,转移地址在指令操作三字节直接寻址的无条件转移指令,转移地址在指令操作域直接给出,寻址范围为域直接给出,寻址范围为64K64K(0000H0000HFFFFHFFFFH),所以称为长转),所以称为长转移指令。移指令。(2 2)AJMP addrAJMP addr1111 ;PCPC10100 0 addr addr1111 PC高5位 PC低11位高3位8位 第一字节 第二字节操作码地址域图4.8 装入11转移地址 双字节直接寻址的无条件转移指令,指令操作数域给出双字节直接寻址的无条件转移指令,指令操作数域给出1111位的转地位的转地址。它把址。它把PCPC高高5 5位与操作码的高位与操作码
44、的高3 3位以及指令第二字节并在一起,构成位以及指令第二字节并在一起,构成1616位的转移址址,如图位的转移址址,如图4.84.8所示,常称为绝对转移指令。所示,常称为绝对转移指令。寻址范围为该指令地址加寻址范围为该指令地址加2 2后,向下的后,向下的2K2K区域,其指令码如下:区域,其指令码如下:A10 a9 a8 0 0 0 0 1 a7 a6 a5 a4 a3 a2 a1 a0(3 3)SJMP rel SJMP rel ;PC(PC)+relPC(PC)+rel 双字节相对寻址的无条件转移指令,第二字节给出转移地址的偏移双字节相对寻址的无条件转移指令,第二字节给出转移地址的偏移量量re
45、lrel(带符号的(带符号的8 8位二位制补码数),寻址范围为位二位制补码数),寻址范围为256256(-80H-80H+7FH+7FH)。转移地址为程序计数器。转移地址为程序计数器PCPC的当前值加偏移量,因此称为相对短转移指的当前值加偏移量,因此称为相对短转移指令。令。 在用汇编语言编程时,相对地址的偏移量在用汇编语言编程时,相对地址的偏移量relrel可以用目的地址的标可以用目的地址的标号(符号地址)表示,程序汇编时自动计算偏移量。号(符号地址)表示,程序汇编时自动计算偏移量。 例如指令例如指令 HEREHERE:SJMP HERESJMP HERE 或或 HEREHERE:SJMP $
46、SJMP $ $代表本指令地址。代表本指令地址。(4 4)JMP A+DPTR JMP A+DPTR ;PC(A)+(DPTR)PC(A)+(DPTR) 单字节变址寻址的无条件转移指令,累加器单字节变址寻址的无条件转移指令,累加器A A中存放的是相对偏移中存放的是相对偏移量,量,DPTRDPTR中存放的是变址基值,二者之和为转移地址,寻址范围为中存放的是变址基值,二者之和为转移地址,寻址范围为64K64K(0000H0000HFFFFHFFFFH),因此称为相对长转移指令。),因此称为相对长转移指令。 2 2条件转移指令条件转移指令是根据特定的条件控制程序的转移,共有是根据特定的条件控制程序的
47、转移,共有4 4条,均是相对寻址的双字条,均是相对寻址的双字节指令。转移地址为程序计数器节指令。转移地址为程序计数器PCPC的当前值加偏移量的当前值加偏移量relrel。JZ rel JZ rel ;若(;若(A A)=0,=0,则则PCPC(PCPC)+rel+relJNZ rel JNZ rel ;若(;若(A A)0 0,则,则PC(PC)+relPC(PC)+relJC rel JC rel ;若;若Cy=1Cy=1,则,则PCPC(PCPC)+rel+relJNC rel JNC rel ; 若若Cy=0Cy=0,则,则PCPC(PCPC)+rel+rel3. 3. 位测试转移指令位
48、测试转移指令对位地址单元进行测试,根据测试结果控制程序的转移,共有对位地址单元进行测试,根据测试结果控制程序的转移,共有3 3条,条,均是相对寻址的三字节指令。其中第二字节是位地址,第三字节是偏移量均是相对寻址的三字节指令。其中第二字节是位地址,第三字节是偏移量。转移地址为程序计数器。转移地址为程序计数器PCPC的当前值加偏移量。的当前值加偏移量。JB bit, rel JB bit, rel ;若;若(bit)=1, (bit)=1, 则则PCPC(PCPC)+rel+relJNB bit, rel JNB bit, rel ;若;若(bit)=0,(bit)=0,则则PCPC(PCPC)+
49、rel+relJBC bit, rel JBC bit, rel ;若;若(bit)=1(bit)=1,则,则PCPC(PCPC)+rel+rel,且,且bit0bit0。 4. 4. 比较转移指令比较转移指令是根据两数比较的结果决定程序是否转移,共有是根据两数比较的结果决定程序是否转移,共有4 4条,均是相对寻址条,均是相对寻址的三字节指令。比较相等时,程序顺序执行,不相等时转移。的三字节指令。比较相等时,程序顺序执行,不相等时转移。CJNE A, #data, rel CJNE A, #data, rel ;若(;若(A A)datadata,则,则PCPC(PCPC)+rel +rel
50、CJNE Rn, #data,rel CJNE Rn, #data,rel ;若(;若(RnRn)datadata,则,则PCPC(PCPC)+rel+relCJNE Ri, #data, rel CJNE Ri, #data, rel ;若;若(Ri)data(Ri)data,则,则PCPC(PCPC)+rel+relCJNE A, irect, rel CJNE A, irect, rel ;若;若(A) (direct)(A) (direct),则,则PCPC(PCPC)+rel+rel当目的地址单元中的数小于源地址单元中的数据时,进位位当目的地址单元中的数小于源地址单元中的数据时,进位
51、位CyCy置置1 1,否则清否则清0 0,不影响其它状态标志位。,不影响其它状态标志位。 5.5.计数转移指令计数转移指令对指定单元减对指定单元减1 1计数,结果不为零时转移,否则顺序执行,共计数,结果不为零时转移,否则顺序执行,共有有2 2条,均是相对寻址的转移指令。条,均是相对寻址的转移指令。DJNZ Rn, rel DJNZ Rn, rel ;Rn(Rn)-1Rn(Rn)-1,若,若(Rn) 0(Rn) 0,则,则PC(PC)+relPC(PC)+relDJNZ direct,relDJNZ direct,rel;direct(direct)-1direct(direct)-1,若,若(
52、direct) 0,(direct) 0,则则PC(PC)+relPC(PC)+rel【例例4.44.4】设片内设片内RAMRAM的的50H50H和和60H60H单元中分别存放有两个无符单元中分别存放有两个无符号数,找出最大者,送号数,找出最大者,送70H70H单元。单元。 解:用比较转移和有进位转移指令共同判断两数的大小,程序设计解:用比较转移和有进位转移指令共同判断两数的大小,程序设计如下:如下: MOV AMOV A,50H50H CJNE A CJNE A,60H60H,LI LI ;比较,不相等转移;比较,不相等转移 MOV 70MOV 70,A A SJMP HH SJMP HH
53、LL LL:JC MM JC MM ;小于转移;小于转移 MOV 70HMOV 70H,A A SJMP HH SJMP HH MM MM:MOV 70HMOV 70H,60H60H HH HH:6. 6. 空操作指令空操作指令 NOPNOP 单字节指令,其功能是取指令,译码,不进行任何操作(即空操作)单字节指令,其功能是取指令,译码,不进行任何操作(即空操作)而转下一条指令。而转下一条指令。4.3.6 调用/返回类指令 调用指令在主程序中使用,执行时保护断点,使程序转向子程序调用指令在主程序中使用,执行时保护断点,使程序转向子程序入口;返回指令在子程序的末尾使用,其作用是返回到主程序中原来被
54、入口;返回指令在子程序的末尾使用,其作用是返回到主程序中原来被断开的地方,即断点。调用断开的地方,即断点。调用/ /返回类指令如表返回类指令如表4.114.11所示。所示。1.1.调用指令调用指令(1 1)LCALL addrLCALL addr1616 ;(;(PCPC)压栈,)压栈,PCaddrPCaddr1616直接寻址的三字节指令,使程序计数器直接寻址的三字节指令,使程序计数器PCPC的当前值压栈,子程序入的当前值压栈,子程序入口地址口地址ddrddr1616送送PCPC。寻址范围为。寻址范围为64K64K(0000H0000HFFFFHFFFFH),称为长调用指令),称为长调用指令。
55、指令执行过程如下:。指令执行过程如下:SP(SP)+1SP(SP)+1(SP)(PC)(SP)(PC)7 70 0SP(SP)+1SP(SP)+1(SP)(PC)(SP)(PC)15158 8PCaddrPCaddr1616 (2 2)ACALL addr11 ACALL addr11 ;(;(PCPC)压栈,)压栈,PCPC10100 0addraddr1111 直接寻址的双字节指令,使程序计数器直接寻址的双字节指令,使程序计数器PCPC的当前值压栈,的当前值压栈,1111位的子位的子程序入口地址程序入口地址addraddr1111送送PCPC的低的低1111位,与其高位,与其高5 5位并成位并成1616位地址,常称为绝位地址,常称为绝对调用指令,指令格式与绝对转移指令对调用指令,指令格式与绝对转移指令AJMPAJMP类似,寻址范围为类似,寻址范围为2K2K,其指,其指令码如下:令码如下:a10 a9 a8 1 0 0 0 1 a7 a6 a5 a4 a3 a2 a1 a0指令执行过程如下:指令执行过程如下:SP(SP)+1SP(SP)+1(SP)(PC)(SP)(PC)7 70 0SP(SP)+1SP(SP)+1(SP)(PC)(SP)(PC)15158 8PCaddrPCaddr11112. 2. 返
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度购房合同因中介误导导致的合同解除与赔偿执行合同
- 二零二五年度企业信用评级认证服务协议
- 2025年度海洋资源勘探个人劳务用工合同书
- 二零二五年度货车司机驾驶安全教育与责任保险协议
- 二零二五年度金融科技公司干股虚拟股分红及投资协议
- 二零二五年度汽车美容店汽车美容品牌授权合同
- 2025年度民族风情餐厅承包运营合同
- 二零二五年度土地流转与农村社会保障体系建设协议
- 2025年度环保产业员工劳动关系解除协议
- 二零二五年度黄金投资俱乐部会员招募合同
- 重庆市属事业单位招聘真题2024
- 牛羊定点屠宰厂项目可行性研究报告写作模板-申批备案
- 2025年黑龙江农业职业技术学院单招职业倾向性测试题库及答案1套
- 某工程通风空调工程施工方案
- 辽宁省五校联考2024-2025学年高二上学期期末英语试卷(解析版)
- 2024年中考模拟试卷数学(新疆卷)
- 2025年湖南食品药品职业学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 2025年泰山职业技术学院高职单招数学历年(2016-2024)频考点试题含答案解析
- 近岸海上柔性光伏支架结构研究
- 2025年广西投资集团有限公司招聘笔试参考题库含答案解析
- 2024年华北电力大学辅导员及其他岗位招聘考试真题
评论
0/150
提交评论