版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第3章章 MCS-51系列单片机的系列单片机的指令系统指令系统n3.1 3.1 指令系统简介指令系统简介n3.2 3.2 寻址方式寻址方式n3.3 3.3 数据传送类指令数据传送类指令n3.4 3.4 算术运算类指令算术运算类指令n3.5 3.5 逻辑运算及移位类指令逻辑运算及移位类指令n3.6 3.6 控制转移类指令控制转移类指令n3.7 3.7 位操作类指令位操作类指令31 指令系统概述指令系统概述 指令是规定计算机进行某种操作的命令。一台计算机所能执行的指令集合称为该计算机的指令系统。n311 指令概述 计算机内部只识别二进制数。因此,能被计算机直接识别、执行的指令是使用二进制编码表示
2、的指令,这种指令被称为机器语言指令。 MCS-51系列单片机指令系统共有111条指令,按功能划分,可分为五大类:1)数据传送类指令(29条);2)算术运算类指令(24条); 3)逻辑运算及移位类指令(24条);4)控制转移类指令(17条);5)位操作类指令(17)。312 指令格式指令格式n一条完整的指令格式如下:n标号: 操作码 操作数 ;注释n标号标号是该指令的起始地址,是一种符号地址。n标号可以由18个字符组成,第一个字符必须是字母,其余字符可以是字母、数字或其他特定符号。标号后跟分界符“:”。n操作码指令的助记符。它规定了指令所能完成的操作功能。n操作数指出了指令的操作对象。操作数可以
3、是一个具体的数据,也可以是存放数据的单元地址,还可以是符号常量或符号地址等。n多个操作数之间用逗号“,”分隔。 注释为了方便阅读而添加的解释说明性的文字, 用“;”开头。n313 指令中常用符号说明指令中常用符号说明 Rn 当前选中的工作寄存器组中的寄存器R0R7之一, 所以n=07。nRi 当前选中的工作寄存器组中可作地址指针的寄存器R0、R1,所以i=0、1。n#data 8位立即数。n#data16 16位立即数。ndirect 内部RAM的8位地址。即可以是内部RAM的低128个单元地址,也可以是特殊功能寄存器的单元地址或符号。在指令中direct表示直接寻址方式。naddr11 11
4、位目的地址,只限于在ACALL和AJMP 指令中使用。naddr16 16位目的地址,只限于在LCALL和LJMP 指令中使用。 re l补码形式表示的8位地址偏移量,在相对转移指令中使用。nbit 表示片内RAM位寻址区或可位寻址的特殊功能寄存器的位地址;n 间接寻址方式中间址寄存器的前缀标志;nC 进位标志位,它是布尔处理机的累加器,也称之为位累加器;n/ 加在位地址的前面,表示对该位先求反再参与操作,但不影响该位的值;n(x)由x指定的寄存器或地址单元中的内容;n(x)由x所指寄存器的内容作为地址的存储单元的内容;n$ 表示本条指令的起始地址;n 表示指令操作流程,将箭头右边的内容送到箭
5、头左边的单元中。32 寻址方式寻址方式n寻址就是寻找操作数的地址,寻址方式则指出寻找操作数地址的方式方法。 MCS-51系列单片机提供了七种寻址方式。n 321 立即寻址立即寻址n所谓立即寻址就是在指令中直接给出操作数。通常把出现在指令中的操作数称为立即数。为了与直接寻址指令中的直接地址相区别,在立即数前面加“#”标志。例如:n MOV A,#3AHn其中3AH就是立即数,该指令功能是将3AH这个数本身送入累加器A中。 n322 直接寻址直接寻址n在指令中直接给出操作数地址,这就是直接寻址方式。例如:nMOV A,3AHn其中3AH就是表示直接地址, 其操作示意图如图3-1所示, 直接寻址方式
6、可访问以下 存储空间:n内部RAM低128个字节单元。n特殊功能寄存器。应注意:直接寻址是访问特殊功能寄存器的唯一方法。n323 寄存器寻址寄存器寻址n寄存器寻址即寄存器的内容就是操作数。因此在指令的操作数位置上指定了寄存器就能得到操作数。MOV A,R0nMOV R2,A 前一条指令是将R0寄存器的内容送到累加器A中。 后一条是把累加器A中的内容传送到R2寄存器中。n采用寄存器寻址方式的指令都是一字节的指令,可以作寄存器寻址的寄存器有:R0R7、A、AB寄存器对和数据指针DPTRn324 寄存器间接寻址寄存器间接寻址n所谓寄存器间接寻址就是以寄存器中的内容作为RAM地址,该地址中的内容才是操
7、作数。n寄存器前加寄存器前加“”标志,表示间接寻址。标志,表示间接寻址。n例如:MOV A,R0n其操作示意图如图3-2所示。n 此时R0寄存器的内容3AHn是操作数地址,内部RAM的n3AH单元的内容65H才是操n作数,把该操作数传送到n累加器A中,结果A=65H。 能用于间接寻址的寄存器有能用于间接寻址的寄存器有R0R0,R1R1,DPTRDPTR,SPSP。其中其中R0R0、R1R1必须是工作寄存器组中的寄存器。必须是工作寄存器组中的寄存器。SPSP仅用于堆栈操作。仅用于堆栈操作。间接寻址可以访问的存储器空间包括内部RAM和外部RAM。内部RAM的低128个单元采用R0、R1作为间址寄存
8、器外部RAM:一是采用R0、R1作为间址寄存器,可寻址256个单元。二是采用16位的DPTR作为间址寄存器,可寻址外部RAM的整个64KB地址空间。例如:例如: MOV R0,A ;内部;内部RAM(R0)A (a) (b) MOVX DPTR,A;外部;外部RAM(DPTR)A其指令操作过程示意图如上图(其指令操作过程示意图如上图(b)所示)所示。 其指令操作过程示意图如下图(其指令操作过程示意图如下图(a a)所示。)所示。片外片外RAM2000HDPTR30HA2000H30H片内片内RAM30HR034HA30H34Hv对于52子系列的单片机,其内部RAM是256个字节,其高128字节
9、地址与特殊功能寄存器的地址是重叠的,在使用上,对52子系列的高128B RAM,必须采用寄存器间接寻址方式访问,对特殊功能寄存器则必须采用直接寻址方式访问。v325 变址寻址变址寻址v变址寻址是以DPTR或PC作基址寄存器,以累加器A作变址寄存器,并以二者内容相加形成的16位地址作为操作数地址(ROM中地址)。v例如:例如:vMOVC A,A+DPTR ;A (A)+(DPTR) MOVC A,A+PC ;A (A)+(PC)n第一条指令的功能将A的内容与DPTR的内容之和作为操作数地址,把该地址中的内容送入累加器A中,如图3-3所示。 第二条指令的功能将A的内容与PC的内容之和作为操作数地址
10、,把该地址中的内容送入累加器A中。n这两条指令常用于访问程序存储器中的数据表格。且都为一字节指令。n326 相对寻址相对寻址n相对寻址即将程序计数器PC的当前值与指令中给出的偏移量rel相加,其结果作为转移地址送入PC中。相对寻址能修改PC的值,故可用来实现程序的分支转移。PC当前值是指正在执行指令的下一条指令的地址。rel是一个带符号的8位二进制数,取值范围-128+127。2000H:SJMP 54H这是无条件相对转移指令,双字节指令,指令代码80H、54H;其中54H是偏移量。n327 位寻址位寻址n在指令的操作数位置上直接给出位地址,这种寻址方式称为位寻址。 MCS-51系列单片机的特
11、色之一是具有位处理功能,可对寻址的位单独进行各种操作。n例如:MOV C,30Hn该指令的功能是把位地址30H中的值(0或1)传送到位累加器CY中。n51系列单片机的内部RAM有两个区域可以位寻址:一个是位寻址区20H2FH单元的128位,另一个是字节地址能被8整除的特殊功能寄存器的相应位。n在MCS-51系列单片机中,位地址有以下几种表示方式:n(1)直接使用位地址。对于20H2FH共16个单元的128位,其位地址编号是00H7FH,例如,20H单元的07位的位地址为00H7H。n(2)用单元地址加位序号表示。如25H.5表示25H单元的D5位(位地址是2DH),而PSW中的D3可表示为D0
12、H.3。这种表示方法可以避免查表或计算,比较方便。n(3)用位名称表示。特殊功能寄存器中的可寻址位均有位名称,可以用位名称来表示该位。如可用RS0表示PSW中的D3位:D0H.3n(4)对特殊功能寄存器可直接用寄存器符号加位序号表示。如PSW中的D3位,又可表示为PSW.3。n数据传送类指令的功能是把源操作数传送到目的操作数,源操作数不变,目的操作数被源操作数所代替。n331 内部内部RAM数据传送指令数据传送指令 内部RAM的数据传送类指令是指累加器、寄存器、特殊功能寄存器、RAM单元之间的数据相互传送。n1以累加器以累加器A为目的操作数的数据传送指令为目的操作数的数据传送指令 MOV A,
13、#data ;A data MOV A,direct ;A (direct) MOV A,Rn ;A (Rn) MOV A,Ri ;A ((Ri)) 这组指令的功能是将源操作数所指定的内容送入累加器A中。33 数据传送类指令数据传送类指令n2以寄存器以寄存器Rn为目的操作数的数据传送指令为目的操作数的数据传送指令 MOV Rn,A ;Rn (A) MOV Rn,#data ;Rn data MOV Rn,direct ;Rn (direct) 这组指令的功能是将源操作数所指定的内容送到当前工作寄存器组R0R7中的某个寄存器中。 注意:没有“MOV Rn,Rn”指令, 也没有“MOV Rn, R
14、i”指令。例例3-1 (A)=50H,(R1)=10H,(R2)=20H, (R3)=30H,(30H)=4FH,执行下述指令: MOV R1,A ;R1 (A) MOV R2,30H ;R2 (30H) MOV R3,#85H ;R3 85H 执行后:(R1)=50H,(R2)=4FH,(R3)=85H。3以直接地址为目的操作数的数据传送指令以直接地址为目的操作数的数据传送指令 MOV direct,A ;direct (A) MOV direct,#data ;direct data MOV direct1,direct2 ;direct1 (direct2) MOV direct,Rn
15、;direct (Rn) MOV direct,Ri ;direct ((Ri))n 这组指令的功能是将源操作数所指定的内容送入由直接地址direct所指定的片内存储单元。n例例3-2 已知:(R0)=60H,(60H)=72H, MOV 40H,R0 ;(40H)(60H)指令执行过程如图3-5所示。执行结果为:(40H)=72H4以间接地址以间接地址Ri为目的操作数的数据传送指令为目的操作数的数据传送指令 MOV Ri ,A ;(Ri) (A) MOV Ri ,#data ;(Ri) data MOV Ri , direct ;(Ri) (direct) 这组指令的功能是把源操作数所指定的
16、内容送入以R0或R1为地址指针的片内RAM单元中。源操作数可采用寄存器寻址、立即寻址和直接寻址3种方式。n 注意:没有“MOV Ri ,Rn”指令。例例3-3 已知:(R1)=30H,(A)=20H,执行指令: MOV R1 ,A ;(30H)(A) 执行结果为:(30H)=20H。5以以DPTR为目的操作数的数据传送指令为目的操作数的数据传送指令 MOV DPTR ,#data16 ;DPTR data16n 这是MCS-51系列单片机指令系统中唯一的一条16位立即数传送指令,其功能是将外部存储器(RAM或ROM)某单元地址作为立即数送到DPTR中,立即数的高8位送DPH,低8位送DPL。
17、在学习、使用上述各条指令时,需注意以下几点:(1)要区分各种寻址方式的含义,正确传送数据。(2)所有传送指令都不影响标志位。这里所说的标志位是指CY、AC、和OV。涉及到累加器A的将影响奇偶标志位P。(3)估算指令的字节数:凡是指令中既不包含直接地址、又不包含8位立即数的指令均为一字节指令;若指令中包含一个直接地址或8位立即数,则指令字节数为2,若包含两个这样的操作数,则指令字节数为3。例3-4 若(R0)=30H,(30H)=50H,执行指令: MOV A,R0 ;(A)=30H (一字节) MOV A,30H ;(A )=50 H (二字节) MOV A,#30H ;(A )=30H (二
18、字节) MOV 30H ,#0FH ;(30H )=0FH (三字节) MOV DPTR,#2000H ;(DPH) =20H , (DPL)=00H (三字节) n332 访问外部访问外部RAM的数据传送指令的数据传送指令nCPU与外部RAM或I/O口进行数据传送,必须采用寄存器间接寻址的方式,并通过累加器A来传送。这类指令共有四条: MOVX A ,DPTR ;A(DPTR) MOVX DPTR ,A ;(DPTR)A OVX A ,Ri ;A(Ri) MOVX Ri ,A ;(Ri)An前两条指令是以DPTR作为间址寄存器, DPTR是16位地址指针,因此其寻址范围可达片外RAM 64K
19、B空间。n后两条指令是以R0或R1作为间址寄存器,R0或R1是8位地址指针,因此其寻址范围仅限于外部RAM 256个字节单元。n该组指令的功能:在DPTR或R0、R1所指定的外部RAM单元与累加器A之间传送数据。n例例3-5 试编程,将片外RAM的2000H单元内容送入片外RAM的0200H单元中;解:片外RAM与片外RAM之间不能直接传送数据,需通过累加器A传送,另外,当片外RAM地址值大于FFH时,需用DPTR作为间址寄存器。编程如下: MOV DPTR ,#2000H ;源数据地址送DPTR MOVX A ,DPTR ;从外部RAM中取数送A MOV DPTR ,#0200H ;目的地址
20、送DPTR MOVX DPTR ,A ;A中内容送外部RAM 333 程序存储器向累加器程序存储器向累加器A传送数据指令传送数据指令 MOVC A, A+DPTR ;A((A)+(DPTR)) MOVC A, A+PC ;A((A)+(PC)) 两条指令适合于查阅在两条指令适合于查阅在ROMROM中建立的数据表格,也中建立的数据表格,也称作查表指令,实现的功能完全相同,但使用中有称作查表指令,实现的功能完全相同,但使用中有一点差异。一点差异。 第一条指令采用第一条指令采用DPTRDPTR作为基址寄存器。使用前可将作为基址寄存器。使用前可将1616位地址送入位地址送入DPTRDPTR中,实现在中
21、,实现在64KBROM64KBROM空间向累加空间向累加器器A A的数据传送。数据表格可存放在的数据传送。数据表格可存放在64KBROM64KBROM的任意的任意位置,因此这条指令称为远程查表指令。位置,因此这条指令称为远程查表指令。n第二条指令是以第二条指令是以PCPC作为基址寄存器。程序中作为基址寄存器。程序中PCPC值是值是确定的,为下一条指令的地址,不是表格首地址,确定的,为下一条指令的地址,不是表格首地址,使基址与实际要读取的数据表格首地址不一致,这使基址与实际要读取的数据表格首地址不一致,这样样A+PCA+PC与实际要访问的单元地址就不一致,因此与实际要访问的单元地址就不一致,因此
22、, ,使用该指令之前要用一条使用该指令之前要用一条加法指令加法指令进行进行地址调整地址调整。n由于PC的内容不能随意改变,所以只能借助于A来进行调整,即通过对累加器A加一个数,使得A+PC和所读ROM单元地址一样。n 例例3-6 若在外部ROM中2000H单元存放(09)的平方 值0,1,4,9,81,要求根据累加器A中的值(09)来查找所对应的平方值,并存入60H单元中。n解: 用DPTR作基址寄存器: MOV DPTR,#2000H ;表格首地址送DPTR MOVC A,A+DPTR ;根据表格首地址及A中值确定地 址,取数送A。 MOV 60H ,A ;存结果此处(A)+(DPTR)之和
23、为所查平方值所存地址。 v 用PC作为基址寄存器:在MOVC指令之前先用一条加法指令进行地址调整: ADD A ,# data ;(A)+data 作地址调整 MOVC A ,A+PC ;(A)+data+(PC)确定查表地址,取数送A。 MOV 60H ,A ;存结果 RET 2000H:DB 0,1,4,9,16,25,36,81执行MOVC指令时,PC已指向下一条指令地址,很显然,PC的内容不是要查找的表格首地址2000H,二者之间存在地址差,这个地址差就是MOVC下边的指令与数据表格首地址之间,其他指令所占的字节数之和。在本例中,地址差是03,即data=03H。n334 数据交换指令
24、数据交换指令n 数据交换指令共有五条,可完成累加器和内部RAM单元之间的整字节或半字节交换。n1整字节交换指令n 整字节交换指令有三条,完成累加器A与内部RAM单元内容的整字节交换。 XCH A,Rn ;( A) (Rn) XCH A,direct ;(A)(direct) XCH A,Ri ;(A)((Ri))n2半字节交换指令 XCHD A,Ri ;(A)30((Ri))30 低半字节交换,高半字节不变。 n3累加器高低半字节交换指令 n SWAP A ;(A)74(A)30n例例3-7 试试编程,将外部RAM 1000H单元中的数据与内部RAM 6AH单元中的数据相互交换。n解:数据交换
25、指令只能完成累加器A和内部RAM单元之间的数据交换,要完成外部RAM与内部RAM之间的数据交换,需先把外部RAM中的数据取到A中,交换后再送回到外部RAM中。编程如下。 MOV DPTR ,#1000H ;外部RAM地址送DPTR MOVX A ,DPTR ;从外部RAM中取数送A XCH A ,6AH ;A与6AH地址中的内容交换 MOVX DPTR ,A ;交换结果送外部RAMn335 堆栈操作指令堆栈操作指令所谓堆栈是在片内所谓堆栈是在片内RAMRAM中按中按“先进后出,后进先出先进后出,后进先出”原则设置的专用存储区。数据的进栈出栈由指针原则设置的专用存储区。数据的进栈出栈由指针SPS
26、P统一管理。可实现对数据或断点地址的保护,统一管理。可实现对数据或断点地址的保护,堆栈的操作有如下两条专用指令:堆栈的操作有如下两条专用指令: PUSH direct ;SP (SP)+1,(SP)(direct) POP direct ;direct (SP),SP (SP)-1n前一条指令是进栈指令进栈指令,其功能是先将栈指针SP的内容加1,使它指向栈顶空单元,然后将直接地址direct单元的内容送入栈顶空单元。n后一条指令是出栈指令出栈指令,其功能是将SP所指的单元内容送入直接地址所指出的单元中,然后将栈指针SP的内容减1,使之指向新的栈顶单元。n注意:进栈、出栈指令只能以直接寻址方式来
27、取得操作数,不能用累加器或工作寄存器Rn作为操作数。n算术运算类指令可以完成加、减、乘、除等各种操作,全部指令都是都是8位数运算指令位数运算指令。如果需要作16位数的运算则需编写相应的程序来实现。n算术运算类指令大多数要影响到程序状态字寄存器PSW中的溢出标志OV、进位(借位)标志CY、辅助进位标志AC和奇偶标志位P。n341 加法指令加法指令 ADD A ,# data ;A (A)+data ADD A ,direct ;A (A)+(direct) ADD A ,Rn ;A (A)+(Rn) ADD A ,Ri ;A (A)+((Ri)) 34 算术运算类指令算术运算类指令v这组指令的功
28、能是把源操作数所指出的内容与累加器A的内容相加,其结果存放在A中。v该组指令对PSW中各标志位的影响情况如下:进位标志CY:如D7位向上有进位,则CY=1; 否则CY=0。半进位标志AC:如D3位向上有进位,AC=1; 否则AC=0。溢出标志OV:若D7、D6位只有一个向上有进位,OV=1;若D7、D6同时有进位或同时无进位时,OV=0。奇偶标志P:当A中“1”的个数为奇数时,P=1;为偶数时,P=0。n例例3-8 设A=94H,(30H)=8DH,n执行指令 ADD A,30H,操作如下: 1 0 0 1 0 1 0 0 + )1 0 0 0 1 1 0 1 1 0 0 1 0 0 0 0
29、1结果(A)=21H ;(CY)=1; (AC)=1 ;(OV)=1;(P)=0参加运算的两个数,可以是无符号数(0255),也可以是有符号数(128+127)。n上例中,若把94H、8DH看作无符号数相加,结果中CY=1,表示运算结果发生了溢出(结果超出了8位),此时溢出的含义是向高位产生进位,所以确定结果时不能只看累加器A的内容,而应该把CY的值加到高位上,才可得到正确的结果。即结果为121H;若把94H、8DH看作有符号数(补码表示的),结果中OV=1,它表示运算结果发生了溢出,A中的值是个错误的结果。n342 带进位加法指令带进位加法指令 ADDC A ,# data ;A (A)+
30、data +(CY) ADDC A ,direct ;A (A)+(direct)+(CY) ADDC A ,Rn ;A (A)+(Rn)+(CY) ADDC A ,Ri ;A (A)+((Ri))+(CY)n这组指令的功能是把源操作数所指出的内容与累加器A的内容相加、再加上进位标志CY的值,其结果存放在A中。n运算结果对PSW标志位的影响与ADD指令相同。n需要说明的是,这里所加的进位标志CY的值是在该指令执行之前已经存在的进位标志值,而不是执行该指令过程中产生的进位标志值。 例例3-9 设(A)=AEH,(R1)=81H,(CY)=1。执行指令 ADDC A,R1,则操作如下: 1 0 1
31、 0 1 1 1 0 1 0 0 0 0 0 0 1 +) 1 (CY) 1 0 0 1 1 0 0 0 0 结果(A)=30H,(CY)=1,(OV)=1, (AC)=1,(P)=0n带进位加法指令主要用于多字节数的加法运算。因低位字节相加时可能产生进位,而在进行高位字节相加时,要考虑低位字节向高位字节的进位,因此,在进行高位字节相加时必须使用带进位的加法指令。n例例3-10 设有两个无符号16位二进制数,分别存放在30H、31H单元和40H、41H单元中(低8位先存),写出两个16位数的加法程序,将和存入50H、51H单元。(设和不超过16位)n解: 由于不存在16位数的加法指令,所以只能
32、先加低8位,后加高8位,而在加高8位时要连低8位相加的进位一起相加,编程如下: MOV A ,30H ;取一个加数的低字节送A中 ADD A ,40H ;两个低字节数相加 MOV 50H ,A ;结果送50H单元 MOV A ,31H ;取一个加数的高字节送A中 ADDC A ,41H ;高字节数相加,同时加低字节产生的进位 MOV 51H ,A ;结果送51H单元 n343 带借位减法指令带借位减法指令 SUBB A ,# data ;A (A) - data -(CY) SUBB A ,direct ;A (A) -(direct)-(CY) SUBB A ,Rn ;A (A) (Rn)-
33、(CY) SUBB A ,Ri ;A (A) -((Ri))-(CY)n减法指令对PSW中各标志位的影响情况如下:借位标志CY:如D7位向上需借位,则CY=1;否则CY=0。半借位标志AC:如D3位向上需借位,AC=1;否则AC=0。溢出标志OV:若D7、D6位只有一个向上有借位,OV=1;若若D7、D6位同时有借位或同时无借位时,OV=0。奇偶标志P:当A中“1”的个数为奇数时,P=1;为偶数时, P=0。注:减法运算只有带借位减法指令,而没有不带借位注:减法运算只有带借位减法指令,而没有不带借位的减法指令。若要进行低字节的减法运算,应该先的减法指令。若要进行低字节的减法运算,应该先用指令将
34、用指令将CY清清0,然后再执行,然后再执行SUBB指令。指令。n例例3-11 设(A)=DBH,(R4)=73H,(CY)=1。执行指令 SUBB A,R4 则操作如下: 1 1 0 1 1 0 1 1 (DBH) 1 1 0 1 1 0 1 1 1 1 0 0 1 1 1 1 (73H) 1 0 0 0 1 1 0 1 (-73H补码)) 1 (CY) +) 1 1 1 1 1 1 1 1 (-1补码) 0 1 1 0 0 1 1 1 10 0 1 1 0 0 1 1 1 (a)常规减法 (b)减法变补码相加结果:(A)=67H,(C)=0,(AC)=0,(OV)=1,(P)=1。由上述二式
35、可见两种算法的最终结果是一样的。在此例中,若DBH和73H是两个无符号数,则结果67H是正确的;反之,若为两个带符号数,则由于产生(OV=1),使得结果是错误的,因为负数减正数其结果不可能是正数,OV=1,就指出了这一错误。 n344 加加1指令指令 INC A ;A (A)+ 1 INC direct ;direct (direct)+ 1 INC Rn ;Rn (Rn)+ 1 INC Ri ;Ri (Ri)+ 1 INC DPTR ;DPTR (DPTR)+ 1这组指令的功能是将操作数所指定单元的内容加1。n345 减减1指令指令 DEC A ;A (A)-1 DEC direct ;di
36、rect (direct)-1 DEC Rn ;Rn (Rn)-1 DEC Ri ;Ri (Ri)-1这组指令的功能是将操作数所指定单元的内容减1。加1、减1指令均不影响PSW中的OV、CY、AC标志。n346 乘、除法指令乘、除法指令 1乘法指令乘法指令 MUL AB ;BA(A)(B)n指令功能:把累加器A和寄存器B中的两个8位无符号数相乘,所得所得16位乘积的低位乘积的低8位放在位放在A中,高中,高8位放在位放在B中中。n乘法指令执行后会影响三个标志:n若乘积小于FFH(即B的内容为0),则OV=0,否则OV=1。CY=0,奇偶标志P仍按A中1的奇偶性来确定。n例例3-12 已知(A)=
37、80H,(B)=32H, 执行指令 MUL ABn结果:(A)=00H,(B)=19H,OV=1,CY=O,P=0。n2除法指令除法指令 DIV AB ;A(A)(B)之商, B(A)(B)之余数n功能:对两个8位无符号数进行除法运算。其中被被除数存放在累加器除数存放在累加器A中,除数存放在寄存器中,除数存放在寄存器B中中。执行后,商存于累加器商存于累加器A中,余数存于寄存器中,余数存于寄存器B中中。除法指令执行后也影响三个标志:若除数为0(即B=0)时,OV=1,表示除法没有意义;若除数不为0,则OV=0,表示除法正常进行。nCY=0,奇偶标志P仍按A中1的奇偶性来确定。n例例3-13 已知
38、:(A)=87H(135D),(B)=0CH(12D), 执行指令 DIV AB结果(A)=0BH,(B)=03H,OV=0,CY=O,P=1。 n347 十进制调整指令十进制调整指令格式: DA An功能:对A中刚进行的两个BCD码的加法结果自动进行修正。该指令只影响进位标志CY。n所谓BCD码就是采用四位二进制编码表示的十进制数。四位二进制数共有十六个编码,BCD码是取它前十个的编码00001001来代表十进制数的09,这种编码简称为BCD码。n如果两个BCD码数相加,结果也是BCD码,则该加法运算称为BCD码加法。在单片机中没有专门的BCD码加法指令,要进行要进行BCD码加法运算,也要码
39、加法运算,也要使用加法指令使用加法指令ADD或或ADDC。然而计算机在执行ADD或ADDC指令时,是按照二进制规则进行的,对于4位二进制数是按逢16进位,而BCD码是逢十进位的,二者存在进位差。因此用ADD或ADDC指令进行BCD码相加时,可能会出现错误。使用DA A能对运算结果自动进行修正。使用方法使用方法:在上述加法指令后面紧跟一条在上述加法指令后面紧跟一条DA A指令。指令。n例例3-14 试编写程序,实现95+59的BCD码加法,并将结果存入30H、31H单元。 MOV A ,#95H ;95的BCD码数送A中 ADD A ,#59H ;两个BCD码相加,结果在A中 DA A ;对相加
40、结果进行十进制调整 MOV 30H ,A ;十位个位的BCD码之和送30H MOV A ,#00H ;A清0 ADDC A ,#00H ;加进位(百位的BCD码) DA A ;BCD码相加后,用调整指令 MOV 31H ,A ;存进位n第一次执行DA A指令的结果:A=54H,CY=1,n最终结果:(31H)=01H,(30H)=54H。n若要进行BCD码减法运算,也应该进行调整,但不存在十进制减法调整指令,因此可将减法改为可将减法改为加法加法:加减数的补数。n两位十进制数是对100取补的.n例如减法 60-30=30,也可以改为补数相加:n60+(100-30)=130 去掉进位,就能得到正
41、确的结果。n例例3-15 编写程序实现十进制减法,计算87-38。 CLR C ;减法之前,先清CY位 MOV A ,#9AH ;9AH(即100)送A中 SUBB A , #38H ;做减法,38的补数送A中 ADD A ,#87H ;38的补数与87做加法, DA A ;对相加结果进行调整。分析: 减数求补数 与被减数相加 1 0 0 1 1 0 1 0 0 1 1 0 0 0 1 0 -) 0 0 1 1 1 0 0 0 +) 1 0 0 0 0 1 1 1 0 1 1 0 0 0 1 0 1 1 1 0 1 0 0 1 十进制调整 1 1 1 0 1 0 0 1 +) 0 1 1 0
42、0 0 0 0 1 0 1 0 0 1 0 0 1去掉进位,取调整结果的低8位,即得结果为十进制数49,显然是正确的结果 逻辑运算的特点:按位进行操作。 逻辑运算包括与、或、异或三种,此外还有移位指令以及对累加器A清零和求反指令。n351 逻辑与运算指令逻辑与运算指令 ANL A ,#data ;A (A)data ANL A ,direct ;A (A)(direct) ANL A ,Rn ;A (A)(Rn) ANL A ,Ri ;A (A)((Ri)) ANL direct ,A ;direct (direct)(A) ANL direct ,#data ;direct (direct)
43、datan指令应用:用于将某些位屏蔽(即使之为0)。n方法是:将要屏蔽的位和方法是:将要屏蔽的位和“0”相与,相与,n 保留不变的位同保留不变的位同“1”相与。相与。 35 逻辑运算及移位类指令逻辑运算及移位类指令n352 逻辑或运算指令逻辑或运算指令 ORL A ,#data ;A (A)data ORL A ,direct ;A (A) (direct) ORL A ,Rn ;A (A) (Rn) ORL A ,Ri ;A (A) ((Ri)) ORL direct ,A ;direct (direct) (A) ORL direct ,#data ;direct (direct) dat
44、an指令应用:用于将某些位置位(即使之为1)。n方法是:将要置位的位和将要置位的位和“1”相或,相或,n 要保留不变的位同要保留不变的位同“0”相或。相或。n353 逻辑异或运算指令逻辑异或运算指令 XRL A ,#data ;A (A)data XRL A ,direct ;A (A) ( direct) XRL A ,Rn ;A (A) (Rn) XRL A ,Ri ;A (A) ((Ri)) XRL direct ,A ;direct (direct) (A) XRL direct ,#data ;direct (direct) datan指令应用:用于将某些位取反。n方法是:将需求反的
45、位同将需求反的位同“1”相异或,相异或,n 要保留的位同要保留的位同“0”相异或相异或。 v例例3-16 将累加器A的低4位送到P1口的低4位输出,而 P1的高4位保持不变。v解:这种操作不能简单地用MOV指令实现,而可以借助与、或逻辑运算。编程如下: ANL A ,#0FH ;屏蔽A 的高4位,保留低4位 ANL P1 ,#0F0H ;屏蔽P1的低4位,保留高4位 ORL P1 ,A ;通过或运算,完成所需操作v例例3-17 试编程,使内部RAM 30H单元中的低2位清0,高2位置1,其余4位取反。v解:ANL 30H ,#0FCH ;30H单元中低2位清0 ORL 30H ,#0C0H ;
46、30H单元中高2位置1 XRL 30H ,#3CH ;30H单元中间4位变反n354累加器清零、取反指令累加器清零、取反指令n累加器清零指令: CLR A ;A 0n累加器按位取反指令: CPL A ;A ( )n清零和取反指令只有累加器A才有,它们都是一字节指令,如果用其他方式来达到清零或取反的目的,则都为二字节的指令。nMCS-51系列单片机只有对A的取反指令,没有求补指令。若要进行求补操作,可按“求反加1”来进行。n以上所有的逻辑运算指令,对CY、AC和OV标志都没有影响,只在涉及到累加器A时,才会影响奇偶标志P。An355 循环移位指令循环移位指令n移位指令只能对累加器A进行移位,共有
47、循环左移、循环右移、带进位的循环左移和右移四种。n循环左移 RL A ;A i+1A i ,A 0 A 7n循环右移 RR A ;A i A i+1,A 7 A 0 n带进位循环左移 n RLC A ;A 0CY,A i+1 A i,CYA 7 n带进位循环右移 n RRC A ;A 7CY,A iA i+1,CYA 0 n前两条指令的功能分别是将累加器A的内容循环左移或右移一位;执行后仅影响PSW中的P标志;n后两条指令的功能分别是将累加器A的内容带进位带进位位位CY一起循环左移或右移一位;执行后影响PSW中的进位位CY和奇偶标志位P。以上移位指令,可用图形表示,如图3-6 所示。举例:举例
48、:例例3-183-18:设(:设(A A)=08H=08H,分析下面程序执行结果:,分析下面程序执行结果:(1 1)RL A RL A ;A A的内容左移一位,结果(的内容左移一位,结果(A A)=10H=10H RL A RL A ;A A的内容左移一位,结果(的内容左移一位,结果(A A)=20H=20H RL A RL A ;A A的内容左移一位,结果(的内容左移一位,结果(A A)=40H=40H 即左移一位,相当于原数乘即左移一位,相当于原数乘2 2(原数小于(原数小于80H80H时)。时)。(2 2)RR A RR A ;A A的内容右移一位,结果(的内容右移一位,结果(A A)=
49、04H=04H RR A RR A ;A A的内容右移一位,结果(的内容右移一位,结果(A A)=02H =02H RR A RR A ;A A的内容右移一位,结果(的内容右移一位,结果(A A)=01H=01H 即右移一位,相当于原数除即右移一位,相当于原数除2 2(原数为偶数时)。(原数为偶数时)。36 控制转移类指令控制转移类指令n51系列单片机有比较丰富的控制转移指令,包括无条件转移指令、条件转移指令和子程序调用及返回指令。这类指令的特点:自动改变PC的内容,使程序发生转移。n361 无条件转移指令无条件转移指令n有四条无条件转移指令,提供了不同的转移范围。可使程序无条件地转到指令所提
50、供的地址上去。n1长转移指令 LJMP addr16 ;PC addr16n功能:把指令中给出的16位目的地址addr16送入程序计数器PC,使程序无条件转移到addr16处执行。n1616位地址可寻址位地址可寻址64KB ROM64KB ROM,故称为长转移指令,长转移指令是是三字节指令,依次是操作码、高8位地址、低8位地址。n 2绝对转移指令 AJMP addr11 ;PC (PC) + 2, PC100addr11n这是一条二字节指令,其指令格式为: a10 a9 a8 0 0 0 0 1 a7 a6 a5 a4 a3 a2 a1 a0 n指令中提供了11位目的地址,其中 a7a0 在第
51、二字节,a10a8 则占据第一字节的高3位,而00001是这条指令特有的操作码,占据第一字节的低5位。n绝对转移指令的执行分为两步:n第一步,取指令。此时PC自身加2指向下一条指令的起始地址(称为PC当前值)。n第二步,用指令中给出的11位地址替换PC当前值的低11位,PC高5位保持不变,形成新的PC值即转移的目的地址。n11位地址的范围为0000000000011111111111,即可转移的范围是2KB。转移可以向前也可以向后,如图3-7 所示。但要注意转移到的位置是与PC+2的地址在同一个2K区域,n例例3-19 分析下面绝对转移指令的执行情况。n1234H:AJMP 0781Hn分析:
52、分析:在指令执行前,(PC)=1234H;取出该指令后,(PC)+2 形成PC当前值,它等于1236H,即0 0 0 1 0 0 1 0 0 0 1 1 0 1 1 0 B,指令执行过程:用指令给出的11位地址 1 1 1 1 0 0 0 0 0 0 1 B替换PC当前值的低11位,即新的PC值为1781H,所以指令执行结果就是转移到1781H处执行程序。 n应注意:只有转移的目的地址与PC当前值在2K范围之内时,才可使用AJMP指令,超出2K范围,应使用长转移指令LJMP。n3 3短转移指令短转移指令 SJMP rel ;PC (PC) + 2,PC (PC) + rel SJMP是无条件相
53、对转移指令,该指令为双字节,relrel是相对转移偏移量。是相对转移偏移量。指令的执行分两步完成:第一步,取指令。此时PC自身加2形成PC的当前值。第二步,将PC当前值与偏移量rel 相加形成转移的目的地址送PC中。即:目的地址=(PC)+2 + relrel其范围为128+127,这条指令的优点是:指令给出的是相对转移地址,不具体指出地址值。当程序地址发生变化时,只要相对地址不发生变化,该指令就不需要作任何改动。v4变址寻址转移指令变址寻址转移指令(称散转指令、间接转移指令) JMP A+DPTR ;PC (A)+(DPTR) v指令的功能:把累加器A中的8位无符号数与基址寄存器DPTR中的
54、16位地址相加,所得的和作为目的地址送入PC。v该指令特点:转移地址可以在程序运行中加以改变。例如,在DPTR中装入多分支转移指令表的首地址,而由累加器A中的内容来动态选择应转向哪一条分支,实现由一条指令完成多分支转移的功能。v例例3-20 设累加器A中存有用户从键盘输入的键值03,键处理程序分别存放在KPRG0、KPRG1、KPRG2、KPRG3位置处,试编写程序:根据用户输入的键值,转入相应的键处理程序。nMOV DPTR,#JPTAB ;转移指令表首地址送DPTR RL A ;键值2,AJMP指令占2个字节 JMP A+DPTR ;JPTAB+2键值,和送PC中,则程序转移到表中某一位置
55、去执行AJMP指令JPTAB:AJMP KPRG0 AJMP KPRG1 AJMP KPRG2 AJMP KPRG3 KPRG0: KPRG1: KPRG2: KPRG3: n362 条件转移指令条件转移指令n条件转移指令是指当某种条件满足时,转移才进行;而条件不满足时,程序就按顺序往下执行。n条件转移指令的共同特点是:(1)所有的条件转移指令都属于相对转移指令,转移范围相同,都在以PC当前值为基准的256B范围内(-128+127);(2)计算转移地址的方法相同: 转移地址=PC当前值 + rel 1累加器判零转移指令 JZ rel ;若(A)=0,则转移,PC (PC)+2 + rel ;
56、若(A)0,按顺序执行,PC (PC)+2 JNZ rel ;若(A) 0,则转移,PC (PC)+2+ rel ;若(A)=0,按顺序执行,PC (PC)+2 2比较条件转移指令比较条件转移指令 CJNE A ,# data ,rel ;若(A)=data,则PC(PC)+3,CY0 若(A) data,则PC(PC)+3+rel ,CY0 若(A)(direct), 则PC(PC)+3+rel,CY0 若(A) data, 则PC(PC)+3+rel,CY0 若(Rn) data,则PC(PC)+3+rel,CY0若(Ri)data, 则PC(PC)+3+rel,CY1n在使用CJNE指令
57、时应注意以下几点:n(1) 比较条件转移指令都是三字节指令,nPC当前值=PC+3(PC是该指令所在地址),n转移的目的地址=PC+3+rel。n(2) 比较操作实际就是作减法操作,只是不保存减法所得到的差而将结果反映在标志位CY上。n(3) CJNE指令将参与比较的两个操作数当作无符号数看待、处理并影响CY标志。因此CJNE指令不能直接用于有符号数大小的比较。n若进行两个有符号数大小的比较,则应依据符号位和CY位进行判别比较。n3减减1条件转移指令条件转移指令n DJNZ Rn ,rel ;Rn (Rn)1 若(Rn) 0, 则转移,PC(PC)+2+rel 若(Rn)=0, 按顺序执行,P
58、C(PC)+2 nDJNZ direct ,rel ;direct (direct)1 若(direct)0,则转移, PC(PC)+3+rel 若(direct)=0,按顺序执行, PC(PC)+3n第一条为二字节指令,第二条为三字节指令。n这两条指令对于构成循环程序十分有用这两条指令对于构成循环程序十分有用,使用中可以指定任何一个工作寄存器或者内部RAM单元为计数器。对计数器赋以初值以后,就可以利用上述指令对计数器进行减1,不为零就进入循环操作,为零就结束循环,从而构成循环程序。n例例3-21 试编写程序,将内部RAM以DATA为起始地址的10个单元中的数据求和,并将结果送入SUM单元。设
59、和不大于255。n解:对一组连续存放的数据进行操作时,一般都采用间接寻址,使用INC指令修改地址,可使编程简单,利用减1条件转移指令很容易编成循环程序来完成10个数相加。 MOV R0,#DATA ;首地址送间址寄存器R0 MOV R7,#0AH ;计数器R7送入计数初值 CLR A ;累加器A作累加和,先清0LP:ADD A,R0 ;加一个数 INC R0 ;地址加1,指向下一地址单元 DJNZ R7,LP ;计数值减1不为零循环 MOV SUM,A ;累加和存入指定单元 SJMP $ ;结束n例例3-22 将外部RAM的一个数据块传送到内部RAM,两者的首地址分别为DATA1和DATA2,
60、遇到传送的数据为“$”字符,停止传送。 MOV DPTR ,#DATA1 ;外部数据块首地址送DPTR MOV R1 ,#DATA2 ;内部数据块首地址送R1LP:MOVX A ,DPTR ;从外部RAM取数送入ACJNE A,#24H,LP1 ;与 $的ASC码比较,不相等转LP1: SJMP LP2 ;相等,转LP2LP1:MOV R1 ,A ;不是 $ 字符,执行传送 INC DPTR ;修改源地址指针 INC R1 ;修改目的地址指针 SJMP LP ;转传送下一个数据LP2: SJMP $ ;结束n以上条件转移指令都是相对转移指令,转移的范围有限;若要在大范围内实现条件转移,可将条件
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五版国有土地临时用地合同3篇
- 二零二五版高级别别墅居住权购置与买卖合同3篇
- 医院2025年度物流配送服务合同2篇
- 二零二五年度交通枢纽“四害”灭治与旅客健康服务合同3篇
- 二零二五版数字艺术版权保护与侵权处理合同范本3篇
- 二零二五版宅基地使用权转让及农村土地流转收益分配合同2篇
- 二零二五年户外广告牌场地租赁及新媒体营销合同3篇
- 二零二五年投影机采购与灯光音响租赁服务合同3篇
- 二零二五版建筑工程项目招投标代理中介费合同3篇
- 二零二五版汽车零部件钣金加工及机加服务采购合同模板3篇
- 青岛版(五年制)四年级下册小学数学全册导学案(学前预习单)
- 退学费和解协议书模板
- 2024至2030年中国对氯甲苯行业市场全景调研及发展趋势分析报告
- 智能教育辅助系统运营服务合同
- 心功能分级及护理
- DLT 572-2021 电力变压器运行规程
- 重庆育才中学2025届化学九上期末教学质量检测试题含解析
- 成都市2022级(2025届)高中毕业班摸底测试(零诊)数学试卷(含答案)
- 【云南省中药材出口现状、问题及对策11000字(论文)】
- 服装板房管理制度
- 河北省兴隆县盛嘉恒信矿业有限公司李杖子硅石矿矿山地质环境保护与治理恢复方案
评论
0/150
提交评论