




已阅读5页,还剩83页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章 指令系统 第3章 MCS - 51单片机指令系统 3.1 寻址方式 3.2 指令系统 第3章 指令系统 一条汇编语言指令中最多包含 4 个区段, 如下 所示: 标号: 操作码 操作数 ;注释 4 个区段之间要用分隔符分开: 如果操作数有 两个以上, 则在操作数之间要用逗号“,”隔开 (乘法 指令和除法指令除外 )。 标号代表该指令所存放的第一个字节存储单 元的地址,故标号又称为“符号地址”。 操作码也称“助记符”。 第3章 指令系统 1. 单字节指令 (49条) 单字节指令格式由8位二进制编码表示, 例如: CLR AE4H 2. 双字节指令 (45条) 双字节指令格式由两个字节组成, 操作码和操作数, 例如 : MOV A, 10H74H 10H 3. 三字节指令 (17条) 三字节指令格式中, 第一个字节为操作码, 后两个字节为 操作数, 例如: MOV 40H, 30H75H 40H 30H 从执行时间看:单周期64条,双周期45条,四周期2条。 第3章 指令系统 3.1 寻址方式 所谓寻址方式, 就是寻找操作数地址的方式 , 在用汇编语言编程时, 数据的存放、传送、运 算都要通过指令来完成。 编程者必须自始至终 都要十分清楚操作数的位置, 以及如何将它们传 送到适当的寄存器去参与运算。每一种计算机 都具有多种寻址方式。寻址方式的多少是反映 指令系统优劣的主要指标之一。 第3章 指令系统 在 MCS -51单片机指令系统中, 有以下7种寻址方式: (1) 立即寻址; (2) 直接寻址; (3) 寄存器寻址; (4) 寄存器间接寻址; (5) 基址寄存器加变址寄存器间接寻址; (6) 相对寻址; (7) 位寻址。 第3章 指令系统 1. 立即寻址 立即寻址方式是指操作数包含在指令字节中。 跟在指令 操作码后面的数就是参加运算的数, 该操作数称为立即数。 立即数有一字节和二字节两种可能, 例如指令: MOV A, 3AH MOV DPTR, 0DFFFH 上述两条指令均为立即寻址方式, 第一条指令的功能是将 立即数 3AH送累加器A中, 第二条指令的功能是将立即数 0DFFFH送数据指针DPTR中(0DFHDPH, 0FFHDPL) 。 第3章 指令系统 2. 直接寻址 在指令中直接给出操作数的地址, 这种寻址方式就属于直 接寻址方式。在这种方式中, 指令的操作数部分直接是操作数 的地址。 在MCS -51 单片机指令系统中, 直接寻址方式中可以访问 3 种存储器空间: (1) 内部数据存储器的低 128 个字节单元(00H7FH)。 (2) 特殊功能寄存器。 特殊功能寄存器只能用直接寻址方 式进行访问。 (3) 位地址空间。 MOV A,30H MOV C,00H MOV A,SBUF 第3章 指令系统 3. 寄存器寻址 在该寻址方式中, 参加操作的数存放在寄存器里。寄 存器包括8个工作寄存器R0R7, 累加器A, 寄存器B、数据 指针DPTR和布尔处理器的位累加器Cy。 例如: MOV A,R1 MOV B,R2 MOV DPTR,#8000H 第3章 指令系统 4. 寄存器间接寻址 指令中给出间接寻址寄存器,其内容为操作数的地址。寻址 内部RAM区的数据时,可使用寄存器R0、R1作为地址指针; 当访 问外部RAM时, 可使用R0、 R1及DPTR作为地址指针。寄存器间 接寻址符号为“”, 例如: 第3章 指令系统 5. 基址寄存器加变址寄存器间接寻址 这种寻址方式用于访问程序存储器中的数据表 格, 它以基址寄存器DPTR或PC的内容为基本地址, 加上变址寄存器A的内容作为操作数的地址, 例如: MOVC A, ADPTR MOVC A, APC JMP ADPTR;散转指令 第3章 指令系统 6. 相对寻址 在MCS -51 指令系统中设有转移指令, 分为直接转移 和相对转移指令, 在相对转移指令中采用相对寻址方式。 这种寻址方式是以PC的内容为基本地址, 加上指令中给定 的偏移量作为转移地址。指令中给出的偏移量是一个 8 位 带符号的常数, 可正可负, 其范围为128+127。 JC 06H 7. 位寻址 该种寻址方式中, 操作数是内部RAM单元中某一位的 信息。 MOV C,30H 第3章 指令系统 3.2 指令系统 3.2.1 指令分类 按指令的功能, MCS -51 指令系统可分为下列 5 类: (1) 数据传送; (2) 算术运算; (3) 逻辑运算; (4) 位操作; (5) 控制转移。 第3章 指令系统 描述指令的一些符号的意义: Rn当前选定的寄存器区中的 8 个工作寄存器R0R7, 即n=07。 Ri当前选定的寄存器区中的 2 个寄存器R0、 R1, i=0或1 direct 8 位内部RAM单元的地址, 它可以是一个内部数据 区 RAM单元(00H7FH)或特殊功能寄存器地址(I / O端口、 控制寄存器、 状态寄存器 80H0FFH)。 data指令中的 8 位常数。 data16指令中的 16 位常数。 addr1616 位的目的地址, 用于LJMP, LCALL指令, 可 指向 64 KB程序存储器地址空间。 第3章 指令系统 addr1111位的目的地址, 用于AJMP, ACALL指令。 目的地址必须与下一条指令的第一个字节在同一个 2 KB程 序存储器地址空间之内。 rel 8 位带符号的偏移量字节, 用于SJMP和所有条 件转移指令中。 偏移量相对于下一条指令的第一个字节计 算, 在128+127 范围内取值。 bit内部数据RAM或特殊功能寄存器中的可直接寻 址位。 DPTR数据指针, 可用作 16 位的地址寄存器。 第3章 指令系统 A 累加器。 B 寄存器, 用于 MUL和 DIV指令中。 C 进位标志或进位位。 间接寻址寄存器或基址寄存器的前缀, 如Ri, DPTR。 / 位操作数的前缀, 表示对该位取反。 (X) X中的内容。 (X)由 X寻址的单元中的内容。 箭头左边的内容被箭头右边的内容所代替。 第3章 指令系统 3.2.2 数据传送类指令 图 3 1 MCS -51传送指令示意图 第3章 指令系统 1. 数据传送到累加器A的指令 MOV A, Rn MOV A, direct MOV A, Ri MOV A, data 这组指令的功能是:把源操作数的内容送入累加器A 。例如: MOV A, 10H, 该指令执行时将立即数 10H送入 累加器A中。 第3章 指令系统 2. 数据传送到工作寄存器Rn的指令 MOV Rn, A MOV Rn, direct MOV Rn, data 这组指令的功能是: 把源操作数的内容送入当前工作寄 存器区的R0R7中的某一个寄存器。指令中Rn在内部数据 存储器中的地址由当前的工作寄存器区选择位RS1、RS0 确 定, 可以是 00H07H、08H0FH、10H17H、18H 1FH。 例如: MOV R0, A, 若当前RS1、RS0 设置为 00 (即 工作寄存器 0 区), 执行该指令时,将累加器A中的数据传送 至工作寄存器R0(内部RAM 00H)单元中。 第3章 指令系统 3. 数据传送到内部RAM单元或特殊功能寄存器SFR的指令 MOV direct, A MOV direct, Rn MOV direct1, direct2 MOV direct, Ri MOV direct, data MOV Ri, A MOV Ri, direct MOV Ri, data MOV DPTR, data16 第3章 指令系统 这组指令的功能是:把源操作数的内容送入内部RAM 单元或特殊功能寄存器。其中第三条指令和最后一条指令 都是三字节指令。第三条指令的功能很强, 能实现内部 RAM之间、特殊功能寄存器之间或特殊功能寄存器与内部 RAM之间的直接数据传送。最后一条指令是将16位的立即 数送入数据指针寄存器DPTR。 第3章 指令系统 4. 累加器A与外部数据存储器之间的传送指令 MOVX A, DPTR MOVX A, Ri MOVX DPTR, A MOVX Ri, A 第3章 指令系统 这组指令是:在累加器A与外部数据存储器RAM单元或 I/O口之间进行数据传送, 前两条指令执行时, P3.7 引脚上输出 RD有效信号, 用作外部数据存储器的读选通信号; 后两条指令 执行时, P3.6 引脚上输出WR有效信号, 用作外部数据存储器 的写选通信号。DPTR所包含的 16 位地址信息由 P0 (低 8 位)和P2(高 8 位)输出, 而数据信息由P0 口传送, P0 口作分时 复用的总线。由Ri作为间接寻址寄存器时, P0 口上分时输出 Ri指定的 8 位地址信息及传输 8 位数据。 第3章 指令系统 5. 堆栈操作指令 PUSH direct POP direct 在MCS -51 单片机的内部RAM中, 可以设定一个先进后 出的区域, 称其为堆栈。在特殊功能寄存器中有一个堆栈指针 SP, 它指出栈顶的位置。 进栈指令的功能是: 首先将堆栈指针 SP的内容加1, 然后将直接地址所指出的内容送入SP指出的内 部RAM单元; 出栈指令的功能是: 将SP所指出的内部RAM单 元的内容送入由直接地址所指出的字节单元, 接着将堆栈指针 SP的内容减 1。 第3章 指令系统 例如: 进入中断服务子程序时, 把程序状态寄存器PSW、 累加器A、 数据指针DPTR进栈保护。设当前SP为 60H。则 程序段 PUSH PSW PUSH ACC PUSH DPL PUSH DPH 执行后, SP内容修改为 64H, 而61H、62H、63H、64H单元中 依次栈入PSW、A、DPL、DPH的内容。当中断服务程序结 束之前, 如下程序段(SP保持 64H不变) 第3章 指令系统 POP DPH POP DPL POP ACC POP PSW 执行之后, SP内容修改为 60H, 而64H、 63H、 62H、 61H 单元中的内容依次弹出到DPH、DPL、A、PSW中。 MCS -51 提供一个向上升的堆栈, 因此SP设置初值时 要充分考虑堆栈的深度, 要留出适当的单元空间, 满足堆栈 的使用。 第3章 指令系统 6.程序存储器内容送累加器 MOVC A, A+PC MOVC A, A+DPTR 这是两条很有用的查表指令, 可用来查找存放在程序存储 器中的常数表格。第一条指令是以PC作为基址寄存器, A的内 容作为无符号数和 PC的内容 ( 下一条指令的起始地址)相加 后得到一个 16 位的地址, 并将该地址指出的程序存储器单元的 内容送到累加器A。 这条指令的优点是不改变特殊功能寄存器 和PC的状态, 只要根据A的内容就可以取出表格中的常数。缺 点是表格只能放在该条查表指令后面的 256 个单元之中, 表格 的大小受到限制, 而且表格只能被一段程序所利用。 第3章 指令系统 第二条指令是以DPTR作为基址寄存器, 累加器A的内容 作为无符号数与DPTR内容相加, 得到一个 16 位的地址, 并 把该地址指出的程序存储器单元的内容送到累加器A。这条 指令的执行结果只与指针DPTR及累加器A的内容有关, 与 该指令存放的地址无关, 因此, 表格的大小和位置可以在 64 KB程序存储器中任意安排, 并且一个表格可以为各个程序 块所共用。 第3章 指令系统 7. 交换指令 XCH A, Rn XCH A, Ri XCH A, direct XCHD A, Ri SWAP A 前三条指令是将累加器A的内容和源操作数内容相互交 换; 后两条指令是半字节交换指令, 最后一条指令是将累加器 A的高 4 位与低 4 位之间进行交换, 而另外一条指令是将累加 器 A 的低 4 位内容和(Ri)所指出的内部RAM单元的低 4 位内容相互交换。 第3章 指令系统 传送类指令举例: 1、将立即数01H送入内部RAM 30H中 MOV 30H,#01H 或 MOV A,#01H MOV 30H,A 2、将立即数01H送外部RAM2000H单元中 方案1:MOVX 2000H,#01H ;? 方案2;MOV A,#01H MOVX 2000H,A ;? 方案3:MOV B,#01H ;? MOV DPTR,#2000H MOVX DPTR,B 第3章 指令系统 正确的方案:MOV A,#01H MOV DPTR,#2000H MOVX DPTR,A 3、编程实现内部RAM 30H和31H单元的内容交换 方案1、XCH 31H,30H ;? 方案2、MOV A,30H ;暂存 MOV 30H,31H MOV 31H,A 方案3、XCH A,30H XCH A,31H XCH A,30H 第3章 指令系统 方案4、PUSH 30H PUSH 31H POP 30H POP 31H 4、将程序存储器1000H单元的内容送外部RAM30H MOV A,#00H MOV DPTR,#1000H MOVC A,A+DPTR MOV R0, #30H MOVX R0, A 第3章 指令系统 作业:P55 2,8 第3章 指令系统 一、 加法指令 1. 普通加法指令 ADD A, Rn ADD A, direct ADD A, Ri ADD A, data 3.2.3 算术运算类指令 第3章 指令系统 1 0 0 0 1 0 0 0 1 0 0 1 1 1 0 0+ 1 0 0 1 0 0 1 0 0 (A)=24H,P=0,CY=1,OV=1 ,如果两数均为有符号 数,运算结果溢出。 例1: MOV A, #88H ADD A, #9CH 程序段运行后,A,P,CY,OV各为多少?如果两数均为有符号 数,问运算结果是否有溢出? 算术运算类指令举例: 第3章 指令系统 例2: MOV A, #78H ADD A, #64H 0 1 1 1 1 0 0 0 0 1 1 0 0 1 0 0 1 1 0 1 1 1 0 0 + (A)=DCH,P=1,CY=0,OV=1 , 1、看成有符号数时: 结果溢出。 2、看成无符号数时: 无溢出。 问:程序段运行后,A,P,CY,OV各为多少?运算结果是否有溢出? 算术运算类指令举例: 第3章 指令系统 2. 带进位加法指令 ADDC A, Rn ADDC A, direct ADDC A, Ri ADDC A, data 这组指令的功能与普通加法指令类似, 唯一的不同之处 是, 在执行加法时, 还要将上一次进位标志Cy的内容也一起 加进去, 对于标志位的影响也与普通加法指令相同。 第3章 指令系统 带进位加法应用举例: 思考:要计算1234H+5678H并将运算结果放入40H,41H单元中 ,如何实现? 算法考虑:先加低八位,再加高八位,加高八位时必须将低八 位的进位信号加进去。 MOV A, #34H ADD A, #78H MOV 40H, A MOV A, #12H ADDC A, 56H MOV 41H, A 第3章 指令系统 3. 增量指令 INC A INC Rn INC direct INC Ri INC DPTR 这组指令的功能是:将指令中所指出操作数的内容加1。 若 原来的内容为 0FFH, 则加 1 后将产生溢出, 使操作数的内容变成 00H, 但不影响任何标志。最后一条指令是对16 位的数据指针寄 存器DPTR执行加 1 操作, 指令执行时, 先对低 8 位指针 DPL的 内容加 1, 当产生溢出时就对高 8 位指针DPH加 1, 但不影响任何 标志。 第3章 指令系统 4. 十进制调整指令 DA A 这条指令对累加器A参与的BCD码加法运算所获得的 8 位 结果进行十进制调整, 使累加器A中的内容调整为二位压缩型 BCD码的数。使用时必须注意, 它只能跟在加法指令之后, 不 能对减法指令的结果进行调整, 且其结果不影响溢出标志位和 半进位标志。 执行该指令时, 判断 A中的低 4 位是否大于 9 和辅助进 位标志 AC是否为“1”, 若两者有一个条件满足, 则低 4 位加 6 操作; 同样, A中的高 4 位大于 9 或进位标志 Cy为“1”两者有 一个条件满足时, 高 4 位加 6 操作。例如: 有两个 BCD数 36 与 45 相加, 结果应为 BCD码 81, 程序如下: 第3章 指令系统 例3: MOV A, 78H ADD A, 64H DA A 0 1 1 1 1 0 0 0 0 1 1 0 0 1 0 0 1 1 0 1 1 1 0 0 0 1 1 0 0 1 1 0 0 1 0 0 0 0 1 0 + + + 1 问:程序段运行后,A,P,CY,OV各为多少? (A)=42H,P=0,CY=1,OV=1Why? 算术运算类指令举例: 第3章 指令系统 二、 减法指令 1. 带进位减法指令 SUBB A, Rn SUBB A, direct SUBB A, Ri SUBB A, data 这组指令的功能是: 将累加器A的内容与第二操作数及进位标 志相减, 结果送回到累加器A中。在执行减法过程中,如果位7( D7)有借位, 则进位标志Cy置“1”, 否则清“0”; 如果位 3(D3)有 借位, 则辅助进位标志AC置“1”, 否则清“0”; 如位 6 有借位而位 7 没有借位, 或位 7 有借位而位 6 没有借位, 则溢出标志OV置“1”, 否则清“0”。 若要进行不带借位的减法操作, 则必须先将Cy清“0”。 第3章 指令系统 2. 减1指令 DEC A DEC Rn DEC direct DEC Ri 这组指令的功能是: 将指出的操作数内容减 1。 如果 原来的操作数为 00H, 则减 1 后将产生下溢出, 使操作数变 成 0FFH, 但不影响任何标志。 第3章 指令系统 三、 乘法指令 乘法指令完成单字节的乘法, 只有一条指令: MUL AB 这条指令的功能是: 将累加器A的内容与寄存器B的内 容相乘, 乘积的低 8 位存放在累加器A中, 高 8 位存放于寄存 器B中。如果乘积超过0FFH, 则溢出标志OV置“1”, 否则清 “0”。 进位标志Cy总是被清“0”。 第3章 指令系统 四、 除法指令 除法指令完成单字节的除法, 只有一条指令: DIV AB 这条指令的功能是: 将累加器A中的内容除以寄存器 B中 的8位无符号整数, 所得商的整数部分存放在累加器A中, 余数 部分存放在寄存器 B中, 清“0”进位标志Cy和溢出标志OV。 若原来 B 中的内容为 0, 则执行该指令后 A与B中的内容不定, 并将溢出标志OV置“1”, 在任何情况下, 进位标志Cy总是被清 “0”。 第3章 指令系统 例4. MOV A, #78H ADD A, #64H MUL AB 上述程序段运行后, (A)= ,(CY)= , ( B)= ,(OV)= 。 算术运算类指令举例: 上述程序段运行后, (A)= E0H ,(CY)= 0 , ( B)= 2EH ,(OV)= 1 。 第3章 指令系统 例5. MOV A, #78H ADD A, #64H DIV AB 上述程序段运行后, (A)= ,(CY)= , ( B)= ,(OV)= 。 算术运算类指令举例: 上述程序段运行后, (A)= 01H ,(CY)= 0 , ( B)= 0EH ,(OV)= 0 。 第3章 指令系统 表 3.3 影响标志位的指令 第3章 指令系统 表 3.3 影响标志位的指令 第3章 指令系统 补充作业:阅读下列程序,填空并回答问题。 1. MOV A,#59H MOV R0,#68H ADD A, R0 上述程序段运行后, (A)= ,(CY)= , ( P)= ,(OV)= 。 如果参与运算的两数是有符号数,结果是否有溢出? 如果参与运算的两数是无符号数,结果是否有溢出? 第3章 指令系统 2. MOV A,#59H MOV R0,#68H ADD A, R0 DA A 上述程序段运行后, (A)= ,(CY)= , ( P)= ,(OV)= 。 3. MOV A,#59H MOV B,#68H MUL AB 上述程序段运行后, (A)= ,(CY)= , ( B)= ,(OV)= 。 第3章 指令系统 4. MOV A,#68H MOV B,#59H DIV AB 上述程序段运行后, (A)= ,(CY)= , ( B)= ,(OV)= 。 第3章 指令系统 一、 简单逻辑操作指令 CLR A ; 对累加器A清“0” CPL A; 对累加器A按位取反 RL A; 累加器A的内容向左环移 1 位 RLC A; 累加器A的内容带进位标志位向左环移 1 位 RR A; 累加器A的内容向右环移 1 位 RRC A; 累加器A的内容带进位标志位向右环移 1 位 这组指令的功能是: 对累加器A的内容进行简单的逻辑操 作。除了带进位标志位的移位指令外,其它都不影响Cy, AC, OV等标志。 3.2.4 逻辑运算类指令 第3章 指令系统 二、 逻辑与指令 ANL A, Rn ANL A, direct ANL A, Ri ANL A, data ANL direct, A ANL direct, data 这组指令的功能是: 将两个操作数的内容按位进行逻 辑与操作, 并将结果送回目的操作数的单元中。 第3章 指令系统 三、 逻辑或指令 ORL A, Rn ORL A, direct ORL A, Ri ORL A, data ORL direct, A ORL direct, data 这组指令的功能是: 将两个操作数的内容按位进行逻辑或 操作, 并将结果送回目的操作数的单元中。 第3章 指令系统 四、 逻辑异或指令 XRL A, Rn XRL A, direct XRL A, Ri XRL A, data XRL direct, A XRL direct, data 这组指令的功能是: 将两个操作数的内容按位进行逻辑 异或操作, 并将结果送回到目的操作数的单元中。 第3章 指令系统 逻辑运算指令举例 例1: CLR A ;MOV A, #0E0H ADD A, #33H RL A RLC A (A)= Cy= 第3章 指令系统 例2:利用左移指令实现对累加器A中内容乘8操作(A)=01H RL A RL A RL A 例3:(1)将内部RAM 30H单元的低四位变反,其余位不变 XRL 30H,#0FH (2)将内部RAM 30H单元的低六位置1 ,其余位不变 ORL 30H,#3FH (3)将内部RAM 30H单元的最高位置0 ,其余位不变 ANL 30H,#7FH 第3章 指令系统 例4:利用移位指令实现对内部RAM 30H(低位),31H的16位 数乘以2(假定结果不溢出) CLR C MOV A, 30H RLC A MOV 30H, A MOV A, 31H RLC A MOV 31H, A 第3章 指令系统 5. MOV B, #0C9H MOV A, #58H ADD A, B RLC A RLC A 上述几条指令执行后,(A)= ,CY= , P= 。 补充作业:阅读下列程序并填空 6. MOV A,89H MOV B, #76H ADD A,B RLC A XCH A,B RRC A XCH A,B SJMP $ 上述几条指令执行后,(A)= ,(B)= , CY= 。 第3章 指令系统 控制转移指令共有 17 条, 不包括按布尔变量控制程序转 移指令(见表 3.5)。其中有 64 KB范围内的长调用、 长转 移指令; 有 2 KB范围内的绝对调用和绝对转移指令; 有全空间 的长相对转移及一页范围内的短相对转移指令; 还有多种条件 转移指令。由于MCS -51 提供了较丰富的控制转移指令, 因此 在编程上相当灵活方便。这类指令用到的助记符共有 10 种: AJMP、LJMP、SJMP、JMP、ACALL、LCALL、JZ、 JNZ、CJNE、DJNZ。 3.2.5 控制转移指令 第3章 指令系统 一、 无条件转移指令 1. 绝对转移指令 AJMP addr11 这是2KB范围内的无条件跳转指令, 执行该指令时, 先 将PC+2, 然后将addr11送入PC10PC0, 而PC15PC11保 持不变。 这样得到跳转的目的地址。需要注意的是, 目标 地址与AJMP后面一条指令的第一个字节必须在同一个 2 KB区域的存储器区内。 第3章 指令系统 2. 短转移指令 SJMP rel 执行该指令时, 先将 PC+2, 再把指令中带符号的偏移 量加到PC上, 得到跳转的目标地址送入PC。 3. 长跳转指令 LJMP addr16 执行该指令时, 将 16 位目标地址addr16 装入PC, 程序 无条件转向指定的目标地址。转移的目标地址可以在 64 KB程序存储器地址空间的任何地方, 不影响任何标志。 第3章 指令系统 4. 散转指令 JMP A+DPTR 执行该指令时, 把累加器 A中的8位无符号数与数据指 针中的 16 位数相加, 结果作为下条指令的地址送入PC, 不 改变累加器A和数据指针DPTR的内容, 也不影响标志。 利用这条指令能实现程序的散转。 第3章 指令系统 二、 条件转移指令 JZ rel; (A)= 0 转移 JNZ rel; (A)0 转移 这类指令是依据累加器A的内容是否为 0 的条件转移指 令。条件满足时转移(相当于一条相对转移指令), 条件不 满足时则顺序执行下面一条指令。转移的目标地址在以下 一条指令的起始地址为中心的 256 个字节范围之内(128 +127)。当条件满足时, PC(PC)+N+rel, 其中(PC)为该 条件转移指令的第一个字节的地址, N为该转移指令的字节 数(长度), 本转移指令N=2。 第3章 指令系统 三、 比较转移指令 在MCS - 51 中没有专门的比较指令, 但提供了下面 4 条 比较不相等转移指令: CJNE A, direct, rel CJNE A, data, rel CJNE Rn, data, rel CJNE Ri, data, rel 这组指令的功能是: 比较前面两个操作数的大小, 如果它 们的值不相等则转移。转移地址的计算方法与上述两条指令 相同。如果第一个操作数(无符号整数)小于第二个操作数, 则进位标志Cy置“1”, 否则清“0”, 但不影响任何操作数的内容 。该指令要影响标志位Cy。 第3章 指令系统 四、 减 1不为0转移指令 DJNZ Rn, rel DJNZ direct, rel 这两条指令把源操作数减 1, 结果回送到源操作数中 去, 如果结果不为 0 则转移(转移地址的计算方法同前) 。 该指令不影响标志位。 五、 调用及返回指令 在程序设计中, 通常把具有一定功能的公用程序段编制成 子程序, 当主程序需要使用子程序时用调用指令, 而在子程序 的最后安排一条子程序返回指令,以便执行完子程序后能返回 主程序继续执行。 第3章 指令系统 1. 绝对调用指令 ACALL addr11 这是一条 2 KB范围内的子程序调用指令。执行该指令 时,先将 PC+2 以获得下一条指令的地址, 然后将 16 位地 址压入堆栈(PCL内容先进栈, PCH内容后进栈), SP内容 加 2, 最后把 PC的高 5 位PC15PC11与指令中提供的 11 位地址addr11相连接(PC15PC11, 100), 形成子 程序的入口地址送入PC, 使程序转向子程序执行。所用的子 程序的入口地址必须与 ACALL下面一条指令的第一个字 节在同一个 2 KB区域的存储器区内。 第3章 指令系统 2. 长调用指令 LCALL addr16 这条指令无条件调用位于 16 位地址addr16的子程序。 执行该指令时,先将PC+3以获得下一条指令的首地址, 并把 它压入堆栈(先低字节后高字节), SP内容加 2, 然后将 16 位地址放入 PC中, 转去执行以该地址为入口的程序。 LCALL指令可以调用 64 KB范围内任何地方的子程序。指 令执行后不影响任何标志。 第3章 指令系统 3. 子程序返回指令 RET 这条指令的功能是: 恢复断点, 将调用子程序时压入堆栈 的下一条指令的首地址取出送入PC, 使程序返回主程序继续 执行。 4. 中断返回指令 RETI 这条指令的功能与RET指令相似, 不同的是它还要清除 MCS -51 单片机内部的中断状态标志。 第3章 指令系统 控制转移指令举例 例1:读下列程序(子程序异常返回): ORG 0000H MOV SP,#60H ;3个字节 MOV A,#30H ;2个字节 LCALL SUB1 ;3个字节 ADD A,#10H ; ; 2个字节 MOV B,A ; 2个字节 SJMP $ SUB1: MOV DPTR,#000AH PHSH DPL PUSH DPH RET 问程序运行后,SP,A,B中的数据各为多少? 第3章 指令系统 ORG 0000H 0000H,0001H, 0002H MOV SP,#60H ;3个字节 0003H,0004H MOV A,#30H ;2个字节 0005H,0006H, 0007H LCALL SUB1 ;3个字节 0008H,0009H ADD A,#10H ; ; 2个字节 000AH,000BH MOV B,A ; 2个字节 000CH SJMP $ SUB1: MOV DPTR,#000AH PHSH DPL PUSH DPH RET (SP)= 62H (A)= 30H (B)= 30H 第3章 指令系统 例2 阅读以下子程序段,说明程序完成的功能 COUNT: MOV R1,#00H MOV A,30H NEXT: JZ EXIT CLR C RLC A JNC NEXT ;位操作指令,CY=0则转 INC R1 SJMP NEXT EXIT:SJMP $ 程序功能:统计内部RAM30H单元 中1的个数,并将统计结 果存入寄存器R1中。 第3章 指令系统 例3 阅读以下程序段,说明程序完成的功能 COUNT: MOV R1,#30H MOV R2,#10H NEXT: MOV A, R1 ORL A, #80H MOV R1,A INC R1 DJNZ R2, NEXT SJMP $ 程序功能:将内部RAM30H单元开始的16个连续单元的二进 制数的最高位置1。 第3章 指令系统 例4. 阅读以下程序,说明程序完成的功能 MOV R0,#20H MOV R2,#31H LOOP: CJNE R0,#0AAH,LOOP1 MOV 51H,#01H SJMP WAIT LOOP1:INC R0 DJNZ R2,LOOP MOV 51H,#00H WAIT: SJMP WAIT 程序功能:查找内部RAM单元20H50H中是否有 0AAH这 一数据,若有,则将51H单元置为01H;若没有,则将51H 单元置为0。 第3章 指令系统 指令中位地址的表达形式有以下几种: (1) 直接地址方式: 如 0A8H; (2) 点操作符方式: 如IE.0; (3) 位名称方式: 如 EX0; (4) 用户定义名方式: 如用伪指令 BIT定义: WBZD0 BIT EX0 经定义后, 允许指令中使用WBZD0 代替EX0。 3.2.6 位操作类指令 第3章 指令系统 1. 位数据传送指令 MOV C, bit MOV bit, C 这组指令的功能是: 把源操作数指出的布尔变量送 到目的操作数指定的位地址单元中。其中一个操作数必 须为进位标志 Cy, 另一个操作数可以是任何可直接寻址 位。 第3章 指令系统 2. 位变量修改指令 CLR C CLR bit CPL C CPL bit SETB C SETB bit 这组指令对操作数所指出的位进行清“0”, 取反, 置“1”的 操作, 不影响其它标志。 第3章 指令系统 3. 位变量逻辑与指令 ANL C, bit ANL C, /bit 这组指令的功能是: 如果源位的布尔值是逻辑 0, 则将进 位标志清“0”; 否则, 进位标志保持不变, 不影响其它标志。bit 前的斜杠表示对(bit)取反, 直接寻址位取反后用作源操作数, 但不改变直接寻址位原来的值。例如指令: ANL C, /ACC.0 执行前ACC.0 为 0, C为 1, 则指令执行后 C为 1, 而 ACC.0仍 为 0。 第3章 指令系统 4. 位变量逻辑或指令 ORL C, bit ORL C, /bit 这组指令的功能是: 如果源位的布尔值是逻辑 1, 则将进 位标志置“1”; 否则, 进位标志保持不变, 不影响其它标志。 第3章 指令系统 5. 位变量条件转移指令 JC rel; 若(Cy)=1, 则转移 PC(PC)+2+rel JNC rel; 若(Cy)=0, 则转移PC(PC)+2+rel JB bit, rel
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025房屋租赁合同终止合同样本新版范文
- 全球食品安全市场现状研究
- 2025专业版企业办公租赁合同范本
- 2025民间个人借款合同范本
- 2025年医学影像乳腺X线摄影技术考核答案及解析
- 2025健身房教练的劳动合同范本(标准版)
- 冰袋使用法课件
- 2025合作协议加盟连锁合同书
- 冰冻期间安全培训课件
- 物资采购合同管理办法
- 石油管道保护施工方案
- 2025秋开学典礼 校长引用电影《长安的荔枝》讲话:荔枝尚早,路正长远-在时光中奔跑,用行动送达自己的“长安”
- 中级经济师模拟试题及答案
- 家庭食品卫生知识培训课件
- 无人机应用技术培训教材
- 地铁安保培训课件
- 华中数控车床课件
- 2025年食品安全监督员专业技能考核试题及答案解析
- 七年级初一新生家长会上校长走心讲话:陪孩子一起长大是一场不能重来的旅程
- 企业微信办公使用教程
- 学堂在线 大学历史与文化 章节测试答案
评论
0/150
提交评论