单片机 第三章 80C51指令系统.ppt_第1页
单片机 第三章 80C51指令系统.ppt_第2页
单片机 第三章 80C51指令系统.ppt_第3页
单片机 第三章 80C51指令系统.ppt_第4页
单片机 第三章 80C51指令系统.ppt_第5页
已阅读5页,还剩126页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、3.1 概述 3.2 80C51单片机寻址方式 3.3 80C51指令系统 3.4 本章小节 3.5 思考与练习题,第三章 80C51指令系统,3.1 概述,3.1 概述 一、指令系统与编程 1、指令 计算机进行某种操作的代码形式。 2、指令系统 一台计算机所能识别的全部指令。 3、程序 使计算机完成某种任务的一系列指令。,3.1 概述,二、 汇编语言与机器语言 1、机器语言 计算机能直接识别的由0和1组成的二进制编码指令,这种编码称为机器码。 特点: 记忆、书写、编程很不方便,不易理解,容易出错。 2、汇编语言 用助记符(操作码)、符号地址(操作数)、标号等符号表示指令的功能和特征。 特点:

2、 便于记忆、理解、分类和编程。,3.1 概述,三、汇编语言格式 1、汇编语句由4部分构成。 标号:操作码操作数;注释 2、各部分作用 “标号” 该指令的符号地址,根据需要设定。标号是以字母开始,由18个字母或数字串组成,以冒号结尾;不能用指令助记符、伪指令或寄存器名来做标号名;标号是任选的,只在需要时才设标号;一旦使用了某标号定义一地址单元,在程序的其他地方就不能随意修改这个定义,也不能重复定义。,3.1 概述,“操作码” 指令或伪指令的助记符,用来表示指令的性质。对于一条汇编语言指令,这一字段是必不可少的。 “操作数” 可以为工作寄存器名、SFR名、标号名、常数、表达式等,用以表示操作数地址

3、;根据指令功能的不同,操作数可以有一个、两个、三个或者没有,操作数之间用“,”分开;分为目的操作数和源操作数两种;为使操作数区段出现的字符和16进制数区别开来,在以字母开头的16进制数前加0,如将FFH写成0FFH(H表示此数为16进制数,二进制用B表示,十进制用D表示或省略)。,3.1 概述,“注释” 对指令的解释,可有可无。良好的注释是汇编语言程序编写中的重要组成部分。,3.1 概述,四、指令代码格式 1、指令代码(即机器语言) 指令的二进制数表示方法,是指令在存储器存储的形式。 2、根据指令代码的长度,80C51的指令可分为: 单字节指令 由8位二进制编码表示。有两种形式: (1) 8位

4、全表示操作码。 例如,空操作指令NOP,机器码为:00000000,第三章 80C51单片机指令系统- 3.1 概述,(2) 8位编码中包含操作码和寄存器编码。 例如 MOV A,Rn ; 功能:把Rn中的内容送到A中,机器码为: 1 1 1 0 1 n (E8HEFH) 又如 MOV A,Ri ; 功能:把间址寄存器Ri中的内容为地址的单元中内容送到A中,其机器码为: 1 1 1 0 0 1 1 i (E6HE7H),3.1 概述,双字节指令 编码由两个字节组成,存放在存储器中占两个存储单元。 例如 MOV A,#data; 功能:把立即数#data送到A中,机器码为: 第一字节 0 1 1

5、 1 0 1 0 0 操作码 (74H) 第二字节 #data 操作数(立即数) 又如 JZ rel;功能:先调整程序指针,即PC(PC)+2,再进行判断:若(A)=0,则跳转到PC=(PC)+rel)的程序地址处。机器码为: 第一字节 0 1 1 0 0 0 0 0 操作码(60H) 第二字节 rel 操作数(相对偏移量),3.1 概述,三字节指令 三字节指令的编码由三个字节组成,第一字节为操作码,第二、三字节为操作数,存放在存储器中占三个存储单元。例如 MOV direct,#data 功能:把立即数#data送到直接地址direct中,机器码为:第一字节 0 1 1 1 0 1 0 1

6、操作码(75H)第二字节 direct 操作数(直接地址)第三字节 #data 操作数(立即数),3.1 概述,结论: 无论是哪种指令,其第一个字节均为操作码,它确定了指令的功能;其他的字节为操作数,指出了被操作的对象,指明了参与操作的数据或数据所存放的地址。 学会初步判断指令代码长度的方法,对于正确应用指令系统是非常有益的。,3.1 概述,3、指令代码长度的初步确定 (1)操作码是一定要占一个字节; (2)80C51在进行指令编码时,掌握的原则是尽量简单、短、具有规律性。因此,通常将作操作数的固定不变的寄存器隐含到操作码中(如A,B,Rn,DPTR等); (3)通常将作操作数的间址寄存器Ri

7、,DPTR隐含到操作码中; (4)通常8位立即数#data,直接地址direct,相对偏移量rel单独占一个字节。 通过指令系统的学习,逐步了解、掌握确定指令代码长度的方法。,3.1 概述,五、指令中常用符号 (1) A:累加器ACC; (2) B:寄存器B; (3) C:进(借)位标志位,在位操作指令中作为位累加器使用; (4) Rn:当前选中的工作寄存器组的8个寄存器R0R7; (5) Ri:当前选中的工作寄存器组中作为寄存器间接寻址的2个寄存器R0、R1;,3.1 概述,(6) direct:表示可以直接寻址的内部RAM地址或SFR地址; (7) #data:包含在指令中的8位立即数;

