版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 3.1 3.1 单片机指令系统概述单片机指令系统概述 3.1.1 3.1.1 指令格式指令格式 MCS-51MCS-51单片机指令格式采用了单地址指令单片机指令格式采用了单地址指令格式。一条汇编语句是由标号、操作码、格式。一条汇编语句是由标号、操作码、目的操作数、源操作数和注释等目的操作数、源操作数和注释等5 5部分组成部分组成的,其中方括号中的部分是可以选择的。的,其中方括号中的部分是可以选择的。 指令的具体格式为:指令的具体格式为: 标号标号 :操作码:操作码 目的操作数目的操作数 , 源操作数源操作数 ; 注释注释 例如:例如: HY1:MOV R3 , #08H ;执行数据传送操作;
2、执行数据传送操作 A:累加器,用于运算及存放数据。:累加器,用于运算及存放数据。 B:专用寄存器,用于:专用寄存器,用于MUL和和DIV指令中,存放指令中,存放第二操作数、乘积高位字节。第二操作数、乘积高位字节。 CY:进位标志位,或布尔处理器中的累加器。:进位标志位,或布尔处理器中的累加器。 bit:内部:内部RAM或专用寄存器中的直接寻址位。或专用寄存器中的直接寻址位。 /bit:位地址单元内容取反。:位地址单元内容取反。 DPTRDPTR:1616位数据指针,也可作为位数据指针,也可作为1616位地址寄存器。位地址寄存器。RnRn:工作寄存器中的寄存器:工作寄存器中的寄存器RnRn、R0
3、R7R0R7之一,之一,RiRi:工作寄存器中的寄存器:工作寄存器中的寄存器R0R0或或R1R1#data#data:8 8位立即数位立即数#data16#data16:1616位立即数位立即数directdirect:片内:片内RAMRAM或或SFRSFR的地址(的地址(8 8位)位) :间接寻址寄存器:间接寻址寄存器addr11addr11:1111位目的地址位目的地址addr16addr16:1616位目的地址位目的地址rel: rel: 补码形式的补码形式的8 8位地址偏移量。位地址偏移量。 偏移范围为偏移范围为-128-128127127/ /:位操作指令中,该位求反后参与操作,:位
4、操作指令中,该位求反后参与操作,不影响该位不影响该位X X:片内:片内RAMRAM的直接地址或寄存器的直接地址或寄存器(X)(X):相应地址单元中的内容:相应地址单元中的内容:箭头左边的内容送入箭头右边的单元内:箭头左边的内容送入箭头右边的单元内功能功能数据传送类:数据传送类:2929条条算术运算类:算术运算类:2424条条逻辑运算类:逻辑运算类:2424条条控制转移类:控制转移类:1717条条位操作类:位操作类: 1717条条 MCS-51MCS-51单片机共有单片机共有111111条指令,可以实现条指令,可以实现5151种基本操作。种基本操作。 1.1.按指令功能分类按指令功能分类 MCS
5、-51单片机用机器语言表示的指令格式按单片机用机器语言表示的指令格式按字节划分,有一字节指令、两字节指令和三字节划分,有一字节指令、两字节指令和三字节指令等三种。字节指令等三种。 (1 1)一字节指令中的)一字节指令中的8 8位二进制代码既包含位二进制代码既包含操作码的信息,也包含操作数的信息。操作码的信息,也包含操作数的信息。 例如指令:例如指令: INC INC A A MOV MOV A A,Rn Rn XCH XCH A A,RnRn ADD ADD A A,Ri Ri DEC DEC RnRn 例如:例如: ANL A,#90HADDA, #06HDEC 30HMOVR2,#0F0H
6、操作码 立即数或寻址地址 (3)三字节指令中,第一字节表示)三字节指令中,第一字节表示操作码,另两个字节是操作数,其操作码,另两个字节是操作数,其指令格式为:指令格式为: 例如:例如:ANL 30H,#66HMOVDPTR,#1000HLJMP0300HCJNEA,20H,HL5操作码 立即数或寻址地址 立即数或寻址地址 MCS-51系列单片机常可以分为单周期指令系列单片机常可以分为单周期指令57条,条,双周期指令双周期指令52条和四周期指令条和四周期指令2条等。条等。 (1 1)单周期指令的执行指令时间为一个机器周)单周期指令的执行指令时间为一个机器周期。例如:期。例如: XCHXCHA A
7、,R1R1ADDADD A A,R1R1CLRCLR A AMOVMOV R3R3,#0F0H #0F0H (2 2)双周期指令的执行指令时间为)双周期指令的执行指令时间为2 2个机器周期。个机器周期。例如:例如:MOVMOV RnRn,30H30HDJNZDJNZ R3R3,LOOPLOOPJMPJMP a+dptra+dptr (3)四周期指令的执行指令时间为)四周期指令的执行指令时间为4个机个机器周期。例如:器周期。例如:DIV ABMULAB 3.2.1 3.2.1 立即寻址立即寻址Immediate AddressingImmediate Addressing 操作数就包含在指令代码
8、中,在操作码之后,操作数就包含在指令代码中,在操作码之后,称为立即数,用称为立即数,用“”表示。表示。 如:如: MOV P1, MOV P1, #80H#80H MOV R7, MOV R7, #0F5H#0F5H MOV DPTR MOV DPTR,#1245H#1245H 3.2.2 3.2.2 直接寻址直接寻址 Direct AddressingDirect Addressing直接使用数所在单元的直接使用数所在单元的地址地址找到了操作数,找到了操作数,所以称这种方法为所以称这种方法为直接寻址直接寻址。操作数在操作数在SFRSFR、内部内部RAMRAM、位地址位地址空间。空间。如:如:
9、 MOV AMOV A,00H00H MOV CMOV C,60H60H MOV AMOV A,0F0H 0F0H (B B寄存器)寄存器)3.2.3 3.2.3 寄存器寻址寄存器寻址 Register Addressing对选定的工作寄存器对选定的工作寄存器R0R0R7R7、累加器、累加器A A、通用寄、通用寄存器存器B B、地址寄存器、地址寄存器DPTRDPTR中的数进行操作。中的数进行操作。 例:例:MOV AMOV A,R0R0;将;将R0R0工作寄存器中的数据送到工作寄存器中的数据送到累加器累加器A A中去。中去。问题:问题:我们知道,工作寄存器就是内存单元的我们知道,工作寄存器就是
10、内存单元的一部分,如果我们选择工作寄存器组一部分,如果我们选择工作寄存器组0 0,则,则R0R0就就是是RAMRAM的的00H00H单元,那么这样一来,单元,那么这样一来,MOV AMOV A,00H00H 和和 MOV AMOV A,R0R0不就没什么区别了吗?不就没什么区别了吗?执行第一条指令需要执行第一条指令需要2 2个机器周期,而第二条个机器周期,而第二条则只需要则只需要1 1个机器周期,第一条指令变成最终个机器周期,第一条指令变成最终的目标码要两个字节(的目标码要两个字节(E5H 00HE5H 00H),而第二条),而第二条则只要一个字节(则只要一个字节(E8E8H H)。)。3.2
11、.4 3.2.4 间接寻址间接寻址 Register Indirect Addressing寄存器间接寻址把地址放在另外一个寄存器中,寄存器间接寻址把地址放在另外一个寄存器中,根据这个寄存器中的数值决定该到哪个单元中取根据这个寄存器中的数值决定该到哪个单元中取数据。数据。 R0R0,R1-R1-8-8位地址,位地址,片内片内低低128128字节或字节或片外片外DPTR-16DPTR-16位,片外位,片外64KB64KB如:如: MOV AMOV A, R0R0MOVX AMOVX A, R0R0MOVX AMOVX A, DPTRDPTR操作数在片内RAM中操作数在片外RAM中操作数在片外RA
12、M中3.2.5 3.2.5 相对寻址相对寻址 将将PCPC中的当前内容与指令中的当前内容与指令第二字节给出的数第二字节给出的数相相加,结果作为跳转指令的转移地址(转移目的地加,结果作为跳转指令的转移地址(转移目的地址)。址)。 PCPC中的中的当前当前内容称为内容称为基地址基地址(本指令后的字节(本指令后的字节地址)指令第二字节给出的数据称为地址)指令第二字节给出的数据称为偏移量偏移量,1 1字节带符号数字节带符号数. .常用于跳转指令。常用于跳转指令。 如如: JC 23H: JC 23H 若若C=0C=0,不跳转;,不跳转; C=1C=1,跳转,跳转. .Relative Addressi
13、ng程序存储区ALU如:如:JC 23JC 231025H1000H 401025H 451001H 23 1024H 471002H 3023H1002H指令代码当前PC以以DPTRDPTR或或PCPC为基址寄存器,累加器为基址寄存器,累加器A A为变址寄存器。为变址寄存器。把两者内容相加,结果作为操作数的地址。把两者内容相加,结果作为操作数的地址。 常用于查表操作。 MOVCMOVC A A, A+DPTRA+DPTR ;(A+DPTR) A (A+DPTR) A MOVCMOVC A A, A+PCA+PC; PC+1 PCPC+1 PC,(A+PC)A(A+PC)A JMPJMP A+
14、DPTRA+DPTR;(;(PCPC)(A+DPTRA+DPTR)3.2.6 3.2.6 变址寻址变址寻址( (基址基址+ +变址变址) )Base-Register-plus-Index-Register-Indirect Addressing操作数在程序存储器中E0A程序存储区2040H 9320E0H 472041H DPH 20DPL 00ALU如:如:MOVC AMOVC A,A+DPTRA+DPTR设设DPTR=2000HDPTR=2000H,A=E0HA=E0H20E0H47指令代码E0A程序存储区ALU如:如:MOVC AMOVC A,A+PCA+PC设设A = #E0HA =
15、 #E0H2121H452040H 832121H 452041H 2120H 47当前PC指令代码 对片内对片内RAMRAM的的位寻址区位寻址区和某些可和某些可位寻址位寻址的特的特殊功能寄存器进行位操作时的寻址方式。殊功能寄存器进行位操作时的寻址方式。 如如: SETB 3DH; : SETB 3DH; 将将27H.527H.5位置位置1 1 CLR C CLR C ;CyCy位清位清0 03.2.7 3.2.7 位寻址位寻址 Bit Addressing操作数在片内RAM位地址区或SFR某些位中寻址方式涉及的存储器空间寻址方式涉及的存储器空间寻址方式寻址方式寻址空间(操作数存放空间)寻址空
16、间(操作数存放空间)立即寻址立即寻址程序存储器程序存储器直接寻址直接寻址片内片内RAMRAM低低128128字节、字节、SFRSFR寄存器寻址寄存器寻址工作寄存器工作寄存器R0R0R7,A,B,DPTRR7,A,B,DPTR寄存器间接寻址寄存器间接寻址片内片内RAM:R0,R1,SPRAM:R0,R1,SP片外片外RAM:R0 ,R1,DPTRRAM:R0 ,R1,DPTR变址寻址变址寻址程序存储器程序存储器:A+PC,A+DPTR:A+PC,A+DPTR相对寻址相对寻址程序存储器程序存储器256256字节范围内字节范围内:PC+:PC+偏移量偏移量位寻址位寻址片内片内RAMRAM的位寻址区的
17、位寻址区(20H(20H2FH2FH字节地址字节地址) )某些可位寻址的某些可位寻址的SFRSFR3.33.3指令系统指令系统3.3.1 3.3.1 数据传送类指令数据传送类指令 (2929条)条) Data Transfer InstructionData Transfer Instruction助记符:助记符: MOVMOV、MOVXMOVX、MOVC MOVC XCH XCH、XCHDXCHD、SWAP SWAP PUSH PUSH、POP POP v 源操作数寻址方式(源操作数寻址方式(5 5种):种):立即寻址、直接寻址、寄存器寻址、寄存器间接立即寻址、直接寻址、寄存器寻址、寄存器间
18、接寻址、变址寻址寻址、变址寻址 目的操作数寻址方式(目的操作数寻址方式(3种):种): 直接寻址、寄存器寻址、寄存器间接直接寻址、寄存器寻址、寄存器间接寻址寻址 除了目的操作数为除了目的操作数为ACC的指令影响奇偶的指令影响奇偶标志标志P外,一般不影响标志位。外,一般不影响标志位。(1 1) 以累加器为目的操作数的指令以累加器为目的操作数的指令(4 4条)条) MOV AMOV A,RnRn ;RnARnAMOV AMOV A,directdirect;(direct)A(direct)AMOV AMOV A, RiRi ;(R(Ri i)A)AMOV AMOV A,# #datadata;d
19、ataAdataA 将源操作数指定内容送到将源操作数指定内容送到A A中。中。 1 1内部数据传送指令内部数据传送指令MOVMOV (2) 以寄存器以寄存器Rn为目的操作数的指令为目的操作数的指令 (3条)条) MOV Rn,A MOV Rn,direct MOV Rn,#data 这组指令功能是把源操作数指定的内容送入这组指令功能是把源操作数指定的内容送入当前工作寄存器,源操作数不变。当前工作寄存器,源操作数不变。(3 3)以寄存器间接地址为目的字节的)以寄存器间接地址为目的字节的 传送指令(传送指令(3条)条) MOV MOV RiRi,A A ;A (Ri i) MOVMOV RiRi,
20、directdirect;(direct) (Ri i) MOVMOV RiRi,#data#data; data (Ri i) 功能:把源操作数指定的内容送入以功能:把源操作数指定的内容送入以R0R0或或R1R1为为地址指针的片内存储单元中。地址指针的片内存储单元中。例:例: MOV R0MOV R0,A AMOV R1MOV R1,20H20HMOV R0MOV R0,#34H#34H(4 4) 以直接地址为目的操作数的指令以直接地址为目的操作数的指令(5 5条)条)MOV directMOV direct,A AMOV directMOV direct,RnRnMOV direct1MO
21、V direct1,direct2direct2MOV directMOV direct,RiRiMOV directMOV direct,#data#data 这组指令功能是把源操作数指定的内容送这组指令功能是把源操作数指定的内容送入由直接地址指出的片内存储单元。入由直接地址指出的片内存储单元。MOV 20H,AMOV 20H,R1MOV 20H,30HMOV 20H,R1MOV 0A0H,#34HMOV P2,#34H(5 5)1616位数据传送指令(位数据传送指令(1 1条)条) MOV DPTRMOV DPTR,#data16#data16功能:将一个功能:将一个1616位的立即数送入
22、位的立即数送入DPTRDPTR中去。其中中去。其中高高8 8位送入位送入DPHDPH,低,低8 8位送入位送入DPLDPL。 例:例:MOV DPTRMOV DPTR,#1234H#1234H如果分别向如果分别向DPHDPH,DPLDPL送数,则结果也一样。送数,则结果也一样。 如下面两条指令:如下面两条指令:MOV DPHMOV DPH,#35H#35H MOV DPL MOV DPL,#12H#12H。 则就相当于执行了则就相当于执行了 MOV DPTRMOV DPTR,#3512H#3512H。 MOVC A,A+DPTR;A(A)+(DPTR) MOVCA,A+PC;A(A)+(PC)
23、 已知内存单元已知内存单元40H40H中有一个中有一个0 09 9范围内的数,用查表指范围内的数,用查表指令编出能查出该数平方值的程序。设平方表表头地址为令编出能查出该数平方值的程序。设平方表表头地址为0200H0200H。程序及执行后的结果如下:。程序及执行后的结果如下: MOVMOV A A,40H40H MOV MOV DPTR DPTR,#LAB#LAB MOVC A MOVC A,A+DPTRA+DPTR LAB:DB 0LAB:DB 0,1 1,4 4,9 9,10H10H,19H 19H 若(若(40H40H)为)为2 2,查表得,查表得4 4并存于并存于A A中中 2 2外部数
24、据传送指令外部数据传送指令MOVXMOVX (4条) MOVX AMOVX A,RiRi MOVX Ri MOVX Ri,A A MOVX A MOVX A,DPTRDPTR MOVX DPTR MOVX DPTR,A A说明:说明:1.1.在在5151中,与中,与外外部存储器部存储器RAMRAM打交道的只可打交道的只可以是以是A A累加器。所有需要送入外部累加器。所有需要送入外部RAMRAM的数据必需的数据必需要通过要通过A A送去,而所有要读入的外部送去,而所有要读入的外部RAMRAM中的数据中的数据也必需通过也必需通过A A读入。读入。 在此我们可以看出内外部在此我们可以看出内外部RAM
25、RAM的区别了,内部的区别了,内部RAMRAM间可以直接进行数据的传递,而外部则不行。间可以直接进行数据的传递,而外部则不行。 2. 2.要读或写外部的要读或写外部的RAMRAM,当然也必须要知道,当然也必须要知道RAMRAM的地址,的地址,在后两条指令中,地址是被直接放在在后两条指令中,地址是被直接放在DPTRDPTR中的。而前两条中的。而前两条指令,由于指令,由于RiRi(即(即R0R0或或R1R1)只是)只是8 8位的寄存器,所以只提位的寄存器,所以只提供低供低8 8位地址。高位地址。高8 8位地址由位地址由P2P2口口来提供。来提供。(演示举例) 3.3.使用时应先将要读或写的地址送入
26、使用时应先将要读或写的地址送入DPTRDPTR或或RiRi中,然后中,然后再用读写命令。再用读写命令。 例例:将外部:将外部RAMRAM中中100H100H单元中的内容送入外部单元中的内容送入外部RAMRAM中中200H200H单元中。单元中。MOV DPTRMOV DPTR,#0100H#0100HMOVX AMOVX A,DPTRDPTRMOV DPTRMOV DPTR,#0200H#0200HMOVX DPTRMOVX DPTR,A A3堆栈操作指令(堆栈操作指令(PUSH、POP) (2条)条)PUSH directPUSH direct ;SPSPSP+1SP+1,(SP)(SP)(
27、direct)(direct)POP directPOP direct ; ; (direct) (direct) (SP),(SP), SPSP-1第一条为压入指令,就是将direct中的内容送入堆栈中,第二条为弹出指令,就是将堆栈中的内容送回到direct中。例: MOV SPMOV SP,#5FH#5FH MOV A MOV A,#100#100 MOV B MOV B,#20#20 PUSH ACCPUSH ACC PUSH B PUSH B 4 4数据交换指令数据交换指令 (5 5条)条)XCH AXCH A,RnRn ;ARnARnXCH AXCH A, directdirect
28、;A(direct)A(direct)XCH AXCH A, RiRi ;A(Ri)A(Ri)XCHD AXCHD A, RiRi ;A.3A.3A.0(Ri).3A.0(Ri).3(Ri).0(Ri).0SWAP ASWAP A ;A.3A.3A.0A.7A.0A.7A.4A.4例:例: 已知已知A A中的内容为中的内容为34H34HMOV R6MOV R6, #29H#29HXCH AXCH A, R6R6SWAP ASWAP AXCH AXCH A, R6R6 XCHD AXCHD A, R0R0;R6=29H;A=29H,R6=34H;A=92H;A=34H,R6=92H;A=34H,
29、(R0)=56H ( (原值)原值)执行后执行后A=36H, (R0)=54(40H)= H 50H = H A= H (41H)= H 51H= H R0= H 课堂练习1.设:内部RAM中,(40H)=50H,(41H)=60H,(50H)=30H, (51H)=70H,执行下列片段后:MOV R0MOV R0,40H40H MOV A MOV A,R0R0 INC R0 INC R0 MOV R0 MOV R0,A Ab. MOV R0b. MOV R0,#40H#40H MOV A MOV A,R0R0 INC R0 INC R0 MOV A MOV A,R0R0;R0=50H;R0=
30、50H;A=30H;A=30H;R0=51H;R0=51H;(51H)=30H;(51H)=30H;R0=40H;R0=40H;A=50H;A=50H;(40)=51H;(40)=51H;A=51H;A=51H2 2. .给出每条指令执行后的结果给出每条指令执行后的结果 MOV 23H,#30HMOV 12H,#34HMOV R0,#23HMOV R7,12HMOV R1,#12HMOV A,R0MOV 34H,R1MOV 45H,34HMOV DPTR,#6712HMOV 12H,DPHMOV R0,DPLMOV A,R0;(23H)=30H;(12H)=34H;R0=23HXXXXXXXX
31、XXXXXXXXXXXXXXXXXXXXXXXXXXXXDPHDPHDPLDPL45H45H34H34H23H23H12H12HR7R7R1R1R0R0XXXXXXXXXXXXXXXX30303434XXXXXXXX2323XXXXXXXXXXXXXXXX30303434343412122323676712123434343430303434343412122323676712123434343430306767343412121212;R7=34H;R1=12H;A=30H;(34H)=34H;(45H)=34H;DPTR=6712H;(12H)=6767H;R0=1212H;A=6767H
32、内部RAM3.3.利用传送类指令并用多种方法将内部利用传送类指令并用多种方法将内部RAMRAM中中50H50H单元的内容与单元的内容与40H40H单元的内容互换。单元的内容互换。3.3.2 3.3.2 算术运算类指令算术运算类指令 (24(24条条) ) Arithmetic Operations Arithmetic Operations 主要对主要对8 8位无符号数;也可用于带符号数运算。位无符号数;也可用于带符号数运算。 包括:加、减、乘、除、加包括:加、减、乘、除、加1 1、减、减1 1运算指令运算指令 影响影响PSWPSW有关位。有关位。 1. 加法指令(13条)ADD AADD A
33、,#data#data ; A AdataAdataAADD AADD A,directdirect ; A A(direct )A(direct )AADD AADD A,RnRn ; A ARnARnAADD AADD A,RiRi ; A A(Ri)A(Ri)A用途:用途:将将A A中的值与源操作数所指内容相加,最中的值与源操作数所指内容相加,最终结果终结果 存在存在A A中。中。(1)不带进位位的加法指令(4条)例例1 1:ADD AADD A,#47H#47HADD AADD A,34H34HADD AADD A,R7R7ADD AADD A,R0R0例例2 2: MOV AMOV
34、A,#0AEH #0AEH ;-82D;-82D ADD A ADD A,#81H #81H ;-127D;-127D则执行完本条指令后,则执行完本条指令后,A A中的值为中的值为2FH;2FH;C=1C=1, ,AC=0AC=0, ,OV=1OV=1, ,P=1P=1。对无符号数:结果为对无符号数:结果为1 12FH;2FH;带符号数运算:带符号数运算:OV=1OV=1,有错,有错。实验验证一下本例(2)带进位位的加法指令(4条)ADDC AADDC A,RnRn; A ARnRnCYACYAADDC AADDC A,directdirect; A A(direct )(direct )CY
35、ACYAADDC AADDC A,RiRi; A A(Ri)(Ri)CYACYAADDC AADDC A,#data#data; A AdatadataCYACYA用途:用途:将将A A中的值和其后面的值以及进位位中的值和其后面的值以及进位位C C中的中的值相加,最终结果存在值相加,最终结果存在A A,常用于多字节数运算中。,常用于多字节数运算中。例: 先做先做67H+A0H=107H67H+A0H=107H,而,而1 107H07H显然超过了显然超过了0FF0FFH H,因此最终保存在因此最终保存在A A中的是中的是07H07H,而,而1 1则到了则到了PSWPSW中的中的CYCY位了。换言
36、之,位了。换言之,CYCY就相当于是就相当于是100H100H。 然后再做然后再做10H + 30H + 10H + 30H + CYCY,结果是,结果是41H41H,所以,所以最终的结果是最终的结果是4107H4107H。1067H+30A0H1067H+30A0H0001 0000 0110 0111 0011 0000 1010 0000 0100 0001 0000 0111 1067H1067H30A0H30A0H4107H4107H设:设:1067H1067H存在存在R1R0R1R0中,中, 30A0H30A0H存在存在R3R2R3R2中中, ,计算计算R1R0+R3R2R1R0+
37、R3R2,结果存在结果存在R5R4R5R4中。中。MOV A,R0MOV A,R0ADD A,R2 ADD A,R2 ;R0+R2AR0+R2A和和CYCYMOV R4,AMOV R4,AMOV A,R1MOV A,R1ADDC A,R3 ADDC A,R3 ;R1+R3+CYAR1+R3+CYA和和CYCYMOV R5,AMOV R5,A又例: 先做先做67H+20H=87H67H+20H=87H,没有超过,没有超过0FF0FFH H,因此最终,因此最终保存在保存在A A中的是中的是87H87H,而,而PSWPSW中的中的CY=0CY=0。 然后再做然后再做10H + 30H + 10H +
38、 30H + CYCY,结果是,结果是40H40H,所以,所以最终的结果是最终的结果是4087H4087H。1067H+3020H1067H+3020H0001 0000 0110 0111 0011 0000 0010 0000 0100 0000 1000 0111 1067H1067H3020H3020H4087H4087H实验验证一下本例设:1067H存在R1R0中, 3020H存在R3R2中,计算R1R0+R3R2,结果存在R5R4中。(3) 加1指令(5条)INC AINC A ;A+1AA+1A,影响,影响P P标志标志INC RnINC Rn ;Rn+1RnRn+1RnINC
39、directINC direct;(direct)+1(direct)(direct)+1(direct)INC RiINC Ri ;(Rn)+1(Rn)(Rn)+1(Rn)INC DPTRINC DPTR ;DPTR+1DPTRDPTR+1DPTR功能很简单,就是将后面目标中的值加功能很简单,就是将后面目标中的值加1 1。例:例:A=12HA=12H,R0=33HR0=33H,(21H)=32H(21H)=32H, (34H)=22H(34H)=22H,DPTR=1234HDPTR=1234H。连续执行下面的指令:连续执行下面的指令: INC AINC A INC R0 INC R0 INC
40、 21H INC 21H INC R0 INC R0 INC DPTR INC DPTR; A=13HA=13H; R0=34HR0=34H;(;(21H21H)=33H=33H;(;(34H34H)=23H=23H; DPTR=1235HDPTR=1235H2. 减法指令(8条)SUBB ASUBB A,RnRn ; A ARnRnCYACYASUBB ASUBB A,directdirect ; A A(direct )(direct )CYACYASUBB ASUBB A,RiRi ; A A(Ri)(Ri)CYACYASUBB ASUBB A,#data#data ; A Adatad
41、ataCYACYA将将A A中的值减去源操作数所指内容以及进位位中的值减去源操作数所指内容以及进位位C C中的中的值,最终结果存在值,最终结果存在A A中。中。如:如: SUBB ASUBB A,R2R2设:设: A=C9HA=C9H,R2=55HR2=55H,CY=1CY=1,执行指令之后,执行指令之后,A A中的值为中的值为73H73H。(1) 带借位的减法指令(4条)说明说明:没有不带借位的减法指令没有不带借位的减法指令,如果需,如果需要做要做不不带位的减法指令(在做第一次相减带位的减法指令(在做第一次相减时),只要将时),只要将CYCY清零清零即可。即可。对带符号数对带符号数,要注意,
42、要注意OVOV标志。标志。OV=1OV=1,出错出错。2. 减1指令(4条)DEC ADEC A;A-1A,A-1A,影响影响P P标志标志DEC RnDEC Rn;Rn-1RnRn-1RnDEC directDEC direct ;(direct)-1(direct)(direct)-1(direct)DEC RiDEC Ri;(Rn)-1(Rn)(Rn)-1(Rn) 与加与加1 1指令类似。指令类似。DA ADA A在进行在进行BCDBCD码加法运算时,跟在码加法运算时,跟在ADDADD和和ADDCADDC指指令之后,用来对令之后,用来对BCDBCD码加法运算结果进行码加法运算结果进行自动
43、修自动修正正。例:例:A=0001 0101 BCDA=0001 0101 BCD(代表十进制数(代表十进制数1515) ADD AADD A,#8#83. 十进制调整指令(1 1条)条); A=1DH; A=1DH,按二进制规律加,按二进制规律加; A=23H; A=23H,按十进制规律加,按十进制规律加DA ADA A 【例【例3-12】编写程序完成】编写程序完成68+89的的BCD加法程加法程序,并对调整过程进行分析。序,并对调整过程进行分析。 解:二进制加法和十进制调整过程为:解:二进制加法和十进制调整过程为:0 1 1 0 1 0 0 01 0 0 0 1 0 0 11 1 1 1
44、0 0 0 1+)0 1 1 01 1 1 1 0 1 1 10 1 1 0 0 0 0 00 1 0 1 0 1 1 1+)+)01低4位9,加6调整高4位9,加60调整CY=14. 乘法指令(1条)MUL AB MUL AB ;A ABBABBA此指令的功能是将此指令的功能是将A A和和B B中的两个中的两个8 8位无符号数位无符号数相乘,两数相乘结果一般比较大,因此最终结果相乘,两数相乘结果一般比较大,因此最终结果用用1 1个个1616位数来表达,其中高位数来表达,其中高8 8位放在位放在B B中,低中,低8 8位位放在放在A A中。在乘积大于中。在乘积大于FFHFFH时,时,0V0V置
45、置1 1,否则,否则OVOV为为0 0;而而CYCY总是总是0 0。例:例: A=4EHA=4EH,B=5DHB=5DH,执行指令,执行指令MUL ABMUL AB后,后,乘积是乘积是1C56H1C56H,所以在,所以在B B中放的是中放的是1CH1CH,而,而A A中放的中放的则是则是56H56H。OV= OV= P= P= 1 1 0 05. 除法指令(1 1条)条)DIV ABDIV AB;A AB B的商的商AA,余数,余数BB此指令的功能是将此指令的功能是将A A中的中的8 8位无符号数除位无符号数除B B中的中的8 8位位无符号数(无符号数(A/BA/B)。除了以后,商放在)。除了
46、以后,商放在A A中,余数放中,余数放在在B B中。中。CYCY和和OVOV都是都是0 0。如果在做除法前。如果在做除法前B B中的值是中的值是00H00H,也,也就是除数为就是除数为0 0,那么,那么0V=10V=1。如如:A=11HA=11H,B=04HB=04H,执行指令,执行指令DIV ABDIV AB后,后,结果结果:A=04HA=04H,B=1B=1。CY=OV= P=001 算数运算类指令对标志位的影响算数运算类指令对标志位的影响 : 影 响 标 志 指令助记符 Cy OV AC 备 注 ADD (加) ADDC (带进位加) SUBB (带借位减) MUL (乘) 0 DIV
47、(除) 0 DA (二进制调整) “”表示有影响(可置1 或清0);“0”表示总清0 练习练习试编写试编写1234H-0FA3H1234H-0FA3H的程序段,将结果高的程序段,将结果高8 8位存入位存入51H51H, 低低8 8位存入位存入50H50H单元。单元。MOV AMOV A,#34H#34HSUBB ASUBB A,#0A3H#0A3HMOV 50HMOV 50H,A AMOV AMOV A,#12H#12HSUBB ASUBB A,#0FH#0FHMOV 51HMOV 51H,A ACLR C3.3.3 逻辑运算指令 (24条)主要用于对主要用于对2 2个操作数按个操作数按位进行
48、逻辑位进行逻辑操作,结操作,结果送到果送到A A或直接寻址单元。或直接寻址单元。v 主要操作主要操作 与、或、异或、移位、取反、清零等。与、或、异或、移位、取反、清零等。v 对标志位的影响对标志位的影响 除了目的操作数为除了目的操作数为ACCACC的指令影响奇偶标的指令影响奇偶标志志P P外,一般不影响标志位。外,一般不影响标志位。Logic Operations1逻辑逻辑“与与”指令(指令(6条)条) ANL A,Rn ;ARnAANL A,direct ;A(direct)AANL A,Ri ;A(Ri)AANL A,#data ;AdataAANL direct,A ;(direct)A
49、(direct)ANL direct,#data ;(direct)data(direct)影响影响P P标志标志例:例:71H71H和和56H56H相与:相与:01110001 01110001 (71H71H) )01010110 01010110 (56H56H) 01010000 01010000 即即50H50H后两条指令,若直接地址为后两条指令,若直接地址为I/OI/O端口,则为端口,则为“读改读改写写”操作。操作。 ANd Logic Instruction例:例:MOV AMOV A,#45H#45HMOV R1MOV R1,#25H#25HMOV 25HMOV 25H,#79
50、H#79HANL AANL A,R1R1ANL 25HANL 25H,#15H#15HANL 25HANL 25H,A A;A=45HA=45H;R1=25HR1=25H;(25H)=79H(25H)=79H;45H79H = 41HA45H79H = 41HA; 79H15H = 11H (25H)79H15H = 11H (25H); 11H41H = 01H (25H)11H41H = 01H (25H)实验验证一下本例2. 2. 逻辑或指令(逻辑或指令(6 6条)条)ORL A,Rn ;ARnAORL A,direct ;A(direct)AORL A,Ri ;A(Ri)AORL A,
51、#data;AdataAORL direct,A;(direct)A(direct)ORL direct,#data ;(direct)data(direct)影响影响P P标志标志例:例:71H和和56H相或:相或:01110001 (71H) ) 01010110 (56H) 01110111 即即77H后两条指令,若直接地址为后两条指令,若直接地址为I/OI/O端口,则为端口,则为“读改读改写写”操作。操作。 OR Logic Instruction例:MOV AMOV A,#45H#45HMOV R1MOV R1,#25H#25HMOV 25HMOV 25H,#39H#39HORL A
52、ORL A,R1R1ORL 25HORL 25H,#13H#13HORL 25HORL 25H,A A;A=45HA=45H;R1=25HR1=25H;(25H)=39H(25H)=39H;45H39H = 7DHA45H39H = 7DHA;39H13H = 3BH (25H)39H13H = 3BH (25H); 3BH7DH =7FH (25H)3BH7DH =7FH (25H)实验验证一下本例例:例:71H71H和和56H56H相异或:相异或: 01110001 01110001 (71H71H) ) 01010110 ) 01010110 (56H56H) 3. 逻辑异或指令(6 6
53、条)条)XRL A,Rn ;A RnAXRL A,direct ;A (direct)AXRL A,Ri ;A (Ri)AXRL A,#data ;A dataAXRL direct,A ;(direct) A(direct)XRL direct,#data ;(direct) data(direct)影响影响P标志标志00100111 00100111 即即27H27H后两条指令,若直接地址为后两条指令,若直接地址为I/OI/O端口,则为端口,则为“读改读改写写”操作。操作。 eXclusive-oR Logic Instruction例:MOV AMOV A,#45H#45HMOV R1M
54、OV R1,#25H#25HMOV 25HMOV 25H,#39H#39HXRL AXRL A,R1R1XRL 25HXRL 25H,#13H#13HXRL 25HXRL 25H,A A;A=45HA=45H;R1=25HR1=25H;(25H)=39H(25H)=39H; 45H39H = 7CHA45H39H = 7CHA; 39H13H = 2AH (25H)39H13H = 2AH (25H);2AH7CH =56H (25H)2AH7CH =56H (25H)实验验证一下本例4. 清清0 0与与取反指令(2 2条)条)取反:取反:CPL ACPL A ;/AA/AA例:例:若若A=5
55、CHA=5CH,执行,执行CPL ACPL A 结果:结果:A=A3HA=A3H清清0 0:CLR ACLR A ;0A0A3.3.4 循环移位指令(4 4条)条)RL ARR ARLC ARRC AA.7 A.0A.7 A.0A.7 A.0CYCYA.7 A.0后两条指令,影响后两条指令,影响P P标志和标志和CYCY。 Rotate Logic instruction例:若若A=5CHA=5CH,CY=1CY=1,执行,执行RLC ARLC A后,后,v 对对RLCRLC、RRCRRC指令,在指令,在CY=0CY=0时时 RLCRLC相当于相当于乘乘以以2 2 RRCRRC相当于相当于除除
56、以以2 2结果:结果:A=B9HA=B9H,CY=0CY=0,P=1P=10101 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位状态,通过位状态,通过P1P1口的高口的高4 4位输位输出,出, P1P1口的低口的低4 4位状态不变
57、。位状态不变。共有控制程序转移类指令共有控制程序转移类指令( (不包括位操作类的转移不包括位操作类的转移指令指令) )。此类指令一般不影响。此类指令一般不影响PSWPSW。包括以下类型:包括以下类型:无条件转移和条件转移无条件转移和条件转移相对转移和绝对转移相对转移和绝对转移长转移和短转移长转移和短转移调用与返回指令调用与返回指令 短转移类指令:短转移类指令:AJMP AJMP addr11addr11 长转移类指令:长转移类指令:LJMP LJMP addr16addr16 相对转移指令:相对转移指令:SJMP SJMP relrel 间接转移指令:间接转移指令:JMP JMP A+DPTR
58、A+DPTR(1 1)上面的前三条指令,统统理解成:上面的前三条指令,统统理解成:PCPC值改值改变,即跳转到一个标号处。变,即跳转到一个标号处。 那么他们的区别何在呢?那么他们的区别何在呢?v跳转的范围不同。跳转的范围不同。 短转移类指令:短转移类指令:AJMP AJMP addr11addr11 长转移类指令:长转移类指令:LJMP LJMP addr16addr16 相对转移指令:相对转移指令:SJMP SJMP relrel转移范围转移范围:2KB2KB64KB64KB-128-128+127+127v指令构成不同。指令构成不同。 AJMPAJMP、LJMPLJMP后跟的是后跟的是绝对
59、地址绝对地址, 而而SJMPSJMP后跟的是后跟的是相对地址相对地址。 v指令长度不同指令长度不同v 原则上,所有用原则上,所有用SJMPSJMP或或AJMPAJMP的地方都可以用的地方都可以用 LJMPLJMP来替代。来替代。间接转移指令:间接转移指令:JMPJMP A+DPTRA+DPTR 这条指令的用途也是跳转,转到什么地方去呢?这条指令的用途也是跳转,转到什么地方去呢?这可不能由标号简单地决定了。这可不能由标号简单地决定了。 转移地址由转移地址由A+DPTRA+DPTR形成,并直接送入形成,并直接送入PCPC。指令对指令对A A、DPTRDPTR和标志位均无影响和标志位均无影响。 本指
60、令可代替众多的判别跳转指令,又称为本指令可代替众多的判别跳转指令,又称为散散转指令转指令,多用于多分支程序结构中。,多用于多分支程序结构中。(2 2)第四条指令与前三条指令相比有所不同第四条指令与前三条指令相比有所不同例例: MOV DPTRMOV DPTR,#TAB #TAB ;将;将TABTAB代表的地址送入代表的地址送入DPTRDPTR JMP A+DPTR JMP A+DPTR ;跳转;跳转TAB: AJMP ROUT0 TAB: AJMP ROUT0 ;跳转;跳转ROUT0ROUT0开始的程序段开始的程序段TAB+2: AJMP ROUT1 AJMP ROUT1 ;跳转;跳转ROUT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论