




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片微机原理及应用第3章 MCS-51单片机指令系统 3.1 指令格式 3.2 寻址方式 3.3 数据传送类指令 3.4 算术运算类指令 3.5 逻辑运算类指令 3.6 位操作类指令 3.7 控制转移类指令3.8 MCS-51汇编语言程序设计 第3章 MCS-51单片机指令系统 3 MCS-51单片机指令系统教学要求1、掌握MCS-51单片机指令系统的寻址方式、指令类型。2、熟练掌握MCS-51单片机的指令系统,包括数据传输、算术运算、逻辑运算、控制转移及位操作等类型指令。3、掌握一定的分析和编制一般单片机程序的能力。3 MCS-51单片机指令系统指令:主机能直接识别和接受并指挥计算机执行某种
2、操作的命令。指令系统:指令的集合。指令可以用两种语言形式表示: 机器语言:用二进制代码表示,能被主机直接识 别,但不易记忆和阅读。 汇编语言:可以反映指令的功能和主要特征,用助 记符,可以方便记忆。3.1 指令格式 MCS-51汇编指令由操作码助记符字段和操作数字段所组成。指令格式如下:标号:操作码助记符 (目的操作数),(源操作数);注释例如: SS: MOV A,#4FH ;立即数4FH送A标号:用符号标明该指令所在的符号地址,根据实际需要设置。在其他指令的操作数中可以引用该标号作为符号地址,便于控制程序的转向或寻址。标号以英文字母开头的字母、数字和某些规定的特殊符号的序列,一般不超过6个
3、符号,否则,超过部分在源程序汇编时将被删去。3.1 指令格式操作码:用来规定指令所完成的操作,用规定的汇编语言助记符表示。操作数:表示操作的对象,可能是一个具体的数据,也可能是指出取得数据的地址或符号。分为目的操作数和源操作数两部分,中间用“,”分开。操作数可以有1、2、3个或者没有(如空操作指令) 。注释:对该指令功能的解释,可有可无。 3.1 指令格式数据操作 MCS-51系列单片机的CPU能对位、半字节、字节和双字节数据进行各种操作,它们包括数据传送、算术运算、逻辑运算、布尔处理和控制转移等操作。指令类型 MCS-51汇编语言有111种指令,42种操作码助记符用来描述33种操作功能。按执
4、行时间分:有单周期指令;双周期指令;四周期指令;按功能分类: 数据传送指令;算术运算指令;逻辑运算指令; 位操作指令;控制转移指令。3.1 指令格式 按字节数分: 有单字节指令;双字节指令;三字节指令;单字节指令: 如:双字节指令 如:3.1 指令格式三字节指令 如:3.2 寻址方式 寻址方式:是在指令中给出的寻找操作数地址的方法。51单片机共有7种寻址方式:1、寄存器寻址方式:在指令中将指定寄存器的内容作为操作数。在这种寻址中,用符号名称表示寄存器。例如:MOV A,R3寻址范围:(1)四个寄存器组共32 个通用寄存器 (2) 部分特殊功能寄存器: A,B,DPTR,Cy(位)。3.2 寻址
5、方式2、直接寻址方式:在指令中直接给出操作数单元的地址。例如:MOV 65H,A 寻址范围:内部RAM地址空间 SFR地址空间 (只能用直接 位地址空间(20H2FH) 寻址方式)3.2 寻址方式3、寄存器间接寻址方式:在指令中给出的寄存器内容是操作数的地址,从该地址中取出的数才是操作数。表示形式:应在寄存器名称前面加。例如:MOV A,R0 寻址范围:工作寄存器R0、R1堆栈指针SP数据指针DPTR寄存器间接寻址的寻址范围:1) 内部低128字节单元(只能使用R0、R1作间址寄存器,形式Ri,i=0,1)。2) 外部数据存储器64KB,使用DPTR作间址寄存器。形式为DPTR, 如,MOV
6、X A, DPTR把 DPTR指定的片外RAM单元的内容送A.3) 外部数据存储器256B,外部低256B单元用R0、R1作间址寄存器寻址) MOVX A, Ri 。-寻址范围13*3.2 寻址方式4、立即寻址方式:在指令中直接给出操作数,出现在指令中的操作数叫立即数。为区别于直接地址,立即数前加上“#”。例如:MOV A,#62H寻址范围:程序存储器立即数。3.2 寻址方式5、变址间接寻址方式:以DPTR或PC作基址寄存器,累加器A作变址寄存器,以两者内容相加。形成的16位程序存储器地址作为操作数地址。例如:MOVC A,A+DPTR (A)=54H (DPTR)=1256H-基址变址寻址再
7、如:MOVC A, A+PC ;PC+1PC,(A+PC)A16*3.2 寻址方式寻址范围:只能对程序存储器进行寻址,或者说是专 门针对程序存储器的寻址方式。变址间接寻址指令只有三条: MOVC A,A+DPTR (适用于查表 MOVC A,A+PC 操作) JMP A+DPTR 这三条指令都为单字节指令,这种寻址方式用于查表操作。3.2 寻址方式6、相对寻址方式:以PC的当前值为基准,加上指令中给出的相对偏移量(rel)形成新的有效转移地址。其中,rel是一个带符号的8位二进制数,能表示的范围是-128+127个字节单元之间。;对照一下第34张PPT 目的地址=转移指令所在地址+转移指令字节
8、数+rel例如:JC 75H (设Cy=1)若rel为负数, 计算时用 补码运算3.2 寻址方式7、位寻址方式:可以对数据位进行操作。例如:CPL P1.0 MOV C,2BH ;(把位寻址区的2BH位状态 送累加位C)寻址范围:片内RAM中的位寻址区可位寻址的SFR的位指令中使用符号说明Rn:当前选定工作寄存器组的R0R7工作寄存器。其中n=07。#data:8位不带符号的二进制立即数, “”为立即数标识符(称为前缀)。data l6:16位二进制立即数。data:8位二进制码内部数据存储器单元地址。它可以是内部RAM(0127或0256)的某个单元地址或一个特殊功能寄存器的地址。Ri:以当
9、前工作寄存器R0或R1作间接寻址寄存器,以间接寻址(0256)数据存储器单元。其中“”为间接寻址标识符(称前缀),i0或1。addr 16:16位二进制码地址。提供长调用(LCALL)或长转移(LJMP)指令16位二进制码地址,使之可转向或调用64KB程序存储器地址空间的任何单元。 指令中使用符号说明addr 11:11位二进制码地址。提供绝对调用(ACALL)或绝对转移(AJMP)指令低11位(010)进制码地址,高5位维持原值不变,因而只能使程序转向或调用包含该ACALL或 AJMP指令的下一条指令的第一个字节在内的2KB范围内的程序存储器地址空间。 direct:8位直接寻址方式符号。
10、rel:带符号的8位二进制码偏移量(需用2的补码表示)的符号。常用于相对转移指令中,其转移范围相对于当前PC值的-128 +127个字节单元的地址空间。bit:布尔(位)处理指令的直接寻址位符号。表示可直接位寻址的内部RAM或特殊功能寄存器的位地址。C:最高进位标志位或布尔(位)处理累加器。 指令中使用符号说明:表示程序走向。:表示数据传送方向。 :表示数据交换。(X):表示X单元中的内容。(X):表示以X单元中的内容为地址进行间接寻址。 指令介绍 51单片机的指令系统,共有111条指令,按其功能可分为五大类: (1)数据传送类指令(28条) (2)算术运算类指令(24条) (3)逻辑运算类指
11、令(25条) (4)位操作(布尔)类指令(17条) (5)控制转移类指令(17条) 3.2 指令系统MCS-51指令系统共有29条数据传送指令。助记符有MOV、MOVC、MOVX、XCH、XCHD、SWAP、PUSH、POP。数据传送指令一般的操作是把源操作数传送到目的操作数,指令执行完成后,源操作数不变,目的操作数等于源操作数。数据传送指令不影响标志Cy、AC和OV,但可能会对奇偶标志P有影响。-传送指令24*3.3 数据传送类指令3.3 数据传送类指令数据传送类指令的功能: 将指令中源操作数传送到目的操作数。指令执行后,源操作数不改变,而目的操作数修改为源操作数,或者源操作数与目的操作数互
12、换,即源操作数变成目的操作数,目的操作数变成源操作数,保存目的操作数不被丢失。数据传送类指令不影响标志位,即不影响C、AC、OV,但不包括检验累加器A奇偶性的标志位P。3.3 数据传送类指令一、一般传送类指令汇编语言格式:MOV (目的操作数),(源操作数)功能:源操作数单元内容送到目的操作数单元中,源操作数单元内容不变。3.3 数据传送类指令说明:Ri中,i=0或1。1、以累加器A为目的操作数的指令2、以Rn为目的的操作数的指令MOV A,Rn;A(Rn)MOV A,direct;A(direct)MOV A,Ri;A(Ri)MOV A,#data;A#dataMOV Rn,A;Rn (A)
13、MOV Rn,direct;Rn (direct)MOV Rn,#data ;Rn#data3.3 数据传送类指令3、以直接寻址的单元为目的操作数指令4、以寄存器间接寻址的单元为目的操作数指令MOV Ri,A ;(Ri)(A)MOV Ri,direct;(Ri)(direct)MOV Ri,#data;(Ri)#dataMOV direct,A;direct(A)MOV direct,Rn;direct (Rn)MOV direct, direct;direct (direct)MOV direct, Ri ;direct(Ri)MOV direct, #data ;direct#data3.
14、3 数据传送类指令 上述MOV指令格式中,目的操作数在前、源操作数在后。另外,累加器A是一个特别重要的8位寄存器,CPU对它具有其他寄存器所没有的操作指令,下面将介绍的加、减、乘、除指令都是以A作为操作数的,Rn为CPU当前选择的寄存器组中的R0R7,在指令编码中rrr=000111,分别对应于R0R7。直接地址指出的存储单元内部RAM的007FH和特殊功能寄存器。在间接寻址中,用R0或R1作地址指针,访问内部RAM的000FFH这256个单元。3.3 数据传送类指令 例:设(70H)=60H,(60H)=20H,P1口为输入口,当前的输入状态为B7H,执行下面的程序: MOV R0, #70
15、H MOV A, R0 MOV R1, A MOV B, R1 MOV R0, P1 (R0)=70H(A)=60H (R0)=70H(R1)=60H (A)=60H(B)=20H (R1)=60H(70H)=B7H (P1)=B7H结果:(R0)=70H (A)=60H (R1)=60H (B)=20H (P1)=B7H (70H)=B7H 3.3 数据传送类指令例:设内部RAM的30H单元内容为40H,40H单元内容为10H,P1口作输入口,其输入的数据为0CAH(11001010B),经下列程序执行后的结果是什么?(R0)=30H(A)=40H ,(R0)=30H(R1)=40H,(A)
16、=40H(B)=10H,(R1)=40H(40H)=0CAH,(P1)=0CAH(P2)=0CAH,(P1)=0CAH(R0)=30H,(A)=(R1)=40H,(B)=10H,(40H)=0CAH,(P2)=0CAHMOV R0,#30HMOV A,R0MOV R1,AMOV B,R1MOV R1,P1MOV P2,P1结果:3.3 数据传送类指令二、16位数据传送指令(通常为访问外部RAM的目标地址)MOV DPTR,#data16;DPTR#data015 DPH#data815 DPL#data07助记符 功能说明MOV DPTR, #data16;dataHDPH,dataLDPL功
17、能:将一个16位的立即数送到DPTR中去。其中高8位送入DPH,低8位送入DPL。如:MOV DPTR, #1234H;指令执行后DPH中的值为 12H,DPL中的值为34H如果执行:MOV DPH, #12H MOV DPL, #34H 就相当于执行了MOV DPTR, #1234H。16位数的传递指令(1条)33*助记符 功能说明MOVX A, Ri ;(Ri) A寄存器Ri指向的片外RAM单元中的内容送到累加器A中MOVX Ri, A ;A(Ri)累加器A中内容送到寄存器Ri指向的片外RAM单元中MOVX A, DPTR ;(DPTR) A数据指针指向的片外RAM单元中的内容送到累加器A
18、中MOVX DPTR, A ;(A)(DPTR)累加器A中内容送到数据指针指向的片外RAM单元中累加器A与片外RAM数据传送指令(4条)34*CPU与外部数据存储器进行数据传送时,必须使用外部传送指令MOVX,且要按下列规则操作: CPU与外部数据存储器之间进行数据传送都是通过累加器A完成的; 访问外部存储器必须采用寄存器间接寻址,只能用R0、R1和DPTR三个间接寻址寄存器; R0、R1是8位寄存器,访问片外RAM时只能访问低256个单元; DPTR是16位寄存器,它可以访问片外RAM的全部64KB的空间。35*例 将外部RAM的0100H单元中内容送入外部RAM的0200H单元中。MOVD
19、PTR, #0100HMOVXA, DPTRMOVDPTR, #0200HMOVXDPTR, A 必须先将0100H单元中的内容读入A,然后再送到0200H单元中去。-传送指令应用36*助记符 功能说明MOVC A, A+DPTR ;(A)+(DPTR) A表格地址 ;单元中的内容送到累加器A中MOVC A, A+PC;(PC)+1PC,(A)+(PC) A ;表格地址单元中的内容送到累加器A中功能:将ROM中的数据送到A中。常用此指令来查一个已存储在ROM中的数据表格。这组指令也称为查表指令。读程序存储器指令(2条)37*以DPTR或PC为基址,以A为变址,在不断修改A中内容(等值增量)的同
20、时,执行该指令,实现对ROM中存储的数据块读取。以PC为基址时,不用设置PC的值,只需根据A的内容,就可以查出表格中的数据。但表格只能放在该条查表指令后面的256个单元之中,表格的大小受到限制,而且表格只能被一段程序所利用。而以DPTR为基址时,表格的大小和位置可以在64 KB的ROM中任意安排,并且表格可被任意程序块所共享。说明:查找到的结果放在A中,因此,这类指令执行前后,A中的值会改变。38*例3-2 寄存器R0中有一个110的数, 110平方表存放在0100H开始的ROM中,用查表指令编出能实现查出该数平方值的程序。MOVDPTR, #0100HMOVA, R0MOVCA, A+DPT
21、R.ORG0100;ORG后面数据块的起始地址DB0,1, 4, 9, 16, 25, 36DB49, 64, 81, 100 ;DB是定义字节指令-传送指令应用39*3.3 数据传送类指令例ORG 8000HMOV A, #30H ;双字节指令MOVC A, A+PC ;单字节指令 ;对照一下第16张PPTORG 8030HDB ABCDEFGHIJ 上面的查表指令执行后,将8003H+30H=8033H所对应的程序存储器中的ASCII码D(44H)送A。 例 设(DPTR)=8100H,(A)=40H,执行指令:MOVC A, A+DPTR结果:将程序存储器中8140H单元中内容送入累加器
22、A。3.3 数据传送类指令三、栈操作类指令(1)入栈(不影响标志位)例:设(SP)=60H,(ACC)=30H,(B)=70H,执行下述指令:PUSH direct ;SP(SP)+1 ;(SP)(direct)PUSH ACC PUSH B 结果:进栈指令用于保护CPU现场。(61H)=30H,(62H)=70H,(SP)=62H;(SP)+1,61H (SP),(ACC) 61H;(SP)+1,62H (SP),(B) 62H3.3 数据传送类指令(2)出栈(不影响标志位)POP direct ;direct(SP) SP (SP) 1例 :设(SP)=62H,(62H)=70H,(61H
23、)=30H,执行下述指令:POP DPH ;(SP)DPH,(SP)-1SPPOP DPL ;(SP)DPL,(SP)-1SP结果:(DPTR)=7030H,(SP)=60H退栈指令用于恢复CPU现场。3.3 数据传送类指令四、交换指令(3)累加器A高4位和低4位内容互换指令(2)半字节交换指令(1) 字节交换指令XCH A, Rn;(A)(Rn)XCH A, direct ;(A) (direct)XCH A, Ri;(A) (Ri)XCHD A, Ri ;(A03) (Ri)03) ;各自的高4位不变SWAP A;(A03) (A47)例 假设A中内容为34H,R0指向的单元内容为56H。
24、执行下列指令后看结果。MOV R6, #29H ;R6=29HXCH A, R6 ;A=29H,R6=34HSWAP A ;A=92HXCH A, R6 ;A=34H,R6=92HXCHD A, R0 ;A=36H,(R0)=54H-传送指令应用44*作业:1、教材P110,例3-1,3-2,3-3,3-4 P142,例4-12、习题集第3章第3题20题3.2.2 算术运算类指令MCS-51的算术运算指令共有24条。助记符有ADD、ADDC、SUBB、DA、INC、DEC、MUL、DIV。算术运算主要是执行加、减、乘、除法四则运算。46*3.4 算术运算类指令3.4 算术运算类指令 51单片机
25、的算术/逻辑运算部件(ALU)仅执行无符号二进制整数的算术运算。除了加1和减1指令外,算术运算结果将使进位标志(Cy)、半进位标志(AC)、溢出标志(OV)置位或复位。1、不带进位的加法指令(影响AC、C、OV、P)一、加法类指令ADD A, Rn;A(A)+(Rn)ADD A, direct;A (A)+(direct)ADD A, Ri;A (A)+(Ri)ADD A, #data;A (A)+#data如果位7有进位输出,则置“1”进位CY;否则清“0”CY。如果位3有进位输出,置“1”辅助进位AC;否则清“0”AC。如果位6有进位输出而位7没有或者位7有进位输出而位6没有,则置位溢出标
26、志OV;否则清“0”OV。3.4 算术运算类指令举例:设(A)=C3H,(R0)=AAH,执行指令: ADD A,R0结果:和中1的个数为奇数时P=1,否则,P=0。3.4 算术运算类指令2、带进位加法指令(影响AC、C、OV、P) 常用于多字节加法3、增量(加1)指令(不影响标志位)ADDC A, Rn;A (A)+(C)+(Rn)ADDC A, direct;A(A)+(C)+(direct)ADDC A, Ri;A(A)+(C)+(Ri)ADDC A, #data; A(A)+(C)+#dataINC A;A (A)+1INC Rn;Rn (Rn)+1INC direct ;direct
27、 (direct)+1INC Ri ;(Ri) (Ri)+1INC DPTR; DPTR (DPTR)+1ADDC A, 20H结果: 1 0 0 0 0 1 0 1 1 1 1 1 1 1 1 1 +) 1 (1) 1 0 0 0 0 1 0 13.4 算术运算类指令例 设(A)=0FFH,(R3)=0FH,(30H)=0F0H,(R0)=40H,(40H)=00H,执行指令:4、二十进制调整指令(不影响OV标志)执行本指令的操作是:根据A的原始值和PSW的状态,决定是否对A进行加06H、60H和66H的操作。结果: (A)=00H,(R3)=10H,(30H)=0F1H,(40H)=01H
28、,PSW状态不改变。INC A ;(A)=00HINC R3 ;(R3)=10HINC 30H ;(30H)=0F1HINC R0 ;(R0)=01HDA A ;DA调整累加器内容为BCD码若(A03)9或(AC)=1,则A03(A03)+06H同时,若(A47)9或(C)=1,则A47 (A47)+60H3.4 算术运算类指令 DA A 在进行BCD码加法运算时,跟在ADD和ADDC指令之后,用来对累加器A中的BCD码加法运算结果进行修正。 BCD码是用二进制表示的十进制数,一位十进制数用4位二进制数表示。用8位二进制数来表示十进制数称为压缩BCD码,简称BCD码。即高4位表示一个十进制数位
29、,低四位表示一个十进制数位。如:设A=00010101BCD(代表十进制数15) ADD A, #8 ;A=00011101B,按二进制规律相加 DA A ;A=00100011BCD(代表十进制23),调整为十进制的BCD 码 (实现按十进制规律加)十进制调整指令的调整规则: 若累加器A低4位大于9,或AC=1,则低4位加6; 若累加器A高4位大于9,或CY=1,则高4位加6; 若累加器A高4位等于9,且低四位大于9,则高4位和第四位都加6; 若累加器A的最高位因调整而产生进位时, CY=1,如果不产生进位,则保留CY调整前的状态。3.4 算术运算类指令3.2.2 算术运算类指令例:编写程序
30、完成68+89的BCD加法程序,并对调整过程进行分析。解:二进制加法和十进制调整过程为: 0 1 1 0 1 0 0 01 0 0 0 1 0 0 11 1 1 1 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+)+)0辅助进位AC=1加6调整高4位9,高4位加6调整=157?241153*3.4 算术运算类指令3.4 算术运算类指令例:设(A)=56BCD,(R5)=67BCD,执行下列指令:ADD A,R5DA A结果:(A)=23H,CY=1另见:教材P21,例2-213.4 算术运算类指令二、减法类指令1、带
31、借位减法指令(影响标志位AC、C、OV)SUBB A, Rn;A(A)-(C)-(Rn)SUBB A, direct ;A (A)-(C)-(direct)SUBB A, Ri;A (A)-(C)-(Ri)SUBB A, #data;A (A)-(C)-#data如果位7需借位,则置位CY;否则清“0”CY。如果位3需借位,则置位AC;否则清“0”AC。如果位6需借位而位7不需借位或者位7需借位而位6不需借位,则置位溢出标志OV;否则清“0”OV。第2操作数允许有寄存器寻址、直接寻址、寄存器间接寻址和立即寻址等寻址方式。3.4 算术运算类指令例 设(A)=0C9H,(R2)=54H,CY=1,
32、执行指令: SUBB A, R2 1 1 0 0 1 0 0 1 0 1 0 1 0 1 0 0 -) 1 0 1 1 1 0 1 0 0 结果:(A)=74H,CY=0,AC=0,OV=1,P=0例(Cy)=1,分析下指令的执行结果。执行下列指令后的结果? MOV A,#79H ;将79H送入A中 SUBB A,#56H ;将A中的内容与56H中的内容相减再减去CY的内容 后存入A中 解:结果为(A)=22H,(Cy)=0,(AC)=0,(OV)=0,(P)=0 111100101010110- 1001000103.4 算术运算类指令3.4 算术运算类指令2、减1指令(不影响标志位(除(A
33、)减1影响P外) )(00H-1=0FFH)DEC A;A(A)-1DEC Rn;Rn (Rn)-1DEC direct; direct (direct)-1DEC Ri;(Ri) (Ri)-13.4 算术运算类指令三、乘法类指令(影响标志位OV和C,其中C总为0,如果乘积大于255(0FFH)时,即B的内容不为0时,置位OV)四、除法类指令(影响标志位OV和C,其中C总为0,当除数B的内容为00H时,则执行结果不确定,置位OV)MUL AB;DIV AB; 3.5 逻辑运算类指令 逻辑运算包括对字节操作数和对位操作数(布尔逻辑运算)进行逻辑运算。对字节操作又包括单字节操作数和双字节操作数两类
34、。 对字节操作数进行逻辑运算时,只有RLC A和RRC A两条指令影响标志位C,其余均不影响任何标志位。2、累加器A取反指令一、单操作数逻辑运算类指令1、累加器A清0指令CLR A ;A00H CPL A;A ( )3.5 逻辑运算类指令3、累加器A循环左移指令4、累加器A连同进位位C循环左移指令RL A ;An+1(An)其中n=06 ;A0 (A7)RLC A ;An+1 (An)其中n=06 ;A0 (C),C (A7)3.5 逻辑运算类指令5、累加器A循环右移指令6、累加器A连同进位位C 循环右移指令RR A ;An(An+1)其中n=06 ;A7 (A0)RRC A ;An (An+
35、1)其中n=06 ;A7 (C),C (A0)3.5 逻辑运算类指令二、双操作数逻辑运算类指令1、逻辑“与”指令ANL指令常用来屏蔽某些不用的位。例如: ANL P1,#01100110B执行结果:将P1口锁存器的第0,3,4,7位的内容屏蔽掉。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 direct, #data ;direct (direct) #data3.5 逻辑运算类指令2、逻辑“或
36、”指令例题:将累加器A的内容送P1口的低5位,传送时不影响P1口的高3位。 ORL A, Rn;A(A)(Rn)ORL A, direct ;A(A)(direct )ORL A, Ri;A(A)(Ri)ORL A, #data ;A(A) #data ORL direct, A; direct (direct) (A) ORL direct, #data; direct (direct) #data ANL A,#00011111BANL P1,#11100000BORL P1,A3.5 逻辑运算类指令3、逻辑“异或”指令XRL A, Rn;A(A) (Rn)XRL A, direct ;A
37、(A) (direct)XRL A, Ri ;A(A) (Ri)XRL A, #data;A(A) #dataXRL direct, A;direct (direct) (A)XRL direct, #data;direct (direct) #data 3.6 位操作类指令 内部RAM的20H2FH位寻址区和特殊功能寄存器区中可位寻址的SFR可以采用布尔处理类指令进行操作。可位寻址的寄存器的位地址,可用下列方式表示:(1)直接用位地址(0255或00HFFH)表示。(2)采用字节地址位数方式表示,两者之间用“.”隔开。例如:25H.5等。(3)对于位寻址寄存器,可以用字节寄存器名加位数来表示
38、,两者之间用“.”隔开,例如:P0.5,PSW.7等。(4)位寄存器的定义名称,如F0等,例如D5H、F0、D0.5、PSW.5表示的是同一位,(见下一页图)3.6 位操作类指令3.6 位操作类指令 布尔(位)处理类指令除了对进位位C操作的指令对进位标志有影响外,其他不影响标志位。一、位变量传送指令MOV C, bit ;C(bit)MOV bit, C ;bit(C)例3-30MOV C, 06H ;(20H).6CYMOV P1.0, C ;CYP1.0结果:(20H).6P1.03.6 位操作类指令二、位变量修改指令1、位清0指令CLR C;C0CLR bit ;bit0例:P1口原写入
39、内容为01011101B,执行指令 CLR P1.2 结果: (P1)=01011001B3.6 位操作类指令2、位置1指令SETB C;C1SETB bit ;bit1例:设(C)=0,(P1)=00110100B,执行指令 SETB C SETB P1.0执行结果:(C)=1,(P1)=00110101B3.6 位操作类指令3、位取反指令CPL C;CCPL bit;bit例:(P1)=01011101B,执行 CPL P1.1 CPL P1.2执行结果:(P1)=01011011B3.6 位操作类指令三、布尔(位)逻辑运算指令1、位逻辑“与”指令ANL C, bit ; C (C)(bi
40、t)ANL C, /bit ; C (C)( )例 设P1为输入口,P3.0作输出口,执行下列命令:MOV C, P1.0 ;(P1.0)CANL C, P1.1 ;(C)(P1.1)C ANL C, /P1.2 ;(C) CMOV P3.0, C ;(C)P3.0结果:P3.0=(P1.0)(P1.1)3.6 位操作类指令2、位逻辑“或”指令ORL C, bit;C(C)(bit)ORL C, /bit ;C(C)例 设P1口为输出口,执行下述指令:MOV C, 00H ;(20H).0CORL C, 01H ;(C)(20H).1CORL C, 02H ;(C)(20H).2CORL C,
41、 03H ;(C)(20H).3CORL C, 04H ;(C)(20H).4CORL C, 05H ;(C)(20H).5CORL C, 06H ;(C)(20H).6CORL C, 07H ;(C)(20H).7CMOV P1.0, C ;(C)P1.0结果:内部RAM的20H单元中只要有一位为1,P1.0输出就为高电平。3.7 控制转移类指令控制转移类指令有两种:无条件转移、条件转移。一、无条件转移类指令AJMP addr11 ;PC(PC)+2 PC010addr010 (PC 1115)不变 这是2K字节范围内的无条件转跳指令,程序转移到指定的地址。该指令在运行时先将PC+2,然后通
42、过把PC的高5位和指令第一字节高3位以及指令第二字节相连(参见教材指令编码)(PC15PC14PC13PC12PC11a10a9a8a7a6a5a4a3a2a1a0)而得到转跳目的地址送入PC。因此,目标地址必须与它下面的指令存放地址在同一个2K字节区域内。3.7 控制转移类指令3.7 控制转移类指令 如:(PC)=0456H, 标号JMPADR指向0123H单元 AJMP JMPADR ;程序转向0123H单元执行3.7 控制转移类指令2 相对转移指令 SJMP rel ;PC(PC)+2 PC(PC)+rel 说明:rel是一个带符号的8位二进制数,转移范围是-128+127个字节单元。例
43、如:当前执行指令地址为(PC)=0111H,rel=23H,执行指令 SJMP rel执行结果:程序将转移到(PC)=(PC)+2+23H=0136H处执行程序。例 KRD: SJMP PKRD 如果KRD标号值为0100H,即SJMP这条指令的机器码存放于0100H和0101H这两个单元中;标号PKRD值为0123H,即转跳的目标地址为0123H,则指令的第2个字节(相对偏移量)应为:rel = 0123H0102H=21H3.7 控制转移类指令3 长转移指令 LJMP addr16 ;PCaddr015 由于程序直接提供16位转移目标地址,因而使程序可在整个64KB程序存储器寻址空间内任意
44、选择转移目标,为编程带来方便。例 执行指令: LJMP 8100H结果使程序转移到8100H,不管这条长跳转指令存放在什么地方。 3.7 控制转移类指令4 间接转移指令 JMP A+DPTR ;PC(A)+(DPTR) 这条指令的功能是把累加器中8位无符号数与数据指针DPTR中的16位数相加(模216),结果作为下条指令地址送入PC,不改变累加器和数据指针内容,也不影响标志。利用这条指令能实现程序的散转。3.7 控制转移类指令例见教材P1003.7 控制转移类指令二、条件转移指令 条件转移指令是依某种特定条件转移的指令。条件满足才转移相当于执行一条相对转移指令,条件不满足时则顺序执行下面的指令
45、。目的地址在以下一条指令的起始地址为中心的256字节范围中(-128+127B)。当条件满足时,把PC加到指向下一条指令的第1个字节地址,再把有符号的相对偏移量加到PC上,计算出转向地址。JZ rel ;PC(PC)+2 当(A)=全“0”,则PC(PC)+rel 当(A)全“0”,则程序顺序执行JNZ rel ; PC(PC)+2 当(A)全“0”,则PC(PC)+rel 当(A)=全“0”,则程序顺序执行说明:以上两条指令均对累加器A的内容进行检测。1、测试条件符合转移指令 3.7 控制转移类指令JC rel ;(PC)(PC)+2 当(C)=1,则PC(PC)+rel 当(C)=0,则程
46、序顺序执行JNC rel; (PC)(PC)+2 当(C)=0,则PC(PC)+rel 当(C)=1,则程序顺序执行3.7 控制转移类指令JB rel ;PC(PC)+3 当(bit)=1,则PC(PC)+rel 当(bit)=0,则程序顺序执行JNB rel ; PC(PC)+3 当(bit)=0,则PC(PC)+rel 当(bit)=1,则程序顺序执行JBC rel ; PC(PC)+3 当(bit)=1,则bit 0 ,PC(PC)+rel 当(bit)=0,则程序顺序执行例 条件转移程序结构举例。MOVA, R0JZL1MOVR1, #00HAJMPL2L1:MOVR1, #0FFHL
47、2:SJMPL2在执行上面这段程序前,如果R0=0,结果是R1=0FFH;如果R00,结果是R1=00H。把上面例子中的JZ改成JNZ后,如果R0=0,结果是R1=00H;如果R00,结果是R1=0FFH。3.7 控制转移类指令2、比较不相等转移指令 CJNE A,direct,rel ;PC(PC)+3 若(direct)(A),则 PC(PC)+rel且C1 若(direct)=(A),则顺序执行CJNE A,#data,rel ; PC(PC)+3 若#data (A),则 PC(PC)+rel且C 1 若#data =(A),则顺序执行 CJNE Rn,#data,relCJNE Ri
48、,#data,rel MOV A, R0 CJNE A, #10H, L1 ;如R010H,则转移至标号L1 MOV R1, #0 ;如R0=10H,则不转移,00HR1 AJMP L3L1: JC L2 ;如Cy=1,即R010H,0AAHR1 AJMP L3L2: MOV R1, #0FFH ;R010H,则R1=0AAH;如果R010H,则R1=0FFH。3.2.4 控制转移类指令例 比较R0中的数是否大于10H。86*3.7 控制转移类指令3、减1不为0转移指令(循环转移指令) DJNZ Rn,rel ;PC(PC)+2 Rn(Rn)-1 当(Rn)0,则PC(PC)+rel ,程序继
49、续循环 当(Rn)=0,则结束循环,程序往下执行 DJNZ direct,rel例 延时程序START: SETB P1.1 ;1P1.l DL: MOV 30H, #03H ;03H30H,置初值 DL0: MOV 31H, #0F0H ;0F0H31H,置初值DL1: DJNZ 31H, DL1 ;(31H)-131H,(31H)不为0 重复执行DJNZ 30H, DL0 ;(30H)-130H,(30H)不为0 转DL0CPL P1.1 ;P1.1求反AJMP DL ;转DL例 求01H0AH十个数的和,结果放在A中。MOV R1, #0AHCLR ALOOP: ADD A, R1DJN
50、Z R1, LOOPSJMP $ 程序段的执行过程是:将R1单元中的数连续相加,存至A中,每加一次, R1 单元中的数值减1,直至减到0,共加0AH次。例 将累加器A的低四位取反四次、高四位不变。每变换一次,从P1输出。方法一:用加1计数和CJNZ指令配合实现MOVR0, #0;计数初值送0LL:XRLA, #0FH;高4位不变,低四位取反 INCR0;次数加1 MOVP1, A;从P1输出CJNER0, #04, LL;不满四次循环RET方法二:用DJNZ指令实现MOVR0, #04H;计数初值送4LL:XRLA, #0FHMOVP1, ADJNZR0, LL;次数减1不等于0循环RET3.
51、7 控制转移类指令三、调用与返回指令 在程序设计中,常常出现几个地方都需要作功能完全相同的处理,为了减少程序编写和调试的工作量,使某一段程序能被公用,于是引入了主程序和子程序的概念,指令系统中一般都有调用子程序的指令,以及从子程序返回主程序的指令。 通常把具有一定功能的公用程序段作为子程序,在子程序的末尾安排一条返回主程序的指令。主程序转子程序以及从子程序返回的过程如图所示。 在一个程序中,往往在子程序中还会调用别的子程序,这称为子程序嵌套。二级子程序嵌套过程如图所示。 3.7 控制转移类指令图 主程序二次调用子程序示意图 图 二级子程序嵌套示意图3.7 控制转移类指令1、短调用指令 短调用指
52、令提供低11位目标地址,因此被调子程序被限制在以当前PC值为首地址的2K字节地址空间内 ,高5位地址不变。ACALL addr11 ;PC(PC)+2(本指令 SP(SP)+12个字节) (SP) (PC07) SP (SP)+1 (SP) (PC815) PC010 addr010 (PC1115) 不变3.7 控制转移类指令例:若(SP)=60H,标号MA值为0123H,子程序SUB位于0345H,则执行指令: MA: ACALL SUB结果:(SP)=62H,内部RAM中堆栈区内(61H)=25H, (62H)=01H,(PC)=0345H 执行过程:(PC)+2=0125H,压入堆栈(
53、SP)+1=60H+1=61H中压入25H,(SP)+1=61H+1=62H中压入01H,(SP)=62H。(SUB)=0345H送PC,(PC)=0345H,程序转向子程序首地址0345H单元开始执行。这里PC值的高5位内容不变,仅把123H变成345H,0123H:0000,0001,0010,00110345H:0000,0011,0100,0101寻址在包含0125H地址在内的同一个2K字节范围内。3.7 控制转移类指令2、长调用指令 该指令提供16位目标地址,以调用64K字节范围内所指定的子程序。LCALL addr16 ;PC(PC)+3 (本指令为 SP(SP)+1 3字节指令)
54、 (SP)(PC07) SP(SP)+1 (SP)(PC815) PCaddr163.7 控制转移类指令例:若(SP)=80H,标号STRT值为0100H,标号DIR值为8100H,则执行指令: STRT: LCALL DIR 结果:(SP)=82H,(81H)=03H,(82H) =01H,(PC)=8100H执行过程:(PC)+3=0103H,先后压入堆栈(SP)+1=80H+1=81H中压入03H,(SP)+1=81H+1=82H中压入01H,(SP)=82H。(DIR)=8100H送PC,(PC)=8100H,程序转向目标地址为8100H为首地址的子程序开始执行。注意:这里PC的所有位
55、均可改变,故可寻址64K范围内的存储单元。3.7 控制转移类指令3、返回类指令 按程序结构在执行完子程序后应返回到原调用指令的下一条指令处继续往下执行。因此,在子程序的结尾必须设置返回指令。(1)子程序返回指令 功能:从堆栈中弹出由调用指令压栈保护的断点地址送PC,从 而结束子程序的执行,返回到断点处(即调用的下一条 指令处)继续往下执行。 RET ;PC815(SP) SP(SP)-1 PC07(SP) SP(SP)-13.7 控制转移类指令例 若(SP)=82H,(82H)=07H,(81H)=30H,则执行指令: RET结果:(SP)=80H,(PC)=0730H,CPU从0730H开始
56、执行程序。在子程序的结尾必须是返回指令RET,才能从子程序返回到主程序。3.7 控制转移类指令(2) 中断服务子程序返回指令 RETI 这条指令除了执行RET指令的功能以外,还清除内部相应的中断状态寄存器(该触发器由CPU响应中断时置位,指示CPU当前是否在处理高级或低级中断)。因此,中断服务程序必须以RETI为结束指令。CPU执行RETI指令后至少再执行一条指令,才能响应新的中断请求。RETI ;PC 815(SP) SP(SP)-1 PC 07(SP) SP(SP)-13.7 控制转移类指令4、空操作指令 NOP ; PC (PC)+1 该指令在延迟等程序中用于调整CPU的时间而不影响状态
57、,仅仅将程序计数器PC加1,使程序继续往下执行。影响标志位的指令3.8 MCS-51汇编语言程序设计 伪指令伪指令:又称汇编程序译码指令,属说明性汇编指令。“伪”体现在汇编时不产生机器指令代码,不影响程序的执行,仅产生供汇编用的某些命令,在汇编时执行某些特殊操作。伪指令1、程序起始地址伪指令ORG 格式:ORG 其含义是:指定下面目标程序的起始地址为表达式值。表达式常为一个双字节数据。 例如: ORG 0100H START:MOV A,00H 汇编后,从START开始的目标程序,其起始地址为0100H。由于表达式0100H是立即型地址码,所以隐含地指明该程序段属绝对地址段。 伪指令注意:一个
58、源程序中,可能有多次设置程序段起始地址,因此定义空间地址应从低地址向高地址设置,不能重叠,否则将出错。若程序段前无ORG伪指令,则汇编后的目标程序将从0000H单元开始。伪指令2、数据存储说明伪指令数据存储说明伪指令的作用:是将数据存入指定的存储单元中。(1)定义字节数据伪指令DB或DEFB格式:DB 式中表达式或表达式串是指一个字节或用逗号分开的一串字节数据。其含义是将表达式或表达式串所指定的字节数据存入从标号开始的连续存储单元中。标号为可选项,它表示数据存入存储器的起始地址。 作为本语句操作数部分的表达式或表达式串,可以是数据表达式、ASCII码字符串、字节数据(其取值范围为00H0FFH)、字节数据串(其字节串长度限制在80个字节数据内)。伪指令 例如:HERE:DB 56H ;将数据56H存入HERE指
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 家庭漏水检测服务合同(2篇)
- 水牛皮购销合同范本
- 2025至2030年中国手动标准进样针市场现状分析及前景预测报告
- 2025至2030年中国悬挂式自动清洗机市场分析及竞争策略研究报告001
- 2025至2030年中国弹性罩杯行业投资前景及策略咨询报告
- 2025至2030年中国异径四通市场调查研究报告
- 2025至2030年中国床垫围边机行业投资前景及策略咨询报告
- 2025至2030年中国带液晶显示型密码键盘行业投资前景及策略咨询报告
- 2025至2030年中国市场管理信息系统市场调查研究报告
- 2025至2030年中国工艺台灯市场现状分析及前景预测报告
- 药店开展药品购进渠道检查自查报告
- 职业培训师理论知识考试题及答案
- 生猪屠宰兽医卫生检验人员理论考试题库及答案
- 离婚协议书无子女无共同财产范本2024年
- 2024版三方代付工程款协议书范本
- DL∕T 1910-2018 配电网分布式馈线自动化技术规范
- 用友离散行业细分领域铸造行业解决方案
- 2024年航空港区国际教育投资集团招聘笔试冲刺题(带答案解析)
- 山东省青岛市市北区2023-2024学年七年级下学期期中道德与法治试题
- 全国气象站点
- 闽2023-G-01先张法预应力高强混凝土管桩DBJT13-95
评论
0/150
提交评论