8、(8) #data16:包含在指令中的16位立即数; (9) addr16:16位目的地址; (10) addr11:11位目的地址; (11) rel:补码形式的8位地址偏移量。用于相对转移指令中,偏移量以下一条指令第一字节地址为基址,偏移量范围为-128+127; (12) bit:内部RAM或SFR的直接寻址位地址,3.1 概述,(13) :间址寄存器或基址寄存器前缀; (14) /:位操作指令中,表示对该位先求反再参与操作,但不影响原值; (15) (X):表示X地址中的内容; (16) (X):表示以X地址单元中内容为地址的单元中数; (17) XY:把Y单元中内容赋给X地址单元中;

9、 (18) (X)Y:把Y单元中内容赋给以X地址中内容为地址的单元中。,3.280C51单片机寻址方式,3.2 80C51单片机寻址方式 寻址方式:根据指令中给出的地址寻找真实操作数地址的方式。 80C51单片机共有7种寻址方式。 一、立即寻址 指令操作码后的一个字节是实际操作数本身。该操作数直接参与操作,又称立即数,用符号“”表示 例3.1 MOV A,#3AH;A3AH机器码:74H3AH 一条双字节指令,功能:将立即数3AH送入A中。,3.280C51单片机寻址方式,设把指令存放在存储器的2000H、2001H两单元中。,3.280C51单片机寻址方式,例3.2 MOV DPTR,26A

10、BH;DPH26H,DPL0ABH 指令代码为90H、26H、ABH,存放在ROM中占用3个存储单元。设把该指令存放在存储区的2000H、2001H、2002H单元。执行该指令后,立即数26ABH被送到DPTR中。,3.280C51单片机寻址方式,二、直接寻址 指令操作码后面的一个字节就是实际操作数地址。该地址指出了参与操作的数据所在的字节地址。 可用于直接寻址的空间有两种: (1)内部RAM低128字节单元(00H7FH)。 例3.3 MOV A,70H;A(70H),指令的代码为E5H、70H,双字节指令。,第三章 80C51单片机指令系统- 3.280C51单片机寻址方式,设把该指令存放

11、在1000H、1001H单元,且70H单元中存放的数值为10H。执行该指令后,数值10H就被送到A中。 (2)SFR,只能用于直接寻址。 例3.4MOV IE,85H;中断允许寄存器IE85H,3.280C51单片机寻址方式,三、寄存器寻址 指令中地址码给出的是某一通用寄存器编号,寄存器的内容为操作数。 可用于寄存器寻址的空间是:R0R7,ACC,Cy(位),DPTR,B。 对于A、B、DPTR和C,其寻址时具体的寄存器已隐含在其操作码中;而对选定的8个工作寄存器R0R7,则用操作码的低3位来指明所用的寄存器,用PSW中RS1、RS0来选择寄存器组。 例3.5MOV A,R2 ;A(R2) 指

12、令代码的二进制形式为11101010,十六进制为EAH。这里二进制数的低3位为010,正好为2,表示操作数为R2。,3.280C51单片机寻址方式,设这条指令存放在2020H单元,且PSW中RS1、RS0分别为1和0,则这里的R2为属于第二组工作寄存器,它的地址为12H。已知12H中存放的数据为4AH,则执行该指令后,4AH就被送到A中。,3.280C51单片机寻址方式,四、寄存器间接寻址 指令中给出的寄存器的内容为操作数的地址。 可间接寻址的寄存器有:R0、R1和DPTR。 使用时前面加符号表示间接寻址。可用R0或R1间接寻址片内RAM低128字节或片外RAM的256个字节范围,此类指令用操

13、作码的最低位指明R0或R1;也可用DPTR间接寻址64K字节外部RAM。 例3.6MOV A,R0;A(R0) 指令代码的二进制形式为11100110。注意,这里的最低位为0,表示现用寄存器为R0。该指令代码的十六进制形式为E6H。,3.280C51单片机寻址方式,设此指令存放在2030H单元,工作寄存器为第0组,在R0中存放的数值为50H,50H为片内RAM的一个单元,50H单元中存放的数值为ACH。执行该指令后,ACH送入A中。,3.280C51单片机寻址方式,例3.7MOVX A,R1 指令代码的二进制形式为11100011。注意,这里的最低位为1,表示现用寄存器为R1。该指令代码的十六

14、进制形式为E3H。 设此指令存放在2030H单元,工作寄存器为第0组,在R1中存放的数值为AFH,片外数据存储器AFH单元中的值为30H。执行该指令后,30H送入A中。 在执行PUSH和POP指令时,采用SP作寄存器间接寻址。,3.280C51单片机寻址方式,五、变址寻址(基址寄存器+变址寄存器间接寻址) 变址寻址时,指定的基址寄存器的内容与变址寄存器的内容(偏移量)相加,所得的结果作为操作数的地址。 例3.8MOVC A,A+DPTR;A(A)+(DPTR),源操作数中DPTR的内容为基地址,A中的内容为偏移量。 可作为基地址的寄存器有DPTR和PC,偏移量只能放在A中,偏移量为无符号数。

