第3章MCS-51的指令系.ppt_第1页
第3章MCS-51的指令系.ppt_第2页
第3章MCS-51的指令系.ppt_第3页
第3章MCS-51的指令系.ppt_第4页
第3章MCS-51的指令系.ppt_第5页
已阅读5页,还剩130页未读 继续免费阅读

下载本文档

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

文档简介

单片机原理及应用 本章内容 SingleChipMicrocomputer MCS 51指令系统概述 数据操作和指令类型 数据传送指令 寻址方式 算术运算指令 逻辑运算指令 位操作指令 控制转移指令 程序设计概述 设计语言 最早人们只能用机器语言 二进制 编写程序 为了方便记忆 人们开始用助记符形式的汇编语言编写程序 称为低级语言 然后再用汇编系统将其翻译成机器语言 该过程称为汇编 为了用更接近人的语言编写程序 程序设计师们发明了高级语言 如 BASIC FORTRAN PASCAL C JAVA然后再用编译系统将其翻译成机器语言 该过程称为编译 机器只能识别机器语言 所以必须用编译系统将高级语言编写的源程序编译成机器语言 用汇编系统将用汇编语言编写的源程序汇编成机器语言 由低级或高级语言构成的程序称为源程序 由机器语言构成的程序称作目标程序 源程序目标程序 低级语言 机器语言 汇编 高级语言 机器语言 编译 3 1MCS 51指令系统概述 一 基本概念 指令系统 一种计算机的CPU所能执行的指令集合 1 构成 机器语言 采用二进制编码表示的指令是计算机能够直接识别和执行的语言 汇编语言 采用助记符 符号 数字 来表示指令的程序语言 它与机器语言是一一对应的 3 特点 指令系统由计算机生产厂商定义 没有通用性 4 分类 MCS 51单片机的指令系统中共使用了7种寻址方式 42种助记符来说明33种功能 这些助记符与寻址方式组合起来形成111条指令 以完成以下工作 1 数据传送 29条 2 算术运算 24条 3 逻辑运算及移位 24条 4 控制转移 17条 5 位操作 17条 二 指令格式 1 指令的表示方法称之为指令格式 一条指令通常由两部分组成 操作码和操作数 操作码 规定指令进行什么操作 如加 减 数据传送 操作数 表示指令操作的对象 可以是一个具体的数据 也可以是要取得数据的地址或符号 注 操作数可分为目的操作数和源操作数 在两个操作数的指令中 通常目的操作数写在左边 源操作数写在右边 一条指令中 只有操作码是必须的 指令长度 一字节指令 操作码和操作数信息同在其中 49条 如 INCA 04H 2 二字节指令 操作码和操作数各占一个字节 45条 如 MOVA 88H 3 三字节指令 操作码占1字节 操作数占2字节 17条 如 ANL70H 50H MCS 51单片机共有255种指令代码 00H FFH 其中A5H无定义如 MOVA Rn n 0 7 代码为E8H EFH MOVA R0 MOVA R1 MOVA R2 MOVA R3 MOVA R4 MOVA R5 MOVA R6 MOVA R7 指令周期 单周期指令 64条 2 双周期指令 45条 3 四周期指令 2条 3 2寻址方式 找信方式 有我的信 找信去 注 找信是寻找信的 地址 你能说出第二封信的 地址 吗 寻址就是寻找操作数或指令的地址 所谓寻址方式就是通过什么样的途径获取操作数或将要执行的指令的方式 在一条指令中 通常是根据指令的源操作数来决定寻址方式 但实际上源操作数和目的操作数都有寻址的问题 MCS 51单片机共有7种寻址方式 即 寄存器寻址 直接寻址 寄存器间接寻址 立即数寻址 变址寻址 相对寻址和位寻址 寻址方式包含两方面内容 操作数的寻址 指令地址的寻址 如转移指令 调用指令 一 寄存器寻址 操作数在寄存器中 因此指定了寄存器的名称就能得到操作数 指令中直接给出该寄存器名称的寻址方式称为寄存器寻址 采用寄存器寻址可以获得较高的传送和运算速度 寻址空间 寄存器可以是 R0 R7 累加器A 使用符号ACC表示累加器时属于直接寻址 寄存器B 寄存器AB 数据指针DPTR 布尔累加器 如 MOVA R0 二 直接寻址 指令中操作数直接以单元地址的形式给出 寻址空间 片内RAM的低128字节 SFR 注 在直接寻址方式中的SFR经常采用符号形式表示如ACC 地址为0E0H 如 MOVA 50H 三 寄存器间接寻址 寄存器中存放的是操作数的地址 即操作数是通过寄存器间接得到的 地址需以寄存器符号的形式表示 且须在寄存器的名称前加前缀标志 以区别于寄存器寻址 如 MOVA R0 寻址空间 片内RAM 低128单元 或片外RAM 片内RAM的数据传送采用 MOV 类指令间址寄存器采用 Ri i 0 1 堆栈操作时采用SP 片外RAM的数据传送采用 MOVX 类指令外部RAM低256字节 用R0和R1或DPTR作间址寄存器外部RAM多于256字节 用DPTR作为间址寄存器 特别提示 堆栈操作也为寄存器间接寻址 如 MOVA R0 四 立即数寻址 操作数在指令中直接给出 把出现在指令中的操作数称为立即数 立即数可以为一个字节 也可以是两个字节 如 MOVDPTR 1356H由于立即数是一个常数 所以只能作为源操作数 为了与直接寻址指令中的直接地址相区别 须在立即数前加 标志 如 MOVA 50H 立即寻址所对应的寻址空间为 ROM MOVA 50H 五 变址寻址 以DPTR或PC作为基址寄存器 存放基地址 以累加器A作为变址寄存器 存放偏移量 并以两者的内容相加形成的16位地址作为操作数的地址 用以寻找程序存储器中的内容 例 MOVCA A DPTR若执行前 A 30H DPTR 2200H则操作数地址为 A DPTR 2230H 如 MOVCA A DPTR 说明 1 变址寻址的寻址范围 取决于基址寄存器 若以PC为基址寄存器 则寻址范围为以当前PC值为起始的256B 若以DPTR为基址寄存器 则范围为64KB 2 变址寻址的指令只有3条 MOVCA A DPTRMOVCA A PCJMP A DPTR 查表指令 读程序存储器内容 无条件转移指令 3 变址寻址的指令均为1字节指令 六 相对寻址 相对寻址方式是为解决程序的转移而专门设置的 为转移指令所采用 将PC当前值加上偏移量rel构成目的地址注 PC当前值为该相对转移指令的下一条指令地址 故 目的地址 转移指令地址 转移指令字节数 rel 其中偏移量rel是一个带符号的8位二进制补码数 所能表示的范围是 128 127共256个字节 如 JC35H 假设当前指令地址为2000H 由于JC35H为2字节指令故目的地址为 2000H 2 35H 2037H 如 JCrel rel 75H 说明 在编译程序时通常是已知目的地址找偏移量但由于源程序用汇编语言编写 所以计算偏移量的工作也由编译程序完成 七 位寻址 MCS 51有位处理功能 可以对数据位进行操作 因此就有相应的位寻址方式 采用位寻址指令的操作数是8位二进制数中的某一位 指令中给出的是位地址 位寻址方式实质属于位的直接寻址 寻址空间为 片内RAM的20H 2FH单元中的128可寻址位 SFR中的可寻址位 实际82位 位寻址 1 00000000 想一想 如果想使27H单元的第5位置1 该怎么办呢 位寻址地址表 例 SETB3DH 3D 3C 3B 3F 3E 3A 39 38 27H 位寻址 SETB3DH 0000000 1 0 位地址在指令中的几种表示方法 1 直接使用位地址如SETB00H 2 使用位名称如 SETBEA 3 单元地址加位如 CLR20H 0 4 专用寄存器符号加位如 CLRACC 1或CLRIE 7习惯上 特殊功能寄存器的寻址位常用符号位地址表示 作业 教材65页 第2题 第3题 第4题 第6题 第7题 第9题 第10题 3 3数据操作和指令类型 一 程序状态字PSW 字节地址0D0H 程序状态字是一个8位寄存器 用来存放程序运行的状态信息 供程序查询或判别用 在状态字中 有些位状态是根据指令执行结果 由硬件自动完成设置的 而有些状态位则必须通过软件方法设定 PSW中的每个状态位都可由软件读出 在位操作中作累加位 简称C 在位传送 位与 位或操作时 作为操作数之一 如 MOVC bit或 ANLC bit 在执行加法或减法时 如果运算结果最高位即位7向前有进位或借位 则CY位由硬件置1 若运算结果无进位或借位 则CY位由硬件清0 CY PSW 7 进位标志位 位累加器C 各位含义如下 AC PSW 6 辅助进位标志位 半进位标志 执行加法或减法操作而产生由低4位向高4位的进位或借位时 硬件置1 否则硬件清0 在十进制调整指令中 将借助AC位的状态进行判断 F0 PSW 5 用户标志位 该位为用户定义的状态标记 用户根据需要用软件对其置位或清零 也可以用软件测试F0来控制程序的跳转 RS1 PSW 4 RS0 PSW 3 当前寄存器区选择位 通过软件置 0 或 1 来选择当前工作寄存器区 OV PSW 2 溢出标志位 当执行算术指令时 由硬件置位或清零来指示溢出状态 在带符号的加减运算中 OV 1表示加减运算结果超出了累加器A所能表示的符号数有效范围 128 127 即运算结果是错误的 反之 OV 0表示运算正确 即无溢出产生 无符号数乘法 OV 1 表示乘积超过了255 即乘积分别放在B 高8位 与A 低8位 中 OV 0 表示乘积只存放于A中 B 0 除法运算 OV 1 表示除数为0 除法不能进行OV 0 表示除数不为0 除法可以正常进行 P PSW 0 奇偶标志位 每个指令周期由硬件来置位或清零用以表示累加器A中1的个数的奇偶性 P 0累加器A中1的个数为偶数P 1累加器A中1的个数为奇数 常用于校验串行通信中的数据传送是否出错 F1 PSW 1 51未用 52中用作用户标志位 二 指令学习要点 1 了解指令的操作 2 了解指令的寻址方式 3 了解指令对程序状态字的影响 例 将累加器A中的内容增1操作 ADDA 1 双字节 单周期 影响PSW INCA 单字节 单周期 不影响PSW ADD后面可以使用判标志转移指令如jc INC可节约一个存储单元 各有优缺点 4 合理使用指令 工作寄存器R0 R7 累加器A 程序存储器ROM 内部数据存储器RAM 30H 7FH 外部数据存储器RAM IO口 特殊功能寄存器SFR 除A以外 3 4数据传送指令 29条 Rn n 0 7 当前选中的工作寄存器组中的寄存器R0 R7之一 Ri i 0 1 当前选中的工作寄存器组中的寄存器R0或R1 间址寄存器前缀 data 8位立即数 data16 16位立即数 direct 片内低128个RAM单元地址及SFR地址 可用符号名称表示 指令及其注释中常用的符号 addr11 11位目的地址 addr16 16位目的地址 rel 补码形式表示的8位地址偏移量 值在 128 127范围内 bit 片内RAM位地址 SFR的位地址 可用符号名称表示 位操作数的取反操作前缀 表示 地址单元或寄存器中的内容 表示以 单元或寄存器内容为地址间接寻址单元的内容 将箭头右边的内容送入箭头左边的单元中 1 以累加器A为目的操作数的指令 1 内部数据传送指令 MOVA Rn MOVA direct MOVA Ri MOVA data 直接地址 立即数 你能说出这些指令的寻址方式吗 2 以Rn为目的操作数的指令 MOVRn direct 直接地址 MOVRn A MOVRn data 立即数 2周期 2周期 MOVdirect A 直接地址 3 以直接寻址单元为目的操作数的指令 MOVdirect Rn 直接地址 MOVdirect direct 直接地址 源 MOVdirect Ri 直接地址 MOVdirect data 直接地址 直接地址 目的 立即数 2周期 2周期 2周期 2周期 MOV Ri A 4 以寄存器间接寻址单元为目的操作数的指令 MOV Ri direct 直接地址 MOV Ri data 立即数 2周期 MOVDPTR data16 高位立即数 5 16位数据传送指令 低位立即数 2周期 6 堆栈操作指令 2字节 2周期 堆栈的特点 堆栈是在内部RAM中按 后进先出 的规则组织的一片存储区 此区的一端固定 称为栈底 另一端是活动的 称为栈顶 栈顶的位置 地址 由栈指针SP指示 即SP的内容是栈顶的地址 在80C51中 堆栈的生长方向是向上的 地址增大 系统复位时 SP的内容为07H 通常用户应在系统初始化时对SP重新设置 SP的值越小 堆栈的深度越深 PUSHdirect 直接地址 堆栈操作指令 POPdirect 直接地址 SP SP 1 SP direct direct SP SP SP 1 例 若 SP 07H 40H 88H 执行指令PUSH40H后 SP 08H 08H 88H 指令使用要点 先设定堆栈指针SP 进栈 指针加 压入堆栈 出栈 弹出数据指针减 只能用直接地址 SFR用寄存器名称 限于内部 遵循后进先出原则 XCHA Rn 字节交换指令 均与累加器 有关 XCHA direct 直接地址 XCHA Ri XCHDA Ri 8 半字节交换指令 均与累加器 有关 交换低4位 SWAPA 累加器A的高 低半字节交换 例 设 A 0E8H执行指令SWAPA结果 A 8EH 若需交换高半字节 怎么办 先用整字节交换 再用低半字节交换 结合SWAPA指令 2 累加器A与外部数据存储器传送指令 MOVXA DPTR MOVXA Ri MOVX Ri A MOVX DPTR A 读数 送数 特点 单片机与外部RAM交换数据必须通过累加器A MOVX指令功能强大 但用法复杂 因为外部RAM与I O口统一编址 共占64KB空间 故操作与硬件连接方式有关 易错地方 MOVX DPTR direct 没有这样的指令 MOVCA A DPTR 3 查表指令 查表 在ROM中存放固定数据 通常在连续地址单元按特定顺序存放 类似 表格 可以被各个程序块公用 只需知道表首地址即可得到相应的数据 MOVCA A PC A PC A A DPTR A 说明 A中内容作为无符号数与基址寄存器形成16位地址 单片机从程序存储器中读数据必须通过累加器A 寻址范围取决于基址寄存器 4 数据传送类指令小结 1 关于指令长度 1 凡涉及direct data均另外占用存储单元堆栈操作PUSH POP均为双字节指令 2 涉及外部RAM MOVX 查表指令 MOVC 则为单字节指令 2 关于指令周期 1 堆栈操作 PUSH POP MOVX MOVC均为双周期 2 16位数据传送指令MOVDPTR data16双周期 3 操作数中有直接地址direct而无累加器A的传送指令为双周期 4 其余单周期 3 关于内部数据传送中目的操作数 源操作数的规律 1 Rn与 Ri不能互传数据 2 A与A Rn与Rn Ri与 Ri不能互传数据 3 direct与direct之间可互传数据 参与对象 累加器A 工作寄存器Rn 直接寻址单元direct 间接寻址单元 Ri 立即数 SFR 规律 数据传送类指令对程序状态字PSW的影响 除与累加器A有关的传送影向奇偶校验位P外 其他操作均不影响程序状态字PSW 5 在指令存在的前提下可根据需要灵活选用 但不能 自造 指令 例 把累加器A的内容传送到内部RAM20H单元 MOV20H A MOV20H ACC MOV20H 0E0H MOVR0 20HMOV R0 A PUSHACCPOP20H 3 5算术运算指令 一 加法指令 1 不带进位的加法指令 ADDA Rn ADDA direct 直接地址 ADDA Ri ADDA data 立即数 功能 把所指出的第二操作数和累加器A的内容相加 其结果放在累加器A中 对PSW的影响 CY 位 有进位输出置 否则清零 AC 位3有进位输出置 否则清零 OV 是位6进位情况和位7进位情况的异或 即位6和位7都有进位或都无进位清0 位6和位7一个有进位另一个无进位置1 注 溢出标志位对无符号数相加无意义 有符号数运算表示结果是否正确 如两正数相加结果为负数错误 7EH 7EH P 略 例 设 A 53H R0 0FCH执行指令ADDA R0 01010011 11111100 1 01001111 结果 A 4FHCY 1AC 0OV 0P 1 例 设 A 85H R0 20H 20H 0AFH执行指令ADDA R0 10000101 10101111 1 00110100 结果 A 34HCY 1AC 1OV 1P 1 2 带进位的加法指令 ADDCA Rn ADDCA direct 直接地址 ADDCA Ri ADDCA data 立即数 功能 把进位标志位C 第2操作数 累加器A中内容相加 结果放在累加器A中 对PSW的影响 与ADD指令相同 第2操作数寻址方式 与ADD指令相同 带进位加法指令常用于多字节数的加法运算 例 设 A 85H 20H 0FFH CY 1执行指令ADDCA 20H 10000101 11111111 1 10000101 结果 A 85HCY 1AC 1OV 0P 1 1 例 两个双字节数相加 36ADH 0ACDCH MOVA 0ADH ADDA 0DCH MOV20H A MOVA 36H ADDCA 0ACH MOV21H A 36ADH 0ACDCH 20H C 21H C 21H 20H C 结果低8位 结果高8位 进位 ADDC 3 增量指令 INCA INCRn 直接地址 INCdirect INC Ri INCDPTR 功能 把指定内容的操作数加1 结果再送回原单元 说明 除对A操作影响奇偶标志位P外 不影响标志位 若原值为0FFH 则加1后变为00H DAA 4 十进制调整指令 功能 对上一条加数和被加数均为压缩BCD码的加法指令所获得的8位结果进行调整 使它调整为压缩BCD码的数 1 BCD码 用二进制表示的十进制数 一个十进制数用四位二进制数表示 如用1001表示9 压缩BCD码 用一个字节的8位二进制数来表示两位十进制数 高低4位分别表示一位十进制数 如 二进制数10010101表示十进制数95 例 87H 13H 若按压缩BCD码相加 应得到00H 并向高位进1 但执行ADD指令得到的结果却为9AH 不符合要求 10000111 00010011 10011010 00000110 10100000 01100000 100000000 低4位出现了非BCD码 1010 1111 如何调整呢 高4位出现也出现了非BCD码 超过9加6 结果正确 例 88H 88H 10001000 10001000 100010000 若按压缩BCD码相加 应得到76H 并向高位进1 但执行ADD指令得到的结果却为10H 不符合要求 高低4位均出现了进位现象 01100110 101110110 有进位加6 结果正确 2 调整规则 当累加器A中的低4位数出现了非BCD码 1010 1111 或低4位产生进位 AC 1 则应在低4位加6调整 以产生低4位正确的BCD结果 当累加器A中的高4位数出现了非BCD码 1010 1111 或高4位产生进位 CY 1 则应在高4位加6调整 以产生高4位正确的BCD结果 十进制调整指令执行后 PSW中的CY表示结果的百位值 实质 根据累加器A中的数值和PSW的状态对A进行加06H 60H 66H的操作 3 对标志位的影响 因调整产生进位则置1CY 否则保持CY不变 并不清零CY 不影响溢出标志位OV 4 使用时的注意事项 必须跟在加法指令 ADD或ADDC 后使用 不能简单的把累加器A中的16进制数变换成BCD码 不适用于减法指令 二 减法指令 SUBBA Rn SUBBA direct 直接地址 SUBBA Ri SUBBA data 立即数 功能 累加器A中的内容减去进位标志位C和指定的源操作数内容 结果放在累加器A中 1 带借位减法指令 对标志位的影响 CY AC 第7位或第3位有借位则分别置1 否则清0 OV 带符号减法运算时 OV的状态表示结果的正确性其状态是累加器A中第6位和第7位借位情况的异或 如正数减负数结果为负数或负数减正数结果为正数则OV被硬件置1 无符号数减法运算时OV无意义 使用注意事项 没有不带借位的减法指令 故在做减法之前 若不知进位标志CY的值 应首先将CY清0 例 多字节减法 5BA3H 3241H MOVA 0A3H CLRCY 或CLRC SUBBA 41H MOVR0 A MOVA 5BH SUBBA 32H MOVR1 A 例 十进制减法 补码表示及其意义 补码表示法可将减法转变为加法运算 正数的补码为原码本身负数的补码为将原码诸位取反再加1 符号位不变 有 X Y 补 X 补 Y 补 如 28H 14H 28H 14H 补 28H 补 14 补 注 将进位舍弃可得正确结果 为减法作十进制调整 由于没有十进制减法调整指令 为了用十进制加法调整指令作十进制减法调整 必须采用补码相加的办法 用9AH减去减数即得以10为模数的补码 如 86H 29H CLRC MOVA 9AH SUBBA 29H ADDA 86H DAA 求减数的补码 使用SUBB指令得结果5DH 得结果57H 2 减1指令 DECA DECRn 直接地址 DECdirect DEC Ri 功能 把指定内容的操作数减1 结果再送回原单元 说明 除对A操作影响奇偶标志位P外 不影响标志位 若原值为00H 则减1后变为0FFH DPTR无减1指令 MULAB 功能 把累加器A和寄存器B中的8位无符号数相乘 其16位积的低8位放在累加器A中 高8位放在寄存器B中 三 乘法指令 对PSW的影响 CY 总是被清0 不会产生进位 OV 若乘积大于255 0FFH OV被置1 B 0若乘积小于255 0FFH OV被清0 B 0 例 多字节乘法 设被乘数为3个字节 分别存储在符号地址J K L单元中 乘数为单字节 存储在符号地址M单元中 J K L M HML LML HMK LMK HMJ LMJ R3 R2 R1 R0 PUSHACC PUSHB MOVA M MOVB L MULAB MOVLML A MOVHML B MOVA M MOVB K MULAB MOVLMK A MOVHMK B MOVA M MOVB J MULAB MOVLMJ A MOVHMJ B MOVR0 LML MOVA HML ADDA LMK MOVR1 A MOVA HMK ADDCA LMJ MOVR2 A CLRA ADDCA HMJ MOVR3 A POPB POPACC 四 除法指令 DIVAB 功能 把累加器A中的8位无符号数除以寄存器B中的8位无符号数 所得商的整数部分放在累加器A中 余数部分放在寄存器B中 对PSW的影响 CY 总是被清0 不会产生进位 OV 若寄存器B中内容为0即除法无法进行时将OV置1 否则清0 五 算术运算指令小结 1 关于指令长度 direct data均各自占一个字节单元 2 关于指令周期 INCDPTR2周期 乘除运算4周期 其余单周期 3 关于操作数 加法 减法的目的操作数 运算结果均在A中 乘除运算两操作数分别在A B中 一 累加器A的逻辑操作指令 CLRA 功能 把累加器A清 0 对PSW的影响 影响P标志 不影响其他标志位 3 6逻辑运算指令 24条 CPLA 功能 把累加器A的每一位逻辑取反 对PSW的影响 影响P标志 不影响其他标志位 功能 把累加器A的每一位循环左移一位 A7移向A0 对PSW的影响 不影响标志位 RLA 功能 把累加器A的每一位循环右移一位 A0移向A7 对PSW的影响 不影响标志位 RRA 功能 把累加器A连同进位C循环左移一位 A7移向C C移向A0 对PSW的影响 影响P标志 不影响其他标志位 RLCA 功能 把累加器A连同进位C循环右移一位 C移向A7 A0移向C 对PSW的影响 影响P标志 不影响其他标志位 RRCA A 0 A 7 A 0 A 7 A 0 A 7 A 0 A 7 CY CY RLARRARLCARRCA 注意 执行带进位的循环移位指令之前 必须给CY置位或清零 循环移位指令 移位指令可用于走灯程序 MOVA 01H LOOP MOVP1 A LCALLDELAY RLA JMPLOOP DELAY 有时 累加器A内容乘2 的任务可以利用指令RLCA方便地完成 结果为 17AH 378 2 BDH 189 例 若 A 0BDH 10111101B CY 0 执行指令RLCA后 CY 1 A 01111010B 7AH 二 两个操作数的逻辑操作指令 ANLA Rn ANLA direct 直接地址 ANLA Ri ANLA data ANLdirect A 1 逻辑与指令 ANLdirect data 立即数 直接地址 立即数 功能 在指出的操作数之间执行按位的逻辑与操作 结果存放在目的操作数中 对PSW的影响 影响P标志 不影响其他标志位 注意 ANL指令常用来屏蔽某些不用的位 方法是将该位用 0 相 与 这种操作的目的操作数常用直接地址寻址 而源操作数则用立即数 如 ANLP1 1FH 执行结果 屏蔽P1口锁存器的高3位 其他位保持原值不变 ORLA Rn ORLA direct 直接地址 ORLA Ri ORLA data ORLdirect A 2 逻辑或指令 ORLdirect data 立即数 直接地址 立即数 功能 在指出的操作数之间执行按位的逻辑或操作 结果存放在目的操作数中 对PSW的影响 影响P标志 不影响其他标志位 注意 ORL指令可将寄存器 直接地址单元 的某些位置 1 方法是将需要置位的位与立即数 1 相 或 例 将累加器A的低5位送P1口的低5位 要求不影响P1口的高3位 ANLA 1FH 屏蔽A的高3位 ANLP1 0E0H 屏蔽P1口低5位 ORLP1 A 送低5位 高3位不变 XRLA Rn XRLA direct 直接地址 XRLA Ri XRLA data XRLdirect A 3 逻辑异或指令 XRLdirect data 立即数 直接地址 立即数 功能 在指出的操作数之间执行按位的逻辑异或操作 结果存放在目的操作数中 对PSW的影响 影响P标志 不影响其他标志位 注意 1 利用XRL指令可对目的操作数的某些位取反 方法是将需取反的位与 1 相 异或 这种操作的目的操作数常用直接地址寻址 而源操作数则用立即数或累加器A 2 利用XRL指令可判别两个数是否相等 若相等则结果为全 0 否则不相等 如 XRLP1 0FH 将P1口低4位取反 三 逻辑操作指令小结 1 指令长度 Direct data单独占用字节单元 2 指令周期 Direct data 双周期 其余单周期 3 逻辑运算指令除与累加器A有关的影响奇偶标志P之外 不影响标志位 4 当需要只改变数据的某几位 而其余位不变时 不能使用直接传送方法 只能通过逻辑运算完成 如累加器A低4位送P1口低4位 5 只有累加器A才有清0和取反操作 3 7位操作指令 12条 一 概述 MCS 51系列单片机从硬件到软件第一次设置了独立的按位操作的位处理器 又叫布尔处理器 它同样由CPU 程序存储器 数据存储器 累加器和I O口组成 它们均以位为处理对象 1 程序存储器 由于位操作指令仍以字节为单位 分单 双 三字节指令 故与字节程序存储器共用 数据存储器 即片内位寻址空间 位累加器 将PSW中的进位标志位CY作为布尔处理器的位累加器使用 二 位操作指令 MOVC bit MOVbit C 位地址 1 位变量传送指令 位地址 功能 把源操作数指出的位变量送到目的操作数的位单元 还记得吗 位地址在指令中有几种表示方法 1 直接使用位地址如SETB00H 2 使用位名称如 SETBEA 3 单元地址加位如 CLR20H 0 4 专用寄存器符号加位如 CLRACC 1或CLRIE 7习惯上 特殊功能寄存器的寻址位常用符号位地址表示 位变量传送必须经过位累加器C 思考 将累加器A中的数据送译码器 RRCA MOVP1 6 C RRCA MOVP1 5 C RRCA MOVP1 4 C RRCA MOVP1 3 C CLRC CLRbit 位地址 2 位变量修改指令 1 位清 0 指令 SETBC SETBbit 位地址 2 位置 1 指令 CPLC CPLbit 位地址 3 位取反指令 3 位变量逻辑操作指令 ANLC bit ANLC bit 位地址 1 位变量逻辑与指令 功能 把源操作数指出的位和位累加器C中内容相 与 结果送累加器C中 位地址 注意 操作数前的 表示用寻址位的逻辑非作源值 但不影响源位本身的值 ORLC bit ORLC bit 位地址 2 位变量逻辑或指令 功能 把源操作数指出的位和位累加器C中内容相 或 结果送累加器C中 位地址 注意 操作数前的 表示用寻址位的逻辑非作源值 但不影响源位本身的值 例 1 要求当P1 0 1 且ACC 7 1 且OV 0时 将C置1 MOVC P1 0 ANLC ACC 7 ANLC OV 例 2 要求当P1 0 1 或ACC 7 1 或OV 0时 将C置1 MOVC P1 0 ORLC ACC 7 ORLC OV 例 3 实现逻辑运算功能 代替硬件组合逻辑电路 MOVC E ORLC F ANLC D ORLC G MOVL C 三 位操作指令小结 1 关于指令长度 凡出现直接地址位bit则单独占用一个字节单元 2 关于指令周期 单操作数如SETBbit均为单周期 双操作数除MOVC bit为单周期 其余均为双周期 3 位变量传送 位变量逻辑操作 双操作数 必须通过位累加器C才能进行 3 8控制转移指令 17条 通常情况下 程序的执行是顺序进行的 但也可以根据需要改变程序的执行顺序 这种情况称作程序转移 控制程序的转移要利用转移指令 80C51的转移指令有无条件转移 条件转移及子程序调用与返回等 AJMPaddr11 1 短转移 绝对转移 指令 一 无条件转移指令 功能 提供低11位地址和PC当前值的高5位组成目标地址 程序即无条件转向目标地址处执行 操作码 第一字节 操作码 第二字节 PC高5位 保持不变 PC低11位 说明 1 操作码第一字节由页地址和 00001 组成 a0 a7为页内地址 操作码 第一字节 操作码 第二字节 7页0 255单元 E1H 111 6页0 255单元 C1H 110 5页0 255单元 A1H 101 4页0 255单元 81H 100 3页0 255单元 61H 011 2页0 255单元 41H 010 1页0 255单元 21H 001 0页0 255单元 01H 000 页内寻址 操作码 第一字节 地址页 说明 转移范围 包含AJMP下条指令在内的2KB区间 执行时用指令提供的11位地址 替换 PC低11位地址 而不是相加 如 2070HAJMP16AH 则当前PC 2070H 2 2072H 0 1 0 0 1 1 1 0 0 0 0 0 0 1 0 0 转到PC 216AH Addr11 16AH 4 本指令为兼容48系列机而设 优点是2字节指令 2 相对转移指令 SJMPrel 相对地址rel 功能 无条件跳转指令 将PC的当前值和由指令提供的相对偏移量rel相加 形成转移有效目标地址 说明 相对偏移量是一个带符号的8位二进制补码 范围是 128 127 补码表示法 正数 符号 绝对值表示 最高有效位为0 如 1 补 00000001 127 补 01111111 0 补 00000000 负数 用2n X 表示 n为字长 1 补 28 1 11111111 127 补 28 127 10000001特 0 补 28 00000000故补码表示法中0只有一种 00000000而对于 10000000 在补码表示法中被定义为 128 故8位补码能表示数的范围为为 128 127 求负数补码 写出其对应的正数的补码 按位取反末位加1 补充 扩展位数 如8 16 正数 前边补0 46 补 0000000000101110负数 前边补1 46 补 1111111111010010 PC 2002H 2003H 0000H 0001H 2004H 2005H 2006H PC PC PC 2006H 2003H PC 0002H PC 例 2001HSJMP03H 03H就是当前PC值与目的PC值相对差 PC 3 优 给出相对偏移量 与其他部分程序的修改无关 缺 转移范围小 3 长跳转指令 LJMPaddr16 a15 a8 功能 提供16位目标地址 将指令的第2 第3字节地址码分别装入PC的高8位和低8位中 程序无条件转向指定的目标地址中去执行 特点 直接提供16位目标地址 程序可转向64K程序存储器空间的任何单元 不影响标志位 a7 a0 4 间接转移指令 散转指令 JMP A DPTR 功能 将累加器A中的8位无符号数和16位数据指针DPTR中的内容相加 形成有效目标地址 特点 目标地址在程序运行时动态决定 以DPTR为起始的256个字节范围 注 本指令执行时 内部进行以216为模的加法运算 从低8位产生的进位将传递到高位 最高位产生的进位将丢弃 运算不影响A和DPTR的原内容 说明 可以实现程序的散转 一条间接转移指令代替众多的转移指令 例 键盘处理程序 A中存放键号 0 7 PM MOVR1 A RLA ADDA R1 A 3 A MOVDPTR PMTB 表首地址 DPTR JMP A DPTR PMTB LJMPPM0 转向0号键处理程序 LJMPPM7 LJMPPM1 二 条件转移指令 根据指令给出的条件进行检测 若条件满足则程序转向目标地址执行 若条件不满足则顺序执行 条件转移指令均属于相对寻址方式 指令提供相对偏移量rel 转移范围为以当前PC值为中心的 128 127共256个字节单元 JZrel JNZrel 相对地址rel 1 测试条件符合转移指令 相对地址rel 累加器A判0转移指令 功能 对累加器A的内容为0和不为0进行检测并转移 当不满足各自的条件时 程序继续往下执行 当各自的条件满足时 程序转向指定的目标地址 目标地址的计算与SJMP指令情况相同 指令执行时对标志位无影响 例 设累加器A原内容为01H 执行 0100H JZLABEL1 0B0H DECA JZLABEL2 150H 计算偏移量公式 rel 目标地址 PC当前值 1 PC 2 102H rel 0B0H 102H 52H补码形式 0AEH 2 PC 2 103H 2H 105H rel 150H 105H 4BH补码形式 4BH JCrel JNCrel 相对地址rel 相对地址rel 位累加器C判别转移指令 功能 对进位标志位CY进行检测 当 CY 1 第一条指令 或 CY 0 第二条指令 程序转向PC当前值与rel之和的目

温馨提示

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

最新文档

评论

0/150

提交评论