版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第3章 MCS-51单片机的指令系统主要内容: MCS-51单片机的寻址方式、指令系统、基本程序结构及汇编语言的开发和调试。重点在于寻址方式、各种指令的应用、程序设计的规范、程序设计的思想及典型程序的理解和掌握。难点在于控制转移、位操作指令的理解及各种指令的灵活应用,以及程序设计的基本方法和针对具体的硬件设计出最合理的软件。3.1 3.1 概述概述指令系统:一台计算机所能识别、执行的指令的集合就是它的指 令系统。机器语言:指令系统是一套控制计算机执行操作的二进制编码, 称为机器语言。机器语言指令是计算机惟一能识别和 执行的指令。 汇编语言:指令系统是利用指令助记符来描述的,称为汇编语 言。 计
2、算机的指令系统一般都是利用汇编语言描述的,是由计 算机硬件设计所决定的。指令系统没有通用性。 单片机一般是空机,未含任何系统软件。因此在第一次使用前,必须对其进行编程。一、指令的分类 MCS-51指令系统有111条指令,可按下列几种方式分类: 1.按指令字节数分类 单字节指令(49条)、双字节指令(46条)和三字节指令(16条)。 2.按指令执行时间分类 单机器周期指令(64条)、双机器周期指令(45条)和四机器周期指令(2条)。 3.按功能分类 数据传送指令(29条)、算术操作指令(24条)、逻辑操作指令(24条)、控制转移指令(17条)和位操作指令(17条)。 二、MCS-51汇编语言指令
3、格式指令格式:指令的表示方式称为指令格式,它规定了指令的长度和内部信息的安排。完整的指令格式如下: 标号标号: : 操作码操作码 操作数操作数 , ,操作数操作数 ; ;注释注释 其中: 项是可选项。标号:指本条指令起始地址的符号,也称为指令的符号地址。代表该条指令在程序编译时的具体地址。操作码:又称助记符,它是由对应的英文缩写构成的,是指令语句的关键。它规定了指令具体的操作功能,描述指令的操作性质,是一条指令中不可缺少的内容。操作数:它既可以是一个具体的数据,也可以是存放数据的地址。注释:注释也是指令语句的可选项,它是为增加程序的可读性而设置的,是针对某指令而添加的说明性文字,不产生可执行的
4、目标代码。三、指令中的常用符号 Rn(n=07):表示当前工作寄存器R0R7中的任一个寄存器。 Ri(i=0或1):表示通用寄存器组中用于间接寻址的两个寄存器R0, R1。 #data:表示8位直接参与操作的立即数。 #data16:表示16位直接参与操作的立即数。 direct:表示片内RAM的8位单元地址。 addr11:表示11位目的地址,主要用于ACALL和AJMP指令中。 addr16:表示16位目的地址,主要用于LCALL和LJMP指令中。 rel:用补码形式表示的8位二进制地址偏移量,取值范围为128+127,主要用于相对转移指令,以形成转移的目的地址。 DPTR:数据指针,用于
5、寄存器间接寻址方式和变址寻址方式。 bit:表示片内RAM的位寻址区,或者是可以位寻址的SFR的位地址。 A(或ACC)、 B :表示累加器、 B寄存器。 C:表示PSW中的进位标志位Cy。 :在间接寻址方式中,表示间接寻址寄存器指针的前缀标志。 $:表示当前的指令地址。 /:在位操作指令中,表示对该位先求反后再参与操作。 (X):表示由X所指定的某寄存器或某单元中的内容。 (X):表示由X间接寻址单元中的内容。 :表示指令的操作结果是将箭头右边的内容传送到左边。 :表示指令的操作结果是将箭头左边的内容传送到右边。 、 、 :表示逻辑或、与、异或。3.2 MCS-51单片机的寻址方式 寻址方式
6、寻址方式:在计算机中,说明操作数所在地址的方法称为指令的寻址方式。 计算机执行程序实际上是在不断寻找操作数并进行操作的过程。 每种计算机在设计时已决定了它具有哪些寻址方式,寻址方式越多,计算机的灵活性越强,指令系统也就越复杂。 MCS-51单片机的指令系统提供了7种寻址方式,分别为立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址。一条指令可能含多种寻址方式。一、立即寻址定义:定义:将参与操作的数据直接写在指令中,这种寻址方式称为立即寻址。 特点:特点:指令中直接含有所需的操作数。该操作数可以是8位的,也可以是16位的,常常处在指令的第二字节和第三字节的位置上。立即数通
7、常使用#data或#data16表示,在立即数前面加“#”标志,用以和直接寻址中的直接地址(direct或bit)相区别。E0H00HFFH83H82HF8HE0H00HFFH12H87H83H82H如:MOV A , # F8H MOV DPTR , #1287H或 MOV DPH , #12H MOV DPL , #87H执行前执行前RAM:执行后执行后RAM:二、直接寻址 定义:定义:将操作数的地址直接存放在指令中,这种寻址方式称为直接寻址。特点:特点:指令中含有操作数的地址。该地址指出了参与操作的数据所在的字节单元地址或位地址。计算机执行它们时便可根据直接地址找到所需要的操作数。寻址范
8、围:寻址范围:ROM、片内RAM区、和位地址空间。E0H00HFFH55HF0H36H55HE0H00HFFH55H55HF0H36H如:MOV A , 36H MOV B , 36H执行前执行前RAM:执行后执行后RAM:三、寄存器寻址定义:定义:操作数存放在MCS-51内部的某个工作寄存器Rn(R0R7)或部分专用寄存器中,这种寻址方式称为寄存器寻址。特点:特点:由指令指出某一个寄存器的内容作为操作数。存放操作数的寄存器在指令代码中不占据单独的一个字节,而是嵌入(隐含)到操作码字节中。寻址范围:寻址范围:四组通用寄存器Rn(R0R7)、部分专用寄存器( A, B, DPTR )。如:MOV
9、 A , R0 ;将寄存器R0的内容传送到寄存器A中,(R0)(A) MOV R4 , A ;将寄存器A的内容传送到寄存器R4中,(A)(R4) MOV R1 , R4 ;( () )是错误的,Rn与Rn之间不能传送数据四、寄存器间接寻址定义:定义:指令给出的寄存器中存放的是操作数据的单元地址。这种寻址方式称为寄存器间接寻址,简称为寄存器间址。特点:指令给出的寄存器中存放的是操作数地址。寄存器间接寻址是一种二次寻找操作数地址的寻址方式,寄存器前边必须加前缀符号“”。不能用于寻址特殊功能寄存器SFR。 寻址范围:内部RAM低128B(只能使用R0或R1作间址寄存器)、外部RAM(只能使用DPTR
10、作间址寄存器)。对于外部低256单元RAM的访问,除可以使用DPTR外,还可以使用R0或R1作间址寄存器。如:MOV R0, #46H MOV A, R0 INC R0 MOV A, R066H00HFFH66H46H99H47H70H70HFFH66H66H99H70H70HFFH五、 变址寻址 定义:定义:操作数存放在变址寄存器(累加器A)和基址寄存器(DPTR或PC)相加形成的16位地址单元中。这种寻址方式称为基址加变址寄存器间接寻址,简称为变址寻址。特点:指令操作码中隐含作为基址寄存器用的DPTR(或PC )和作为变址用的累加器A。在执行变址寻址指令时,MCS-51单片机先把基地址(
11、DPTR或PC 的内容)和地址偏移量(A的内容)相加,以形成操作数地址,再由操作数地址找到操作数,并完成相应的操作。变址寻址方式是单字节指令。 寻址范围:只能对程序存储器ROM进行寻址,主要用于查表性质的访问。 注意:累加器A中存放的操作数地址相对基地址的偏移量的范围为00HFFH(无符号数)。MCS-51单片机共有以下三条变址寻址指令: MOVC A, A+PC ;(A)(A)+(PC)+1 MOVC A, A+DPTR ;(A)(A)+(DPTR) JMP A+DPTR ;(PC)(A)+(DPTR)六、 相对寻址定义:定义:将程序计数器PC的当前值(取出本条指令后的PC值)与指令第二个字
12、节给出的偏移量(rel)相加,形成新的转移目标地址。称为相对寻址方式。特点:特点:相对寻址方式是为实现程序的相对转移而设计的,为相对转移指令所使用,其指令码中含有相对地址偏移量,能生成浮动代码。如:如: SJMP rel ; (PC)(PC) + 2 + rel相对转移指令的目的地址指令地址指令字节数偏移量寻址范围:寻址范围:只能对程序存储器ROM进行寻址。相对地址偏移量(rel)是一个带符号的8位二进制补码,其取值范围为128127(以PC为中间的256个字节范围)。七、位寻址定义:定义:指令中给出的操作数是一个可单独寻址的位地址,这种寻址方式称为位寻址方式。特点:特点:位寻址是直接寻址方式
13、的一种,其特点是对8位二进制数中的某一位的地址进行操作。寻址范围:寻址范围:片内RAM低128B中位寻址区、部分SFR(其中有83位可以位寻址)。可位寻址的位地址的表示形式如下:可位寻址的位地址的表示形式如下:(1)直接使用位地址形式。如: MOV 00H, C ;(00H)(Cy) 其中:其中:00H是片内RAM中20H地址单元的第0位。(2 2)字节地址加位序号的形式。如:)字节地址加位序号的形式。如: MOV 20H.0, C ; MOV 20H.0, C ; (20H.020H.0)(CyCy) 其中:其中:20H.020H.0是片内是片内RAMRAM中中20H20H地址单元的第地址单
14、元的第0 0位。位。(3)位的符号地址(位名称)的形式。对于部分特殊功能寄存器,其各位均有一个特定的名字,所以可以用它们的位名称来访问该位。如: ANL C, P ; (C) (C)(P) 其中:P是PSW的第0位,C是PSW的第7位。 (4)字节符号地址(字节名称)加位序号的形式。对于部分特殊功能寄存器(如状态标志寄存器PSW),还可以用其字节名称加位序号形式来访问某一位。如: CPL PSW.6 ; (AC) ( ) 其中: PSW.6表示该位是PSW的第6位。例题1 指出下列指令的寻址方式 MOV A,R1 ;(A)(R1) 寄存器寻址 ADD A,#05H ;(A)(A)+立即数 05
15、H 立即寻址 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) 位寻址AC3.3 数据传送与交换指令CPU在进行算术和逻辑操作时,绝大多数指令都有操作数,所以数据传送是一种最基本、最主要的操作。 数据传送指令共28条,可分为内部RAM数据传送、外部RAM数据传送、程序存储器数据传送、数据交换和堆栈操作等五类。 寻址范围:寻址范围:累加器A、片内RAM、
16、SFR、片外RAM。 功能:功能:(目的地址)(源地址)。 可表示为可表示为: : 源地址单元的内容不变。 对标志位的影响:对标志位的影响:除以累加器A为目的操作数的数据传送指令对P标志位有影响外,其余均不影响标志位。一、内部RAM数据传送指令格式:格式: MOV , 其中:其中: 表示目的操作数, 表示源操作数。范围:范围:源、目的操作数均在片内RAM、SFR中。指令形式:指令形式:按目的操作数可将内部数据传送指令分为以下几类。(1)以累加器A为目的操作数(4条) MOV A , 其中:其中: 包括Rn、Ri、direct、#data。(各个符号的意义见2.1.3节指令中的常用符号 ,以下同
17、) 只影响PSW中的P标志位,不影响其他标志位。 (2)以工作寄存器Rn为目的操作数(3条) MOV Rn , 其中:其中: 包括A、direct、#data 。(3)以直接地址单元为目的操作数(5条) MOV direct , 其中:其中: 包括A、Rn、Ri、direct 、#data。(4)以间址寄存器Ri为目的操作数(3条) MOV Ri , 其中:其中: 包括A、direct 、#data。(5)16位数据传送指令(1条) MOV DPTR , #data16注:注:(2)、(3)、(4)、(5)均不影响标志位。 内部数据传送指令的传送关系如右图所示。二、外部RAM数据传送指令(4条
18、) CPU与外部数据存储器之间进行数据传送时,必须使用外部传送指令,只能通过累加器A,采用寄存器间接寻址(用R0, R1和DPTR三个间接寻址的寄存器)方式完成。 指令格式:指令格式: MOVX A , MOVX , A 其中:其中: 、 包括DPTR、Ri。Ri(R0, R1)只能访问片外RAM的低256个单元;DPTR可以访问片外RAM的全部64KB的空间。 对标志位的影响:对标志位的影响: MOVX A , 指令只影响PSW中的P标志位,不影响其他标志位; MOVX , A指令不影响标志位。53H89H32H99H48H56H00HFFH0000H00FFH0100HFFFFH89H53
19、H99H2000H3FE0H片内RAM片外RAM00A8H如: MOV R0, #F9H MOV A, #00H MOVX R0, A MOV R0, #F9H MOV A, #00H MOVX R0, A MOV DPTR,#2000H MOV A, 48H MOVX DPTR, A MOV DPTR, #3FE0H MOV A, 56H MOVX DPTR, A00F9H00H 例题例题11 编制程序将片内RAM的30H4FH单元中的内容传送至片外RAM的2000H开始的单元中。解:解:每次传送数据的的过程相同,可以用循环程序实现。 30H4FH共32个单元,循环次数应为32次(保存在R2
20、中),为了方便每次传送数据时地址的修改,送片内RAM数据区首地址送R0,片外RAM数据区首地址送DPTR。程序流程图如右图所示。程序如下:程序如下: ORG 1000HSTART: MOV R0, #30H MOV DPTR, #2000H MOV R2, #20H ; 设置循环次数 LOOP: MOV A, R0 ; 将片内RAM数据区内容送A MOVX DPTR, A ; 将A的内容送片外RAM数据区INC R0 ; 源地址递增 INC DPTR ; 目的地址递增 DJNZ R2, LOOP ; 若R2的不为0,则 转到LOOP处继续循环;否则循环结束SJMP $ END 三、程序存储器(
21、ROM)数据传送指令(查表指令)(2条) 程序存储器的数据传送是单向的,并且只能读到累加器A 中。这类指令专门用于查表,又称为查表指令。 指令格式:指令格式: MOVC A , A+DPTP ;(A)(A)+(DPTR) MOVC A , A+PC ;(PC)(PC)+1 (A)(A)+(PC) 两条指令的异同:两条指令的异同:其功能完全相同,但使用中存在着差异。 (1)查表的位置要求不同 采用DPTR作为基地址寄存器,表可以放在64KB程序存 储器空间的任何地址,使用方便,故称为远程查表。 采用PC作为基地址寄存器,具体的表在程序存储器中 只能在查表指令后的256B的地址空间中,使用有限制,
22、故称 为近程查表。(2)偏移量的计算方法不同 采用DPTR作为基地址寄存器,查表地址为(A)+(DPTR)。采用PC作为基地址寄存器,查表地址为(A)+(PC)+1。因此偏移量的计算方法不同。 采用DPTR作为基地址寄存器,A为欲查数值距离表首地址的值;采用PC作为基地址寄存器, A的值必须预先设置为: A的值=表首地址当前指令的PC值10H1H4H9H16H25H程序区域0000H1F0HFFFH如:MOV A, #3H MOV DPTR, #TAB MOVC A,A+DPTR TAB: DB 0, 1, 4, 9, 16, 25 如:MOV A, MOVC A,A+PC TAB: DB 0
23、, 1, 4, 9, 16, 25 四、堆栈操作指令(2条) 指令格式: PUSH direct ; SP(SP)+1 , (SP)(direct) POP derect ;(direct)(SP) , SP(SP)1特点:堆栈操作指令是一种特殊的数据传送指令,是根据栈指针SP中的栈顶地址进行数据操作。堆栈操作指令的实质是以栈指针SP为间址寄存器的间址寻址方式。堆栈区应避开使用的工作寄存器区和其他需要使用的数据区,系统复位后,SP的初始值为07H。为了避免重叠,一般初始化时要重新设置SP。功能:实现RAM单元数据送入栈顶或由栈顶取出数据送至RAM单元。适用场合:用于执行中断、子程序调用、参数传
24、递等程序的断点保护和现场保护。书写方式:堆栈操作指令是直接寻址指令,直接地址不能是寄存器名,因此应注意指令的书写格式。例如: PUSH ACC(不能写成PUSH A) POP 00H (不能写成POP R0)00H3FH40H7FH53H28H39H54H50H87H45HEFH01H07HABH28H执行前片内RAM51H52H如:MOV SP, #50HPUSH ACCPUSH39HPUSH01HPUSH07HPOP07HPOP01HPOP39HPOPACC00H3FH40H7FH53H28H39H54H50H87H45HEFH01H07HABH28H执行前片内RAM51H52H28HE0
25、H28H68H68H87HABH40H五、数据交换指令(五、数据交换指令(5 5条)条) 数据传输时,若需要保存目的操作数,则经常采用数据交换指令。(1)半字节数据交换指令(2条) 指令格式:指令格式:SWAP A ;(A)30(A)74 XCHD A , Ri ;(A)30((Ri))30 如:SWAP A MOV R1, 36H XCHD A, R1F7HE0H00HFFH87H36H执行后执行后RAM:7FHE0H00HFFH89H36H执行前执行前RAM:F9H(2)字节交换指令(3条) 指令格式:指令格式:XCH A , 其中:其中: 包括Rn、 Ri、direct。00H6FH70
26、HFFH96HE0H执行后片内RAM28H39H54H80H87H45HEFH如:MOV R1, #28HMOV R7, #ABHMOV A, #DDHXCH A, 39H XCH A, R7 XCH A, R101H07HABH28HDDH00H6FH70HFFH96HE0H28H39H54H80H87H45HEFH01H07HABH28HDDH执行前片内RAM 例题例题22利用查表指令将内部RAM中20H单元的压缩BCD码拆开,转换成相应的ASCII码,存入21H、22H中,高位存在22H。解:解: BCD码的09对应的ASCII码为30H39H,将30H39H按大小顺序排列放入表TABL
27、E中,先将BCD码拆分,将拆分后的BCD码送入A,表首址送入DPTR ,然后领用查表指令MOVC A,A+DPTR,查表即得结果,然后存入21H、22H中。程序如下:程序如下: ORG 1000H START:MOV DPTR,#TABLEMOVA,20HANLA,#0FHMOVCA,A+DPTRMOV21H,AMOVA,20HANLA,#0F0HSWAPAMOVCA,A+DPTRMOV22H,ASJMP TABLE:DB 30H,31H,32H,33H,34H DB 35H,36H,37H,38H,39H END3.4 算术运算指令 算术运算指令的两个参与运算的操作数,一个存放在累加器A中(
28、此操作数也为目的操作数);一个存放在R0R7或Ri(片内RAM)中,或是#data(立即数)。 算术运算指令可以分为加法指令、带进位的加法指令、带借位的减法指令、十进制调整指令、加1指令、减1指令、乘除指令。1. 加法指令(4条) 指令格式: ADD A , ; (A)(A)+ 其中: 包括Rn、Ri、direct、#data。 对标志位的影响:ADD对PSW中的所有标志位均产生影响2. 带进位的加法指令(4条) 指令格式:ADDC A , ;(A)(A)+ + (Cy) 其中: 包括Rn、Ri、direct、#data。 对标志位的影响:ADDC对PSW中的所有标志位均产生影响。3. 3.
29、带借位的减法指令(带借位的减法指令(4 4条)条) 指令格式: SUBB A , ; (A)(A) (Cy) 其中: 包括Rn、Ri、direct、#data。 对标志位的影响:SUBB对PSW中的所有标志位均产生影响。 注意:注意:MCS-51指令系统中没有不带借位的减法指令,欲实现不带借位的减法计算,应预先置Cy=0(利用CLR C指令),然后利用带借位的减法指令SUBB实现计算。4. 4. 十进制调整指令(十进制调整指令(1 1条)条) 功能:跟在加法指令ADD或ADDC后面,对运算结果的十进制数进行BCD码修正,使它调整为压缩的BCD码数,以完成十进制加法运算功能。 特点:十进制调整指
30、令也称为BCD码修正指令,这是一条专用指令。两个压缩的BCD码按二进制数相加后必须经本指令调整才能得到压缩的BCD码的和。源操作数只能在累加器A中,结果存入A中。 指令格式:DA A 注意:十进制调整指令不能对减法指令进行修正。BCD码减法必须采用BCD补码运算法则,变减法为补码加法(被减数+减数的补码,减数的补码=9AH减数)。然后对其进行十进制调整来实现。 5. 5. 加加1 1指令(指令(5 5条)条) 功能:加1指令又称为增量指令,其功能是使操作数所指定的单元的内容加1 。 指令格式:INC ; + 1 其中: 即是源操作数又是目的操作数(即只有一个操作数),包括 A、Rn、direc
31、t、Ri、 DPTR 。 对标志位的影响:除对累加器A操作影响P标志位外,其他操作均不影响PSW的各标志位。 6. 6. 减减1 1指令(指令(4 4条)条) 功能:减1指令又称为减量指令,其功能是使操作数所指定的单元的内容减1 。 指令格式:DEC ; 1 其中: 即是源操作数又是目的操作数(即只有一个操作数),包括操作数),包括 A、Rn、direct、Ri。对标志位的影响:同加1指令。7. 7. 乘除指令(乘除指令(2 2条)条) 功能:实现乘法或除法操作。 特点:乘除指令在MCS-51指令系统中执行时间最长,均为四周期指令。 指令格式: MUL AB ;(B)(A)(A)(B) DIV
32、 AB ;(A)(A)/(B)(B) 对标志位的影响:乘除指令影响PSW中的Cy, OV, P标志位。其中,Cy位总是被清0的,P是由累加器A中1的个数的奇偶性决定的。乘法运算中,若乘积大于FFH,则OV标志位置1,否则清0。除法运算中,若除数为0,则OV标志位置1,否则清0。 例题例题33 将片内RAM 30H单元中的两位压缩BCD码转换成二进制数送到片内RAM 40H单元中。 解:解:两位压缩BCD码转换成二进制数的算法为:(a1a 0)BCD=10a1a0 程序流程图如右图所示。程序如下:程序如下: ORG 1000HSTART: MOV A, 30H ; 取两位BCD压缩码a1a0送A
33、ANL A, #0F0H ; 取高4位BCD码a1SWAP A ; 高4位与低4位换位MOV B, #0AH ; 将二进制数10送入BMUL AB ; 将10a1送入A中MOV R0, A ; 结果送入R0中保存MOV A, 30H ; 再取两位BCD压缩码a1a0送AANL A, #0FH ; 取低4位BCD码a0ADD A, R0 ; 求和10a1+ a0MOV 40H, A ; 结果送入40H保存SJMP $ ; 程序执行完,“原地踏步” END 例题例题55 已知片内RAM 30H3FH单元中存放了16个二进制无符号数,编制程序求它们的累加和,并将其和数存放在R4, R5中。解:解:每
34、次求和的过程相同,可以用循环程序实现。16个二进制无符号数求和,循环程序的循环次数应为16次(存放在R2中),它们的和放在R4, R5中(R4存高8位,R5存低8位)。程序流程图如右图所示。程序如下:程序如下: ORG 1000HSTART: MOV R0, #30H MOV R2, #10H ; 设置循环次数(16) MOV R4, #00H ; 和高位单元R4清0 MOV R5, #00H ; 和低位单元R5清0LOOP: MOV A, R5 ; 和低8位的内容送A ADD A, R0; 将R0与R5的内容相加并产生进位Cy MOV R5, A; 低8位的结果送R5 CLR A; A清0
35、ADDC A, R4; 将R4的内容和Cy相加 MOV R4, A; 高8位的结果送R4 INC R0; 地址递增(加1) DJNZ R2, LOOP ;若循环次数减1不为0,则转到 LOOP处循环;否则,循环结束 SJMP $ END3.5 3.5 逻辑运算和移位指令逻辑运算和移位指令 对标志位的影响:逻辑运算和移位指令中除了两条带进位的循环移位指令外,其余均不影响PSW中的各标志位。但当目的操作数是累加器A时,影响PSW中的奇偶校验位P。 常用的逻辑运算和移位类指令有:逻辑与、逻辑或、逻辑异或、循环移位、清0、求反(非)等24条指令,它们的操作数都是8位的。逻辑运算都是按位进行的,除用于逻
36、辑运算外,还可用于模拟各种数字逻辑电路的功能,进行逻辑电路的设计。1逻辑与运算指令(6条) 功能:实现两个操作数的逻辑与。 指令格式:ANL A , 其中: 包括Rn、Ri、direct、#data。 ANL direst , 其中: 包括A、#data。 适用场合:实现逻辑与,主要用于操作数的某些位不变(这些位与“1”),某些位置0(这些位与“0”)。2 2逻辑或运算指令(逻辑或运算指令(6 6条)条) 功能:实现两个操作数的逻辑或。 指令格式:ORL A , 其中: 包括Rn、Ri、direct、#data。 ORL direst , 其中: 包括A、#data。 适用场合:实现逻辑或,主
37、要用于操作数的某些位不变(这些位或“0”),某些位置1(这些位或“1”)。3 3逻辑异或运算指令(逻辑异或运算指令(6 6条)条) 功能:实现两个操作数的逻辑异或。 指令格式:XRL A , 其中: 包括Rn、Ri、direct、#data。 XRL direst , 其中: 包括A、#data。 适用场合:实现逻辑异或,主要用于操作数的某些位不变(这些位异或“0”),某些位取反(这些位异或“1”)。4 4循环移位指令(循环移位指令(4 4条)条) MCS-51单片机的循环移位指令共有不带进位的循环左、右移位(操作码为RL, RR)和带进位的循环左、右移位(操作码为RLC, RRC)指令4条。
38、 特点:特点:只能对累加器A进行循环移位。 指令格式:指令格式: 操作码 A功能:功能:累加器A中的数据逐位左移一位相当于原内容乘2,而逐位右移一位相当于原内容除以2。循环移位指令示意图如右图所示。 A7 A6 A5 A4 A3 A2 A1 A0CY循环右移A7 A6 A5 A4 A3 A2 A1 A0循环左移5 5累加器清累加器清0 0与取反指令(与取反指令(2 2条)条) 指令格式:CLR A ;(A)00H CPL A ;(A)( ) 特点:可以节省存储空间,提高程序执行效率。 对标志位的影响:CLR A指令只影响PSW的P标志位,CPL A指令不影响PSW各标志位。A例题2 利用MCS
39、-51单片机实现P1口上的发光二极管闪烁, P2口上的发光二极管右移, P0口上的发光二极管左移。MCS-51P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.73.6 控制转移指令 功能:改变程序计数器PC中的内容,控制程序执行的流向,实现程序分支转向。 为了控制程序的执行方向,MCS-51单片机提供了17条控制转移指令。 对标志位的影响:除了CJNE影响PSW的进位标志位Cy外,其余均不影响PSW的各标志位。 1无条件转移指令(4条) 定义:不规定条件
40、的程序转移称为无条件转移指令。 指令格式: 长转移指令: LJMP addr16 ;(PC)addr150 绝对转移指令: :AJMP addr11 ;(PC)(PC)+2,PC 100addr11相对(短)转移指令:SJMP rel ;(PC)(PC)+2+rel间接(散)转移指令: :JMP A+DPTR ;(PC)(DPTR)+(A)注意: (1)使用转移指令时,指令中的地址或偏移量均可采用标号,只有在执行前才被汇编成实际的二进制地址。 (2)指令的转移范围: 在执行当前转移指令后的PC值的基础上: 长转移指令LJMP: 64KB 绝对转移指令AJMP :2KB 相对(短)转移指令SJM
41、P : 128+127(用补码表示) 间接(散)转移指令JMP: 64KB (3)相对(短)转移指令SJMP rel 中地址偏移量的计算:rel = 转移目标地址转移指令地址(当前PC值) 2 (4)原地踏步(暂停当前的程序,并不是真的停机)的实现: SJMP $ 或 HERE: SJMP HERE (5)间接(散)转移指令:JMP A+DPTR 常用于实现程序的分支转移(散转)。 DPTR为转移目的的起始地址,A为转移目的的偏移量。 LOOP1:2条件转移指令(2条) 功能:功能:在规定的条件满足时进行程序转移,否则程序往下顺序执行。MCS-51单片机中,条件转移指令实质上是累加器A判零指令
42、。LJMP LOOP1程序区域1程序区域程序区域0LOOP1:AJMP LOOP1程序区域1程序区域程序区域0LOOP1:SJMP LOOP1程序区域1程序区域程序区域0 指令格式: JZ rel ; 若(A)=0,则转移 (PC) (PC)+2+rel 若(A)0,则顺序执行(PC) (PC) +2 JNZ rel ; 若(A)0 ,则转移 (PC) (PC)+2+rel 若(A) =0 ,则顺序执行(PC) (PC) +2 指令的转移范围: rel的取值范围是在执行当前转移指令后的PC值基础上的128+127(用补码表示)。 可以采用符号地址表示。偏移量偏移量relrel的计算方法:的计算
43、方法: rel = 转移目标地址转移指令地址(当前PC值) 23比较转移指令(4条) 指令格式:CJNE 目的操作数,源操作数,rel 当目的操作数为A时,源操作数为#data、direct。 当目的操作数为Rn、Ri时,源操作数为#data; 即:即:CJNE A, direct, rel CJNE A, #data, rel CJNE Rn, #data, rel CJNE Ri, #data, rel功能: 把两个操作数进行比较,以比较的结果作为条件来控制程序的转移 。 若(目的操作数)=(源操作数),则程序继续执行,(PC)(PC) +3 若(目的操作数)(源操作数),则程序转移,(P
44、C)(PC) + rel +3,Cy0 若(目的操作数)(源操作数),则程序转移,(PC)(PC) + rel +3,Cy1 功能:比较两个操作数的大小。 对标志位影响:影响Cy标志位,不影响其他标志位。 指令的转移范围:rel的取值范围是在执行当前转移指令后的PC值基础上的128+127(用补码表示)。 可以采用符号地址表示。 注意:比较转移指令的比较是通过两操作数的减法实现的,影响Cy标志位,不保存最后的差值,两个操作数的内容不变。4循环(减1条件)转移指令(2条) 功能:功能:具有减1判非0则转移的功能。主要用于控制程序循环,实现按循环次数控制循环的目的。 特点:特点:循环转移指令是一组
45、把减1与条件转移两种功能结合在一起的指令。 指令格式:DJNZ , rel ; 1 若 0,则转移 (PC) (PC)+2+rel 若 0,则不转移 (PC) (PC) +2 注意:条件转移指令均为相对转移指令,因此指令的转移范围十分有限。若要实现64KB范围内的转移,则可以借助于一条长转移指令的过渡来实现。5子程序调用与返回指令(4条) 定义:具有完整功能的程序段定义为子程序,供主程序调用。 功能: 供主程序在需要时调用。子程序可以在程序中反复多次使用,以简化源程序的书写。 特点:子程序可以嵌套,有利于模块化程序设计。主程序与子程序之间的调用关系如下左图所示,两级子程序嵌套的示意图如下右图所
46、示。 为了实现主程序对子程序的一次完整调用,必须有子程序调用指令和子程序返回指令。子程序调用指令在主程序中使用,而子程序返回指令则是子程序的最后一条指令。调用与返回指令是成对使用的。子程序调用指令的功能: 必须具有自动把程序计数器PC中的断点地址保护到堆栈中,且将子程序入口地址自动送入程序计数器PC中的功能。子程序返回指令的功能: 必须具有自动把堆栈中的断点地址恢复到程序计数器PC中的功能。注意: 子程序调用时应注意入口参数设置,子程序返回时应注意出口参数的传递。指令格式:(1)绝对短调用指令 ACALL addr11 ; (PC) (PC) +2, (SP) (SP) +1,(SP)(PC)
47、70 (SP) (SP) +1, (SP) (PC) 158, (PC) 100addr11 其中: addr11为11位地址,实际编程时可以用符号地址。并且只能在2KB范围以内调用子程序 。(2)绝对长调用指令 LCALL addr16 ; (PC) (PC) +3, (SP) (SP) +1,(SP)(PC)70 (SP) (SP) +1, (SP) (PC) 158, (PC) 150addr16 其中: addr16为16位地址,实际编程时可以用符号地址。可以在64KB范围以内调用子程序 。(3)子程序返回指令 RET ; (PC) 158(SP), (SP) (SP) 1, (PC)
48、 70 (SP) , (SP) (SP) 1(4)中断返回指令 RETI ; (PC) 158(SP), (SP) (SP) 1, (PC) 70 (SP) , (SP) (SP) 1注:注:中断服务程序是一种特殊的子程序,它是在计算机响应中断时,由硬件完成调用而进入相应的中断服务程序。RETI指令与RET指令相仿,区别在于RET是从子程序返回,RETI 是从中断服务程序返回。无论是RET还是RETI都是子程序执行的最后一条指令。 6空操作指令NOP (1条)指令格式: NOP ; (PC) (PC) +1 功能:功能:不执行任何操作,消耗了一个机器周期,常用于软件延时或在程序可靠性设计中用来
49、稳定程序。特点:特点:NOP占据一个单元的存储空间,除了使PC的内容加1外,CPU不产生任何操作结果,只是消耗了一个机器周期。例题3 数据极值查找程序。内容RAM30H单元开始存放了10个数,找出其中最大的数,并放到50H单元中。开始数据首地址 R0数据块长度 R2第一个数送MAX读下一个数送R0数据首地址 R0CJNE A,MAX,CHKDJNZ R2,LOOP1结束NNYYORG0100HMAXDATA50HMOVR0, #30HMOVR2, #10MOVMAX, R0DECR2LOOP1: INCR0MOVA, R0CJNEA, MAX, CHKCHK:JCLOOP2MOVMAX, AL
50、OOP2: DJNZR2, LOOP1SJMP$ENDDELAY: MOV R7, #200 ;设置外循环次数(此条指令需要1个机器周期)DLY1: MOV R6, #123 ; 设置内循环次数DLY2: DJNZ R6, DLY2 ;(R6)1=0,则顺序执行,否则转回 DLY2继续循环,延时时间为2s123=246sNOP ; 延时时间为1sDJNZ R7,DLY1 ;(R7)1=0,则顺序执行,否则转回DLY1继续循 环,延时时间为(246211)20021=50.003msRET ; 子程序结束3.7 位操作指令 位操作(布尔变量操作):操作数不是字节,而是字节中的某个位。每位的取值只
51、能取0或1。 指令的寻址范围:片内RAM位寻址区20H2FH, SFR中的11个可位寻址特殊寄存器中的83个可寻址位。 特点:以进位标志Cy作为位累加器,可以实现布尔变量的传送、运算和控制转移等功能。 指令中的位地址的表达方式:直接地址方式(如0AFH)、特殊功能寄存器名.位序号(如PSW.3)、字节地址.位序号(如0D0H.0)、位名称方式(如F0)和用户定义名称等几种方式。 功能:位逻辑操作指令用于位逻辑操作,还可用于对组合逻辑电路的模拟。采用位操作指令进行组合逻辑电路的设计比采用字节型逻辑指令节约存储空间,运算操作十分方便。 3.位状态(置位、清0)控制指令(4条) 指令格式:CLR ;
52、 0 SETB ; 1 其中:其中:包括Cy、 bit。4.位条件(控制)转移指令(5条) 特点:以位的状态作为实现程序转移的判断条件。 指令格式: (1)以进位标志位Cy内容为条件的转移指令 JC rel ; 若(Cy)=1,则转移(PC)(PC)+2+rel , 否则顺序执行 JNC rel ; 若(Cy)=0,则转移(PC)(PC)+2+rel , 否则顺序执行 (2)以位地址bit内容为条件的转移指令指令格式:JB bit, rel ;若(bit)=1,则转移(PC)(PC)+3+rel,否则顺序执行 JNB bit,rel ;若(bit)=0,则转移(PC)(PC)+3+rel,否则
53、顺序执行 JBC bit, rel ;若(bit)=1,则转移(PC)(PC)+3+rel,且(bit )0,否则顺序执行 例题4 设补码数x存放在30H单元之中,函数值y按下式进行赋值。MAIN:MOVA, 30HJZLOOP1JNBACC.7, LOOP2ADDA, #5MOV30H, ALOOP2: SJMP$LOOP1: MOV30H, #10HSJMP$3.8 综合例题 例题例题77 设MCS-51单片机内部RAM起始地址为30H的数据块中共存有64个无符号数,编制程序使它们按从小到大的顺序排列。解:设64个无符号数在数据块中的顺序为:e64, e63, e2, e1,使他们从小到大
54、顺序排列的方法很多,现以冒泡法为例进行介绍。 冒泡法又称两两比较法。它先使e64和e63比较,若e64e63,则两个存储单元中的内容交换,否则就不交换。然后使e63和e62比较,按同样的原则决定是否交换。一直比较下去,最后完成e2和e1的比较及交换,经过N1=63次比较(常用内循环63次来实现)后,e1的位置上必然得到数组中的最大值,犹如一个气泡从水低冒出来一样。 实际编程时,可通过设置“交换标志”用来控制是否再需要冒泡,若刚刚进行完的冒泡中发生过数据交换(即排序尚未完成),应继续进行冒泡;若进行完的冒泡中未发生过数据交换(即排序已经完成),冒泡应该停止。例如:对于一个已经排好序的数组:1, 2, 3, 63, 64,排序程序只要进行一次循环便可根据“交换标志”的状态而结束排序程序的再执行,这自然可以减少631=62次的冒泡时间。 冒泡法程序流程图如下页图所示。 程序如下: ORG 100
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 页岩陶粒混凝土静动态力学性能试验及微观结构分析
- 2025年放化疗口腔黏膜炎的预防及护理的团标解读试卷含答案
- 2026营养补品产业政府战略管理与区域发展战略研究报告
- 2025-2030数字医院行业市场深度分析及竞争格局与投资价值研究报告
- 学校宿舍卫生管理制度
- 2025-2030电梯导轨行业市场深度分析及发展策略研究报告
- 小学四年级语文下册《三月桃花水》散文审美与语言建构教学设计
- 初中英语七年级下册Unit2 Grammar Focus教学设计(人教版)
- 小学六年级道德与法治下册全册大单元教学设计(统编版·2026)
- 建筑施工现场治安保卫制度及责任分解
- 红细胞叶酸课件
- 护理课件:伤口护理技巧
- 2025年广东生物竞赛试卷及答案
- 2026年辽宁职业学院单招(计算机)考试备考题库必考题
- 护理人员在康复护理中的角色定位
- 反兴奋剂教育准入考试试题及答案
- 卫生事业单位招聘考试真题及答案汇编
- 国有企业领导班子和领导人员考核评价存在的问题和建议
- 视频会议设备调试要求
- 2023年昆明辅警招聘考试真题含答案详解(完整版)
- 帕金森病的药物治疗指南
评论
0/150
提交评论