15、无论用DPTR或PC作为基址指针,变址寻址方式只适用于外部ROM,通常用于读取数据表。 该指令的代码为93H,是单字节指令。,3.280C51单片机寻址方式,设此指令存放在2040H单元,A中原存放值为E0H,DPTR中值为2000H,则A+DPTR形成的地址为20E0H。20E0H单元中内容为47H,则执行该指令后,A中原来的E0H被47H代替。,3.280C51单片机寻址方式,六、相对寻址 相对寻址时,由PC提供的基地址与指令中提供的偏移量rel相加,得到操作数地址。这时指出的地址是操作数与现行指令的相对位置。 例3.9JC rel;若Cy=1,则 PC(PC)+2+rel,否则 PC(P

16、C)+2 执行这条指令时,若Cy=1,则程序跳转到当前PC值加2再加rel的方向地址处,其中2为该指令的字节长度,rel为8位带符号数,其表示的范围为-128+127。,3.280C51单片机寻址方式,该指令中设rel=03H,则指令的代码为40H、03H,是双字节指令。此指令表示若进位C=0,则程序顺序执行,即不跳转,(PC)=(PC)+2;若进位C=1,则以PC中的当前内容为基地址,加上偏移量03H后所得到的结果为该转移指令的目的地址。 现设此指令存放在1000H和1001H单元,且目前C=1,则取指令后,PC当前内容为1002H。对C进行判断后,把PC当前内容与偏移量03H相加,得到转移

17、目的地址1005H。所以执行完此指令后,PC中的值为1005H,程序将从1005H开始执行。,3.280C51单片机寻址方式,80C51中的相对转移指令有二字节或三字节两种,它只适用于ROM空间。,3.280C51单片机寻址方式,七、位寻址 位寻址是对片内RAM的位寻址区和某些可位寻址(字节地址能被8整除)的SFR进行位操作时的寻址方式。位寻址与直接寻址中字节地址形式完全一样,主要由操作码来区分,使用时应注意。 例3.10CLR 92H;92H是SFR P1的D2这一位,若指令执行前P1=0FFH,则执行该指令后,P1=0FBH。 例如MOV C,06H;功能:将直接位地址06H中的内容送入位

18、累加器C中。,3.280C51单片机寻址方式,3.280C51单片机寻址方式,例题1 指出下列指令的寻址方式 MOV A,R1 ;(A)(R1) 寄存器寻址 ADD A,#05H ; (A)(A)+立即数05H 立即寻址 MOV A,R1 ; (A)(R1)寄存器间接寻址 MOV 30H,4AH ;(30H)(4AH) 直接寻址 MOVC A,A+DPTR ;(A)(A)+(DPTR) 变址寻址 SJMP LP ;(PC)(PC)+2+偏移量 相对寻址 MOV 65H, C ;(65H)(Cy) 位寻址,3.380C51指令系统,3.3 80C51指令系统,3.380C51指令系统,3.3 8

19、0C51指令系统 一、数据传送指令(29条) 指令系统中最基本、最常用的一类指令,主要用于数据的传送、保存以及交换等场合。 1、内部RAM间的数据传送 80C51内部传送指令的指令助记符为MOV。按源操作数的寻址方式可分为4组:,3.380C51指令系统,1、内部RAM间的数据传送,3.380C51指令系统,(1)立即寻址 MOV A,#data ;AdataMOV Rn,#data ;RndataMOV Ri,#data ;(Ri)dataMOV direct,#data ;directdataMOV DPTR,#data16 ;DPTRdata16 例3.11 MOV A,#30H ;A3

20、0HMOV R1,#20H ;R120HMOV R1,#40H ;(20H)40H,3.380C51指令系统,(2)直接寻址 MOV A,direct ;A(direct)MOV direct,A ;direct(A)MOV Rn,direct ;Rn(direct)MOV Ri,direct ;(Ri)(direct)MOV direct2,direct1;direct2(direct1) 这组指令将内部RAM直接地址中的内容传送到Rn、A及直接地址中,这里的直接地址既可以指内部RAM低128字节,也可以指SFR区的地址。最后一条指令功能灵活,可使数据直接在内部RAM间传送,无需在A中中转。

21、 例3.12MOV P2,P1 ;P2(P1),3.380C51指令系统,(3)间接寻址 MOV A,Ri ;A(Ri)MOV Ri,A ;(Ri)(A)MOV direct,Ri ;direct(Ri) 例3.13MOV 20H,#30HMOV R1,#20HMOV A,R1 ;(A)=30H,3.380C51指令系统,(4)寄存器寻址 MOV A,Rn ;A(Rn)MOV Rn,A ;Rn(A)MOV direct,Rn;direct(Rn) 这组指令允许通用寄存器Rn与A或直接地址单元间的数据传送,但不允许寄存器间互相传送,寄存器间的传送要经A中转。 例如,MOV R1,R2这条指令是非

22、法的。,3.380C51指令系统,2、涉及外部ROM和RAM的数据传送指令 80C51对外部ROM传送操作的指令助记符为MOVC,对外部RAM传送操作的指令助记符为MOVX。 (1)对外部ROM的传送操作 MOVC A,A+DPTR ;A(A)+(DPTR)MOVC A,A+PC;PC(PC)+1,A(A)+(PC) 两条指令都是单字节指令,均为变址寻址方式,A中的偏移量为无符号数。 第一条指令以DPTR为基址寄存器,功能是将A的内容与DPTR的内容相加后形成一个16位地址,把该地址指出的ROM单元的内容送给A。,3.380C51指令系统,第二条指令以PC作为基址寄存器,首先将PC值加1指向下

23、一条指令地址,然后将A的内容与PC的内容相加形成16位地址,把该地址指出的ROM单元的内容送给A。 这两条指令常用于查表。采用PC作为基址寄存器时,常数表与MOVC指令离得较近,称为近程查表;而采用DPTR作基址寄存器时,表首地址可在64K范围任意处,故称远程查表。 例3.14(DPTR)=8100H,(A)=40H,执行指令MOVC A,A+DPTR ,结果为ROM中8140H单元的内容送给A。 例3.15(A)=30H,执行指令 1000H:MOVC A,A+PC 结果为ROM中1031H单元的内容送给A。,3.380C51指令系统,(2)对外部RAM的传送操作 MOVX A,Ri ;A(

24、Ri)MOVX Ri,A ;(Ri)(A)MOVX A,DPTR ;A(DPTR)MOVX DPTR,A ;(DPTR)(A) 这组指令的功能:A与片外RAM间的相互传送。 前两条指令用R0或R1作低8位地址指针,由P0口送出,寻址范围为256B,此时P2口仍可作通用I/O口。 后两条指令以DPTR为片外RAM 16位地址指针,寻址范围为64KB。当片外RAM少于(或等于)256个字节时,上述指令均可使用;当片外RAM大于256个字节时,宜选用后两条指令。,3.380C51指令系统,由于80C51指令系统中没有专门的输入/输出指令,且片外扩展的I/O口与片外RAM是统一编址的,故上述4条指令也

25、可以作为输入输出指令。 例3.16设片外RAM:(2079H)=80H,执行下列指令: MOV DPTR,#2079HMOVX A,DPTR 结果为:(A)=80H。,3.380C51指令系统,80C51的堆栈区必须设在内部RAM中。堆栈是向上生长的,堆栈指针始终指向堆顶,且按“先进后出”的原则进行操作,即入栈时SP的内容先加1,然后数据推入;出栈时先弹出数据,然后SP的内容减1。 进栈指令:PUSHdirect ;SP(SP)+1,(SP)(direct) 出栈指令:POPdirect ;direct(SP),SP(SP)-1,3.380C51指令系统,例3.17编制根据A中的内容(09)查

26、其平方表的程序。 COUNT:PUSH DPH ;保护DPTR内容 PUSH DPL MOV DPTR ,#TABLE ;赋表首址 MOVC A,A+DPTR ;查表并传送给A POP DPL ;恢复DPTR原值 POP DPH RET ;返回主程序 TABLE:DB 00 DB 01 DB 64 DB 81,3.380C51指令系统,4、数据交换指令 XCH A,Rn ;(A) (Rn)XCH A,direct ;(A) (direct)XCH A,Ri ;(A) (Ri)XCHD A,Ri ;(A)30 (Ri)30, 将A内容的低4位与Ri间址单元内容的低4位交换,各自高4位内容保持不变

27、。SWAP A ;(A)30 (A)74,将A中内容的低4位与高4位交换。 前三条为字节交换指令,A的内容与源操作数所指定的数据相互交换。 后两条为半字节交换指令。,3.380C51指令系统,例3.18分析下列程序执行情况。 MOV A,#20H ;(A)=20HMOV 30H,#8FH ;(30H)=8FHMOV R1,#30H ;(R1)=30HXCH A,R1 ;(A)=8FH,(R1)=20HXCHD A,R1 ;(A)30 (R1)30 结果为:(A)=80H,(R1)=30H,(30H)=2FH。 例3.19 (A)=0ABH,执行指令SWAP A 结果为:(A)=0BAH。,3.

28、380C51指令系统,二、算术运算指令(24条) 主要完成加、减、乘、除四则运算,以及加1 、减1、BCD码的运算和调整等。除加1、减1运算外,这类指令大多数要影响PSW。分为7组: (1)加法指令 ADD A,Rn ;A(A)+(Rn)ADD A,direct ;A(A)+(direct)ADD A,Ri ;A(A)+(Ri)ADD A,#data ;A(A)+data 以上指令都以A为目的操作数地址,将A中内容与源操作数所指出的数据相加,结果送入A中。,3.380C51指令系统,例3.20 (A)=85H,(R0)=20H,(20H)=0AFH,执行指令ADD A,R0 运算后:(A)=3

29、4H,CY=1,AC=1,OV=1,P=1。 上例中,若把85H和0AFH作无符号数相加,则不考虑溢出,结果为134H。若把85H和0AFH作有符号数相加,则得到两个负数相加得正数的错误结论,此时OV=1,表示出错。当进行带符号数(补码)运算时,若第6、7位中有一位产生进位而另一位不产生进位,则使OV=1;否则使OV=0。OV=1表示两正数相加,和变为负数,或两负数相加和变为正数的错误结果。溢出标志OV在CPU内部是靠硬件“异或门”获得的。,3.380C51指令系统,(2)带进位加法指令 ADDC A,Rn ;A(A)+(Rn)CADDC A,direct ;A(A)+(direct)CADD

30、C A,Ri ;A(A)+(Ri)CADDC A,#data ;A(A)+dataC 上述指令除考虑进位位外,和ADD指令完全相同。 例3.21(A)=85H,(20H)=0FFH,CY=1,执行指令ADDC A,20H 运算后:(A)=85H,CY=1, AC=1,OV=0,P=1。,3.380C51指令系统,(3)加1指令 INC A ;A(A)+1INC Rn ;Rn(Rn)+1INC direct;direct(direct)+1INC Ri ;(Ri)(Ri)+1INC DPTR;DPTR(DPTR)+1 所有加1指令,除INC A指令只影响奇偶标志P外,均不影响PSW。在第三条指令

31、中若直接地址为I/O口,则进行“读-改-写”操作。其功能是先读入端口锁存器内容,然后在CPU中加1,再输出到端口。,3.380C51指令系统,(4)带借位减法指令 SUBB A,Rn ;A(A)-(Rn)-CSUBB A,direct ;A(A)-(direct)-CSUBB A,Ri ;A(A)-(Ri)-CSUBB A,#data ;A(A)-data-C 功能:从A中内容,减去借位Cy,再减去源操作数指定的内容,结果送入A中。 在上述操作中,Cy=1表示有借位,CY=0表示无借位;OV=1,表示带符号数相减时,正数减负数结果为负数或负数减正数结果为正数的错误结论,与加法类似,溢出标志也由

32、运算时差的第6、7位的借位状态“异或”而得。另外,减法运算也影响PSW中的AC和P标志。,3.380C51指令系统,例3.22(A)=0C9H,(R3)=54H,Cy=1,执行命令SUBB A,R3 运算后:(A)=74H,Cy=0,AC=0,OV=1,P=0。 若在进行单字节或多字节减法运算前,不知借位标志Cy的值,则应在进行运算前对CY清“0”。,3.380C51指令系统,(5)减1指令 DEC A ;A(A)-1DEC Rn ;Rn(Rn)-1DEC direct;direct(direct)-1DEC Ri ;(Ri)(Ri)-1 所有减1指令,除DEC A指令只影响奇偶标志P外,均不

33、影响PSW。与加1指令相同,在第三条指令中若直接地址为I/O口,则进行“读-改-写”操作。应注意,DEC DPTR指令是非法的,需要时可以用DEC DPL代替。,3.380C51指令系统,(6)乘、除法指令 乘法 功能:两个8位无符号数相乘,其16位积的高8位存于B中,低8位存于A中;若乘积大于0FFH,则OV=1,否则OV=0;乘法运算总使Cy=0,P标志由A中内容确定。 例3.23(A)=50H,(B)=0A0H,执行指令MUL AB 结果为:(B)=32H,(A)=00H,Cy=0,OV=1,P=0。,3.380C51指令系统,除法 功能:除法指令中,A和B中均为无符号数,A中存放被除数

34、,B中存放除数;所得商送入A中,余数送入B中。除法运算总使Cy和OV清“0”,P标志仍由A中内容确定。 例3.24 (A)=0FBH,(B)=12H,执行指令DIV AB 结果为:(A)=0DH,(B)=11H,CY=0,OV=0,P=1。,3.380C51指令系统,DA A 它是在进行BCD码运算时,跟在ADD和ADDC指令之后,将相加后存放在A中结果进行调整。 调整的条件和方法: 若(A)309或AC=1,则(A)30(A)306H; 若(A)749或Cy=1,则(A)74(A)746H; 若以上两条同时满足,或高4位虽等于9,但低4位调整后有进位,则应加66H。 说明:以上讨论的调整情况

35、是由ALU硬件中的十进制调整电路自动进行的,用户不必考虑何时应加6H,使用时只需在ADD和ADDC后面紧跟一条DA A指令即可。,3.380C51指令系统,例3.25利用十进制加法调整指令作十进制减法运算(应采用补码相加的方法,用9AH减去减数即得以10为模的减数补码)。 设被减数存放在30H单元,减数存放在40H单元,结果存放在50H单元,编程如下: CLR C ;清进位位MOV A,9AH;求减数补码SUBB A,40H ADD A,30H;与补码相加DA A;十进制调整MOV 50H,A;结果存放在50H单元,3.380C51指令系统,例如26-11=15,第三章 80C51单片机指令系

36、统- 3.380C51指令系统,三、逻辑操作指令(24条) 包括与、或、异或、求反、左右移位、清“0”等。这类指令的执行一般不影响PSW。,3.380C51指令系统,(1)逻辑与运算指令 ANL A,#data;A(A)data ANL A,Rn;A(A)(Rn)ANL A,direct;A(A)(direct)ANL A,Ri ;A(A)(Ri)ANL direct,#data ;direct(direct)dataANL direct,A ;direct(direct)(A) 指令功能:两操作数所确定的内容按位相与后,结果送给目的操作数地址中。对于最后两条指令,当直接地址为I/O口时,则进

37、行“读-改-写”操作,即数据来自端口锁存器,结果也写回端口锁存器。用来屏蔽某些位。,3.380C51指令系统,例3.26(A)=07H,(R0)=0FDH, 执行指令ANL A,R0 结果为:(A)=05H,3.380C51指令系统,(2)逻辑或运算指令 ORL A,#data ;A(A)dataORL A,Rn ;A(A)(Rn)ORL A,direct ;A(A)(direct)ORL A,Ri ;A(A)(Ri) ORL direct,#data ;direct(direct)dataORL direct,A ;direct(direct)(A) 指令功能:两操作数所确定的内容按位相或后

38、,结果送给目的操作数地址中。同与逻辑一样,对于最后两条指令,当直接地址为I/O口时,也进行“读-改-写”操作。可置位任何RAM单元或寄存器的某些位。,3.380C51指令系统,与、或逻辑运算结合使用,可以实现对某单元内容的某些位进行交换,而其余位保持不变。 例3.27将A的高5位送到P1口的高5位,而P1口的低3位保持不变。编程如下: MOV R2,A ;暂存A的内容ANL A,#0F8H ;取A的高5位ANL P1,#07H ;取P1的低3位ORL P1,A ;组合P1口的内容MOV A,R2 ;恢复A的内容,3.380C51指令系统,(3)逻辑异或运算指令 XRL A,#data ;A(A

39、)dataXRL A,Rn ;A(A)(Rn)XRL A,direct ;A(A)(direct)XRL A,Ri ;A(A)(Ri) XRL direct,#data ;direct(direct) dataXRL direct,A ;direct(direct)(A) 同样,最后两条指令,也具有“读-改-写”功能。,3.380C51指令系统,异或操作也是按位进行的,当两操作数相同时结果为0,不同时结果为1。任一操作数与它自身相等的数异或,结果为0;任一操作数与00H异或,结果为操作数本身;任一操作数与0FFH异或,结果为操作数的非。应用于对目的操作数的某些位取反。 例3.28 (A)=90

40、H,(R3)=73H, 执行指令XRL A,R3 结果为:(A)=0E3H。,3.380C51指令系统,(4)A清“0”与取反指令 清“0”指令: CLR A ;A0取反指令:CPL A ;A( ) 清“0”与取反指令只对A操作,它们都是单字节指令,若用上述异或指令也可以对某操作数清“0”或取反,但至少要二字节指令。51系列没有求补指令,若需进行求补计算,可用“取反加1”实现。,3.380C51指令系统,(5)移位指令 RL A ;左小循环RR A ;右小循环RLC A ;左大循环RRC A ;右大循环 移位指令也只对A进行操作。前两条指令分别将A中内容循环左移或右移一位,后两条指令分别将A中

41、内容连同进位位CY一起循环左移或右移一位。,3.380C51指令系统,(5)移位指令,3.380C51指令系统,用9位循环指令实现多字节移位 例:编程将寄存器 R6R5 中的双字节数X左移一位。 CLR C;Cy=0, 设 R6= 55H ,R5= AAHMOV A,R5;R6=01010101,R5=10101010,Cy=0RLC A;MOV R5,A;R6=01010101,R5=01010100,Cy=1MOV A,R6;RLC A;MOV R6,A;R6=10101011,R5=01010100,Cy=0 思考题:如何将寄存器R6R5中的双字节数X右移一位。,3.380C51指令系统

42、,四、控制转移指令(17条) 转移指令通过改写PC的当前值,从而改变CPU执行程序的顺序,使程序发生跳转。 功能:用于控制程序的走向,作用区间是ROM空间。 包括无条件转移指令、条件转移指令以及子程序调用和返回指令。 按转移条件分类: 1)无条件转移:执行无条件转移指令,程序无条件转移到指定处。 2)条件转移:指令中给出转移条件,执行指令时,先测试条件,若满足条件,则程序发生转移,否则,仍顺序执行程序。,3.380C51指令系统,按转移方式分类: 1)绝对转移:指令给出转移目的的绝对地址nn,执行指令后,PCnn。 例:地址 源程序1000H LJMP 2000H 1003H 2000H ;转

43、移目的指令 2)相对转移:指令给出转移目的与转移指令的相对偏移量e,执行指令后,PCPC+e 。 例:地址 源程序1000H SJMP 02 1004H ;转移目的指令,3.380C51指令系统,1、无条件转移指令(必转指令) 功能:当程序执行完该指令时,程序无条件转移到指令所提供的地址上去。 LJMP addr16 ;PCaddr16 长转移指令,指令提供16位目的地址。故程序可在64K字节空间内无条件地转移到任何地方。 例3.29LJMP 8100H 指令执行后,使程序转移到8100H。,3.380C51指令系统,AJMP addr11 ;PC(PC)+2,PC100addr11, PC1

44、511不变 绝对转移指令,它提供11位目的地址,可在2K范围内无条件地转移到由a10a0所指出的地址单元中去。 AJMP指令将64K字节ROM划分为32个区,由PC高五位PC1511确定,每个区为2K,而每个区又分为8页,由指令的a10a9a8确定,每页有256个单元,所以,每个区相应有8种操作码。本指令不影响标志位。,3.380C51指令系统,3.380C51指令系统,例3.30KVR:AJMP addr11 设addr11=00100000000B,标号KVR的地址为1030H,则执行该指令后,程序转移到1100H。 SJMP rel ;PC(PC)+2+rel 相对短转移指令。指令控制程

45、序无条件转向指定地址指令中,rel是一个带符号的相对偏移量,范围为-128127,负数表示向后转移,正数表示向前转移。 指令优点:指令给出相对转移地址,不具体指出地址值,这样程序地址发生变化时,只要相对地址不发生变化,该指令就不需做任何改动。,3.3 80C51指令系统,在用汇编语言编写程序时,rel是一个地址符号,由汇编程序在汇编过程中自动计算偏移地址。在手工汇编时,可用下式计算偏移地址: 向后转移时:rel=0FEH-(源、目的地址差的绝对值) 向前转移时:rel=(源、目的地址差的绝对值)-2 例3.31 KRD:SJMP PKRD 如果KRD标号值为0100H,标号PKRD值为0123

46、H,则转移的目的地址为0123H,偏移量为:rel=0123H0100H2=21H。,3.3 80C51指令系统,JMPA+DPTR ;PC(A)+(DPTR) 变址寻址的转移指令(散转指令)。转移的目的地址由基址寄存器DPTR中的16位数和A中的8位无符号偏移量之和确定。 当DPTR中内容确定后,改变A的值,可以实现多分支的程序转移。 该指令执行后不改变A和数据指针DPTR中内容,不影响任何标志位。,3.3 80C51指令系统,例3.32 利用散转指令,要求当(A)=0时,转处理程序G0,(A)=1时转处理程序G1,(A)=n时转处理程序Gn(n=0,1,2,3)。 编程: MOV DPTR

47、,TABLE ;表首址送DPTRJMP ADPTR ;以A中内容为偏移量跳转TABLE: AJMP G0 ;(A)=0,转G0处执行AJMP G1 ;(A)=1,转G1处执行AJMP Gn ;(A)=n,转Gn处执行,3.3 80C51指令系统,2、条件转移指令 它是依据某种特定条件转移的指令。条件满足时转移,否则顺序执行。其中的条件一般为前条指令执行后产生的结果,如运算结果为0否?是否产生了进(借)位等。 结果为0条件转移指令。 JZ rel ;若(A)=0,则PC(PC)2rel,否则PC(PC)2JNZ rel ;若(A)0,则PC(PC)2rel,否则PC(PC)2 这两条指令都是双字

48、节条件相对转移指令。前者转移的条件是A=0,后者转移的条件是A0,A中内容为之前最后一次运算产生的结果。,3.3 80C51指令系统,例3.33 将外部RAM的一组数据传送到内部RAM,二者首地址分别为EXDATA和INDATA,遇到数据为0时停止传送。编程:MOV R0,#EXDATA MOV R1,#INDATA LOOP:MOVX A,R0HERE:JZ HERE ;为0停止MOV R1,A ;不为0向内部传送INC R0INC R1SJMP LOOP ;继续,3.3 80C51指令系统,比较条件转移指令。 格式:CJNE (目的字节),(源字节),rel ;三字节指令 CJNE A,#

49、data,rel ;若(A)=data,则PC(PC)3,C0若(A)data,则PC(PC)3rel,C0若(A)data,则PC(PC)3rel,C1 CJNE A,direct,rel ;若(A)=(direct),则PC(PC)3,C0若(A)(direct),则PC(PC)3rel,C0 若(A)(direct),则PC(PC)3rel,C1,第三章 80C51单片机指令系统- 3.3 80C51指令系统,CJNE Rn,#data,rel ;若(Rn)=data,则PC(PC)3,C0若(Rn)data,则PC(PC)3rel,C0若(Rn)data,则PC(PC)3rel,C1

50、CJNE Ri,#data,rel ;若(Ri)=data,则PC(PC)3,C0 若(Ri)data,则PC(PC)3rel,C0若(Ri)data,则PC(PC)3rel,C1,3.3 80C51指令系统,以上均为三字节指令,这类指令是先对两个规定的操作数进行比较,根据比较的结果决定转移到指定的转移地址,还是顺序执行。若两个操作数不相等则转移,相等则顺序执行。比较的过程是执行一次减法操作,但不保留差值。 设两无符号操作数为A和B, 若AB,则PC(PC)3rel,且C=1(AB)或C=0(AB), 若A=B,则PC(PC)3。,3.3 80C51指令系统,减1条件转移指令。 DJNZ Rn

51、,rel ;Rn(Rn)1,若(Rn)0,则PC(PC)2rel,否则PC(PC)2DJNZ direct,rel ;direct(direct)1,若(direct)0,则PC(PC)3rel,否则PC(PC)3 这组指令先将操作数减1,结果回送操作数,如果结果不为0则转移,否则顺序执行。第一条指令为2字节指令,第二条为3字节指令。 常用于循环程序中,故亦称循环控制指令。,3.3 80C51指令系统,例3.34 将内部RAM从30H单元开始的10个无符号数相加,结果存放在3AH单元,设和不超过8位二进制数。 编程:MOV R0,#0AH ;向R0置计数初值MOV R1,#30H ;R1指向首

52、地址CLR A LOOP:ADD A,R1 ;加一个数INC R1DJNZ R0,LOOP ;循环10次未完继续MOV 3AH,A ;存和SJMP $ ;停止,第三章 80C51单片机指令系统- 3.3 80C51指令系统,3、子程序调用及返回指令 在程序设计中,常常把具有一定功能的公用程序段编写成子程序。 从主程序转向子程序的指令称为子程序调用指令,从子程序返回主程序的指令称为返回指令。 为保证正确返回,每次调用子程序时自动将下条指令地址保存到堆栈,返回时按先进后出原则再把地址弹出到PC中。,3.3 80C51指令系统,(1)子程序调用指令。 ACALL addr11 ;PC(PC)2 SP

53、(SP)1,(SP)PC70 SP(SP)1,(SP)PC158 PC100addr11,PC1511保留 LCALL addr16 ;PC(PC)3 SP(SP)1,(SP)PC70 SP(SP)1,(SP)PC158 PCaddr16,3.3 80C51指令系统,子程序调用指令具有两个功能: 1)将断点地址(断点地址=(PC)+调用指令本身字节数)推入堆栈进行保护,以确保正确返回; 2)将子程序的入口地址送给PC,转去执行子程序。 ACALL指令为2字节指令,称绝对调用指令(短调用指令)。子程序的起始地址必须与该指令后第一条指令的第一个字节在同一个2K区域的存储器区内,即2K范围的页内调用

54、。ACALL指令的机器码:第一字节的高3位为A10A8,低5位为10001;第二字节为A7A0。 LCALL为3字节指令,称长调用指令。子程序的入口地址可在64K范围内的任何地方。,3.3 80C51指令系统,例3.35 设(SP)=60H,标号地址HERE为0123H,子程序SUB的入口地址为0345H,执行指令: HERE:ACALL SUB 结果为:(SP)=62H,(61H)=25H,(62H)=01H,(PC)=0345H。 例3.36 设(SP)=07H,子程序首地址为3000H,指令LCALL第一字节地址为2000H,执行指令: LCALL 3000H 结果为:(SP)=09H,

55、(08H)=03H,(09H)=20H,(PC)=3000H。,3.3 80C51指令系统,(2)返回指令。 子程序返回: RET ;PC158(SP),SP(SP)-1 PC70(SP),SP(SP)-1中断返回: RETI ;PC158(SP),SP(SP)-1 PC70(SP),SP(SP)-1上述指令的功能都是从堆栈中取出16位断点送PC,使程序返回到主程序。RET指令总是安排在子程序的出口处,而RETI指令安排在中断处理程序的出口处,RETI指令还有其他的操作,在中断系统中再进行讨论。,第三章 80C51单片机指令系统- 3.3 80C51指令系统,4、空操作指令 NOP ;PC(P

56、C)1 指令执行时,没有作任何实质性操作,只消耗一条指令时间。它多用于延时程序。,3.3 80C51指令系统,五、位操作指令(17条) 位操作指令是以位为操作对象进行运算和操作的指令,可以实现位的传送、运算、转移、控制等。 适用于位操作的地址空间是内部RAM中20H2FH字节地址(位地址00H7FH)以及SFR区中可以位寻址的位。 51系列片内RAM的上述可寻址位构成了一个完整的布尔处理机(位处理机)。 PSW中的Cy为位累加器,P0P3口的各位为位I/O口,00H7FH为位RAM(位地址)。,3.3 80C51指令系统,五、位操作指令(17条) 在汇编语言中,位地址的表达方式有以下4种: (

57、1)直接位地址:如91H;(2)字节符号地址点操作:如P1.0(90H);(3)位符号地址:如RS0;(4)用户使用伪指令事先定义过的符号地址。 如 X bit 00H;将符号地址00H定义为位符号地址X。,3.3 80C51指令系统,1、位传送指令 MOV C,bit ;C(bit)MOV bit,C ;bit(C) 位传送指令只允许位地址与Cy间进行传送。若要实现两个位地址之间的传送,需经Cy中转。 例3.37 将位地址20H的内容传送到位地址10H中去。 编程:MOV 00H,C ;保存原来CY的值MOV C,20H ;CY(20H)MOV 10H,C ;完成传送MOV C,00H ;恢

58、复CY的值,3.3 80C51指令系统,2、位运算指令 清零(复位):CLR C ;CY0CLR bit ;(bit)0,位地址清0置位: SETB C ;CY1SETB bit;(bit)1与运算: ANL C,bit;CY(CY)(bit)ANL C,/bit ;CY(CY)(/bit)或运算:ORL C,bit ;CY(CY)(bit)ORL C,/bit ;CY(CY)(/bit)取反:CPL C ;CY(/C)CPL bit ;bit(/bit) 符号“/bit”表示位地址bit中内容的取反,运算后bit中内容并不取反。,3.3 80C51指令系统,例3.38 CLR RS1 ;RS

59、10CLR 27H ;(24H).70SETB P1.7 ;P1.71CPL P2.5 ;P2.5(/P2.5),进行“读-改-写”操作 利用位操作指令可以方便地用软件模拟组合模拟电路,实现以软代硬。,3.3 80C51指令系统,例3.39 用程序模拟图3-10中组合逻辑电路,其中X、Y、Z、Q、R、S为输入,F为输出。,3.3 80C51指令系统,编程: Q BIT 00H ;用BIT伪指令定义位R BIT 01HS BIT 02HX BIT 03HY BIT 04HZ BIT 05HF BIT 06H LOGIC:MOV C,RORL C,S ;或门输出ANL C,Q ;与门输出MOV F0,C ;中间结果保存在PSW中的F0位里MOV C,XANL C,/Y ;与门输出ORL C,F0 ;或操作ORL C,/ZMOV F,C ;函数输出,3.3 80C51指令系统,3、位控制转移指令,3.3 80C51指令系统,例3.40 执行下列程序 ANL P1,#00H ;(P1)=00HJBP1.6

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论