单片机111条指令_第1页
单片机111条指令_第2页
单片机111条指令_第3页
单片机111条指令_第4页
单片机111条指令_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1 MCS 51 单片机的指令 一 数据传送类指令 29 条 1 通用传送指令 16 条 格式 MOV 目的操作数 源操作数 功能 把第二操作数指定的字节内容传送到第一操作数指定的单元中 不影响源操作 数内容 不影响别的寄存器和标志 根据目的操作数的不同 通用传送指令又分为以下几种类型 1 1 以累加器A为目的操作数的传送类指令 4条 指令助记符及功能说明如下 目的操作数源操作数功能说明源操作数寻址方式 MOVA direct A direct 直接寻址 MOVA Ri A Ri 寄存器间接寻址 MOVA Rn A Rn 寄存器寻址 MOVA data A data立即寻址 这类指令的功能是将源操作数送到目的操作数 A 中 指令执行后的结果 除了奇偶 标志 P 始终跟踪 A 中数据的奇偶性外 不影响 PSW 中的其他标志位 1 2 以Rn为目的操作数的传送类指令 3条 指令助记符及功能说明如下 目的操作数源操作数功能说明源操作数寻址方式 MOVRn A Rn A 寄存器寻址 MOVRn direct Rn direct 直接寻址 MOVRn data Rn data立即寻址 2 2 其中 Rn 是 R0 R7 中的任意一个 例 1 若 A 20H 则执行指令 MOV R3 A 后 R3 20H 注意 Rn 寄存器之间不能直接传送数据 如指令寄存器之间不能直接传送数据 如指令 MOV R1 R7 是错误的 是错误的 该类指令执行后 不影响该类指令执行后 不影响 PSW 中的标志位 中的标志位 1 3 以直接地址directX为目的操作数的传送类指令 5条 指令助记符及功能说明如下 目的操作数源操作数功能说明源操作数寻址方式 MO V directX A directX A 寄存器寻址 MO V directX Rn directX Rn 寄存器寻址 MO V directX directY directX directY 直接寻址 MO V directX Ri directX Ri 寄存器间接寻址 MO V directX data directX data立即寻址 这类指令的功能是把源操作数的内容送到直接地址 directX 中去 在上述指令中的直接地址单元 directX 与 directY 是指内部 RAM 的 00H 7FH 区域 以及特殊功能寄存器 例 1 若 30H 20H R0 30H 则执行指令 MOV 90H R0 的结果为 90H 20H 1 4 以寄存器间接地址 Ri为目的操作数的传送类指令 3条 指令助记符及功能说明如下 目的操作数源操作数功能说明源操作数寻址方式 MOV Ri A Ri A 寄存器寻址 MOV Ri direct Ri direct 直接寻址 MOV Ri data Ri data立即寻址 这类指令的功能是将源操作数的内容送到由 Ri R0 或 R1 的内容所指定的地址中去 例 1 若 R0 50H 50H 20H A 10H 则执行指令 MOV R0 A 后 50H 单 元的内容由原来的 20H 变为 10H 该类指令执行后 不影响 PSW 中的标志位 3 1 5 16位目标地址传送指令 1条 指令助记符及功能说明如下 目的操作数源操作数功能说明源操作数寻址方式 MO V DPTR data16 DPTR data16立即寻址 这条指令的功能是 把 16 位立即数送入 DPTR 中 而 16 位的数据指针 DPTR 由 DPH 与 DPL 组成 该指令执行后 16 位立即数的高 8 位送入 DPH 中 低 8 位送入 DPL 中 2 外部数据存储器 或 I O 口 与累加器 A 传送指令 4 条 为了区别于以 MOV 为指令助记符的内部数据传送指令 外部数据存储器传送指令的 指令助记符为 MOVX 指令助记符与功能说明如下 目的操作数源操作数功能说明源操作数寻址方式 MOVXA DPTR A DPTR 寄存器间接寻址 MOVXA Ri A Ri 寄存器间接寻址 MOVX DPTR A DPTR A 寄存器寻址 MOVX Ri A Ri A 寄存器寻址 例 1 设 P2 20H 现将 A 中数据存储到 20FFH 单元中去 可用以下程序实现 MOV R1 0FFH R1 0FFH MOVX R1 A 20FFH A 也可采用下述程序实现 MOV DPTR 20FFH DPTR 20FFH MOVX DPTR A DPTR A 即 20FFH A 执行结果是一样的 A 中数据都是被存储到外部存储器的 20FFH 单元中去 3 程序存储器向累加器 A 传送数据指令 2 条 指令助记符与功能说明如下 目的操作数源操作数功能说明源操作数寻址方式 MOVA A PC A A PC 1 变址寻址 4 4 C MOV C A A DPTR A A DPTR 变址寻址 4 数据交换指令 5 条 数据交换指令有两类 分别是 字节交换指令和半字节交换指令 4 1 字节交换指令 指令助记符与功能说明如下 目的操作数源操作数功能说明源操作数寻址方式 XCHA direct A direct 直接寻址 XCHA Ri A Ri 间接寻址 XCHA Rn A Rn 寄存器寻址 上述指令的功能是将累加器 A 中的内容与源操作数所指定的直接寻址 间接寻址 寄存器寻址的某一单元内容互相交换 例 1 设 R1 30H 30H 45H A 7FH 则执行指令 XCH A R1 结果 A 45H 而 30H 7FH 从而实现了累加器 A 与内部数据存储器 RAM 中 30H 单元的数据交换 4 2 半字节交换指令 指令助记符与功能说明如下 目的操作数源操作数功能说明源操作数寻址方式 XCHDA Ri A Ri 间接寻址 该指令是把累加器 A 的低 4 位与寄存器 Ri 间接寻址的内部 RAM 单元的低 4 位互换 高 4 位内容不变 例 1 设 30H 6FH R0 30H A 0F6H 则执行指令 XCHD A Ri 结果 A 0FFH 30H 66H 数据交换指令除了影响始终跟踪 A 中数据奇偶性的 P 标志外 对 PSW 中其他标志位 均无影响 5 4 3 累加器A中高四位与低四位交换指令 SWAP A 该指令所执行的操作是累加器 A 中的高 4 位与低 4 位的内容互换 其结果仍存放在 累加器 A 中 例 1 设 A 0A5H 10100101B 则执行指令 SWAP A 结果 A 5AH 01011010B 5 堆栈操作指令 2 条 堆栈操作指令只有 2 条 即 压入 PUSH 和弹出 POP 压入指令 PUSH direct SP SP 1 SP direct 弹出指令 POP direct SP direct SP SP 1 在 MCS 51 单片机中 堆栈中的数据是以 先进后出 的结构方式处理的 入栈操作 过程为 先将堆栈指针 SP SP 1 指向栈顶的上一个空单元 然后再将直接寻址单元 direct 中的数据传送到 SP 所指示的地址单元中去 而出栈操作过程则为 将堆栈指针 SP 所指示的栈顶中的数据弹出 传送到直接寻址单元 direct 中 然后 SP SP 1 形成新的 栈顶指针 它们常被应用在保护现场 即把寄存器的内容暂存在某内存区 和恢复现场的程序中 例 1PUSH A 保护 A 中数据 PUSH PSW 保护标志寄存器中数据 执行服务程序 POP PSW 恢复标志寄存器中数据 POP A 恢复 A 中数据 执行上述程序后 A 和 PSW 寄存器中的内容可得到正确恢复 6 6 二 算术运算类指令 24 条 1 加减运算指令 12 条 1 1 加法指令 4条 指令助记符与功能说明如下 目的操作数源操作数功能说明源操作数寻址方式 ADDA data A A data立即寻址 ADDA direct A A direct 直接寻址 ADDA Ri A A Ri 寄存器间接寻址 ADDA Rn A A Rn 寄存器寻址 这类指令所完成的操作是把源操作数 立即数 直接地址单元内容 间接地址单元内 容 工作寄存器内容 与累加器 A 的内容相加 将结果保存在累加器 A 中 影响程序状态 寄存器的 AC CY OV P 标志位 例 1 执行指令 MOV A 0A9H 运算结果 A 61H 1 2 带进位加法指令 指令助记符与功能说明如下 目的操作数源操作数功能说明源操作数寻址方式 ADD C A data A A data C 立即寻址 ADD C A direct A A direct C 直接寻址 ADD C A Ri A A Ri C 寄存器间接寻址 ADD C A Rn A A Rn C 寄存器寻址 带进位加法指令与前述加法指令的区别仅为考虑进位位 其他与加法指令相同 例 1 设 A 0AAH R0 55H C 1 则执行指令 7 ADDC A R0 运算结果 A 00000000B CY 1 3 带借位减指令 指令助记符与功能说明如下 目的操作数源操作数功能说明源操作数寻址方式 SUBBA data A A data C 立即寻址 SUBBA direct A A direct C 直接寻址 SUBBA Ri A A Ri C 寄存器间接寻址 SUBBA Rn A A Rn C 寄存器寻址 在单字节相减时 为了避免相减后结果出错 必须先清 0 借位位 C 例 1 设 40H 0BAH 41H 98H 试编写 40H 内容减去 41H 内容后 结果再存入 40H 单元的程序 MOVA 40H A 40H CLRC 进位位 C 清 0 SUBBA 41H A A 41H C MOV40H A 40H A 执行以上程序后 40H 22H CY 0 OV 0 2 乘除运算指令 2 条 1 乘法指令 MUL AB A 乘积低 8 位 B 乘积高 8 位 该指令把累加器 A 与寄存器 B 中的 8 位无符号整数相乘 所得到的 16 位乘积的低 8 位存放在累加器 A 中 高 8 位存放在寄存器 B 中 如果二者的乘积大于 255 0FFH 则溢出标志位置 1 否则清 0 运算结果总使进位 标志位 CY 清 0 例 1 设 A 67H 103 B 0ADH 173 执行指令 MUL AB 运算结果 乘积为 459BH 17819 A 9BH B 45H 另外 OV 1 CY 0 2 除法指令 DIV AB A 商 B 余数 8 8 该指令是将累加器 A 中的 8 位无符号整数除以寄存器 B 中的 8 位无符号整数 所得 商存放在累加器 A 中 余数存放在寄存器 B 中 进位位 CY 与溢出位 OV 均清 0 若寄存器 B 中除数为 0 则执行除法指令后 结果为不定值 并使溢出标志位 OV 置 1 但在任何情况下 进位标志 CY 总清 0 例 1 设 A 9AH B 23H 执行指令 DIV AB 则 A 04H B 0EH 3 增 1 减 1 指令 9 条 1 增1指令 INC A A A 1 INC direct direct direct 1 INC Ri Ri Ri 1 INC Rn Rn Rn 1 INC DPTR DPTR DPTR 1 INC 指令把所指出的变量加 1 计算结果仍然送回原地址单元 原来的内容若为 0FFH 则加 1 后将变为 00H 运算结果中 只有 INC A 指令影响 P 标志位 对其余标志 位无任何影响 该指令使用 3 种寻址方式 寄存器寻址 直接寻址 寄存器间接寻址 例 1 设 A 40H 41H 29H 则执行下列指令 INC A A 40H 1H INC 41H 41H 29H 1H 结果 A 41H 41H 2AH 2 减1指令 DEC A A A 1 DEC direct direct direct 1 DEC Ri Ri Ri 1 DEC Rn Rn Rn 1 DEC 指令把所指出的变量减 1 计算结果仍然送回原地址单元 原来的内容若为 00H 则减 1 后将变为 0FFH 运算结果中 只有 DEC A 指令影响 P 标志位 对其余标志 9 位无任何影响 该指令使用 3 种寻址方式 寄存器寻址 直接寻址 寄存器间接寻址 例 1 设 R0 4FH 片内 RAM 单元 4FH 40H 4EH 00H 执行指令 DEC R0 4FH 3FH DEC R0 R0 4EH DEC R0 4EH 0FFH 结果 R0 4EH 4EH 0FFH 4FH 3FH 4 二 十进制调整指令 1 条 DA A 该指令的功能是对累加器 A 中的 二 十 进制 BCD 码 加法结果进行调整 要保证参加运算的两数为 BCD 码 在对 BCD 码进行二进制加法运算 ADD 与 ADDC 指令 后 紧跟着一条 DA A 指令即可 例 1 执行下面的指令 MOVA 86H ADDA 47H 结果 A 0CDH CY 0 AC 0 所得结果并不是 BCD 码 若接着执行以下指令 DA A 则结果 A 33H CY 1 AC 1 三 逻辑运算指令 24 条 1 单操作数指令 6 条 1 累加器A清0 指令格式 CLR A 功能 将 00H 送入累加器 A 中 10 10 2 累加器A取反 指令格式 CPL A 功能 将累加器 A 中内容取反 将 A 中内容按位取反 即逻辑非运算 后再送回累加器 A 中 例 1 设 A 98H 执行指令 CLR A A 0 CPL A A 0FFH 结果 A 0FFH 3 累加器A内容循环左移一位 指令格式 RL A 功能 将累加器 A 中的内容循环左移一位 即 A7A0 例 1 设 A 10001000 则执行指令 RL A 后 结果 A 00010001 4 累加器A内容带进位位CY循环左移一位 指令格式 RLC A 功能 将累加器 A 中的内容与进位标志位 CY 一起循环左移一位 即 A7A0CY 例 1 设 A 01010101 CY 1 则执行指令 RLC A 后 结果 A 10101011 CY 0 5 累加器A内容循环右移一位 指令格式 RR A 功能 将累加器 A 中的内容循环右移一位 即 11 A7A0 例 1 设 A 00010001 则执行指令 RR A 后 结果 A 10001000 6 累加器A内容带进位位CY循环右移一位 指令格式 RRC A 功能 将累加器 A 中的内容与进位标志位 CY 一起循环右移一位 即 A7A0CY 例 1 设 A 10101011 CY 0 则执行指令 RRC A 后 结果 A 01010101 CY 1 2 双操作数指令 18 条 1 逻辑与指令 逻辑与的规则定义为 有有 0 出出 0 全 全 1 出出 1 这类指令格式如下 目的操作数 源操作数 ANL A Rn n 0 7 ANL A direct ANL A Ri i 0 1 ANL A data ANL direct A ANL direct data 这组指令的功能是将目的操作数单元中的内容与源操作数单元中的内容按位相 与 后 结果再送回目的操作数单元中 例 1 设 A 0C3H R3 0ADH 执行指令 ANL A R3 结果 A 81H 10000001B 指令执行过程如下 100001110C3H 0ADH11 000 111 0 10 0 01 0 081H B B B 12 12 2 逻辑或指令 逻辑或的规则定义为 有 有 1 出出 1 全 全 0 出出 0 这类指令格式如下 目的操作数 源操作数 ORL A Rn n 0 7 ORL A direct ORL A Ri i 0 1 ORL A data ORL direct A ORL direct data 这组指令的功能是将目的操作数单元中的内容与源操作数单元中的内容按位相 或 后 结果再送回目的操作数单元中 例 1 设 A 0C3H R3 0ADH 执行指令 ORL A R3 结果 A 0EFH 11101111B 指令执行过程如下 100001110C3H 0ADH11 000 111 1 10 1 11 1 10EFH B B B 3 逻辑异或指令 逻辑异或的规则定义为 同出同出 0 异出 异出 1 这类指令格式如下 目的操作数 源操作数 XRL A Rn n 0 7 XRL A direct XRL A Ri i 0 1 XRL A data XRL direct A XRL direct data 这组指令的功能是将目的操作数单元中的内容与源操作数单元中的内容按位相 异或 后 结果再送回目的操作数单元中 例 1 设 A 0C3H R3 0ADH 执行指令 XRL A R3 结果 A 6EH 01101110B 指令执行过程如下 13 100001110C3H 0ADH11 000 111 1 00 1 10 1 16EH B B B 四 位操作类指令 12 条 指令中可被单片机汇编程序识别的位地址有多种方式 1 直接位地址方式 如 D5H 2 字节地址位数方式 如 B8 0 3 位寄存器的定义名称 如 C 等 4 对于位寻址寄存器 可以用字节寄存器名加位数来表示 二者之间用 隔开 如 PSW 3 等 5 用户定义方式 如用伪指令 AA bit PSW 4 定义后允许用 AA 代表 PSW 4 1 位数据传送指令 指令助记符与功能说明如下 目的操作数 源操作数 功能说明 MOV C bit C bit MOV bit C C bit 指令完成的功能是把第二操作数所指出的布尔变量送到由第一操作数指定的位单元 其中的一个操作数必为位累加器 进位标志 C 另一个可以是任何直接寻址位 bit 指令 执行的结果不影响其他寄存器或标志 例 1 要将 20H 位的内容传送给 23H 位 不能直接用 MOV 20H 23H 因为该指 令执行的实际是字节传送 若要将 20H 位的内容传送给 23H 位 可用下述程序实现 MOV C 20H C 20H MOV 23H C 23H C 2 位状态控制指令 1 位清 0 指令 指令格式如下 14 14 CLR C C 0 CLR bit bit 0 以上指令可使直接寻址位 bit 或位累加器 C 清 0 不影响其他标志 例 1 片内 RAM 单元 26H 的内容为 0FFH 执行指令 CLR 32H 结果 26H 0FBH 11111011B 其中 32H 为 26H 单元第二位的位地址 2 位求反指令 指令格式如下 CPL C C C CPL bit bit bit 以上指令把位累加器 C 或者直接寻址位 bit 内容取反 不影响其他标志位 例 1 执行下面的指令序列 MOV P1 2FH P1 2FH 即 00101111B CPL P1 0 P1 0 位求反 CPL P1 2 P1 2 位求反 结果 P1 2AH 00101010B 3 位置 1 指令 指令格式如下 SETB C C 1 SETB bit bit 1 以上指令把进位标志 C 或者任何可直接寻址位 bit 置 1 不影响其他标志位 例 1 假设进位标志 C 内容为 0 输出口 P1 原来的内容为 0FH 00001111B 则执行下 面指令 SETB C SETB P1 7 结果 C 1 P1 8FH 10001111B 3 位逻辑操作指令 位逻辑操作指令只有两条 位与 位或 15 1 位与指令 指令助记符与功能说明如下 目的操作数 源操作数 功能说明 ANL C bit C C bit ANL C bit C C bit 位与指令的功能是将直接寻址位的内容或直接寻址位内容取反后 不改变原来位的内 容 和位累加器 C 的内容相与 结果保存在 C 中 例 1 当位地址 2AH 1 32H 1 同时累加器中 ACC 7 0 时 进位位 C 1 否则 C 清 0 可编程序如下 MOVC 2AH C 2AH ANLC 32H C C 32H ANLC ACC 7 C C ACC 7 2 位或指令 指令助记符与功能说明如下 目的操作数 源操作数 功能说明 ORL C bit C C bit ORL C bit C C bit 位或指令的功能是将直接寻址位的内容或直接寻址位内容取反后 不改变原来位的内 容 和位累加器 C 的内容相或 结果保存在 C 中 例 1 写出位地址 2AH 1 和 32H 1 累加器 ACC 7 0 相或的程序 MOVC 2AH C 2AH ORLC 32H C C 32H ORLC ACC 7 C C ACC 7 结果 C 1 4 位条件转移指令 这类指令可分为判 C 或判直接寻址位状态转移两种 1 判C转移指令 JCrel 若 C 1 则 PC PC 2 rel 若 C 0 则 PC PC 2 JNCrel 若 C 0 则 PC PC rel 若 C 1 则 PC PC 2 16 16 上述两条指令通过判进位位 C 的状态来决定程序的走向 前一条若进位标志为 1 后 一条若进位标志为 0 就可使程序转向目标地址 否则顺序执行下一条指令 目标地址为 第二字节所给的带符号的偏移量与 PC 当前值 PC PC 2 之和 指令的执行不影响任 何标志 图为判 C 转移指令的执行过程 PC PC 2 C 1 N Y PC PC rel PC PC 2 C 0 N Y PC PC rel a JC rel b JNC rel JBbit rel 若 bit 1 则 PC PC 3 rel 若 bit 0 则 PC PC 3 JNBbit rel 若 bit 0 则 PC PC 3 rel 若 bit 1 则 PC PC 3 JBCbit rel 若 bit 1 则 PC PC 3 rel 而且 bit 清 0 若 bit 0 则 PC PC 3 上述指令检测直接寻址位 若位变量为 1 JB JBC 或位变量为 0 JNB 则程序转向 目标地址执行 否则顺序执行下条指令 目标地址为 PC PC 3 rel 在检测位变量时 不影响任何标志 JB JNB 指令不影响原变量值 但 JBC 指令不管原变量为何值 检测 后即行清 0 判直接寻址位转移指令的执行过程如图所示 PC PC 3 bit 1 N Y PC PC rel PC PC 3 bit 0 N Y PC PC rel PC PC 3 bit 1 N Y PC PC rel bit 0 a JB bit rel b JNB bit rel c JBC bit rel 17 五 控制转移类指令 22 条 1 无条件转移指令 1 长转移指令 指令格式 LJMP addr16 PC addr0 15 该指令又称为无条件转移指令 指令提供 16 位转移地址 因此 执行这条指令可以 使程序从当前地址转移到 64K 程序存储器地址空间的任何单元 即 0000H FFFFH 指令 的执行结果是将 16 位目的地址送入程序计数器 PC 该指令为三字节指令 操作码 16 位地址的高 8 位 16 位地址的低 8 位 2 绝对转移指令 指令格式 0 100 10 11 15 PC PC 2 AJMPaddr11 PC addr PC 不变 绝对转移指令也称为 11 位地址的无条件转移指令 与长转移指令的区别在于指令的 操作数给出的是 11 位转移地址 该指令为一双字节指令 指令执行时 首先是 PC 的内 容加 2 然后由当前 PC 的高 5 位和指令中的 11 位偏移地址构成 16 位转移地址 该指令 要求转移的目的地址的高 5 位和该指令执行时当前的 PC 值高 5 位相同 因此寻址范围为 2KB 00000000000B 11111111111B 即可转移的范围为 2KB 区域 转移可以向前也可 以向后 a10a9a8 aa 2170 00001 aaaaaa 3456 其中 00001 为操作码 为目的地址的低 11 位 0 a 10 a 该跳转指令要求目的地址和当前的 PC 值在同一 2KB 区域内 若把 64KB 程序存储器 每 2KB 分为一页 则 64KB 空间共有 32 页 每一页地址范围如下 第 0 页 0000H 07FFH 第 1 页 0800H 0FFFH 18 18 第 2 页 1000H 17FFH 第 30 页 F000H F7FFH 第 31 页 F800H FFFFH 因此 AJMP 要求在同一页内跳转 3 相对短转移指令 指令格式 PC PC 2 SJMPrel PC PC rel 指令控制程序无条件转向指定地址 该地址由指令第二字节的相对地址和程序计数器 PC 的当前值 执行 SJMP 前的 PC 值加 2 相加形成 因而转向地址可以在这条指令首地址 的前 128 字节到后 127 字节之间 即 127 128 负数表示反向转移 正数表示正向转移 如果程序中使用 SJMP 将会造成单指令的无限循环 4 间接转移指令 JMP A DPTR PC A DPTR 该指令把累加器 A 中的 8 位无符号数与作为基址寄存器 DPTR 中的 16 位数据相加 所得的 16 位地址值装入程序计数器 PC 作为转移的目标地址 由于执行 16 位加法 从低 8 位产生的进位将传送到高位去 指令执行后不影响累加器 A 和数据指针 DPTR 中的内容 不影响任何标志位 这是一条多分支选择转移指令 其转移地址不是汇编或编程时确定的 而是在程序运 行时动态决定的 这是与前面三条指令的区别 这样可在 DPTR 中装入多分支转移程序的 首地址 而由累加器 A 中的内容来动态选择其中的某一个分支程序予以转移 这就可用 一条指令代替众多转移指令 实现以 DPTR 内容为起始的 256 个字节范围的选择转移 2 条件转移指令 条件转移指令必须是在满足指令中规定的条件情况下 程序才转移 否则程序顺序执 行 其目标地址在以下一条指令的起始地址为中心的 256 字节范围中 128 127 19 1 累加器A判零转移指令 JZ rel 累加器为 0 转移 否则继续执行 JNZ rel 累加器不为 0 转移 否则继续执行 JZ 表示累加器 A 内容全为 0 则转向指定地址 否则程序顺序执行 JNZ 指令刚好 相反 只须累加器 A 不为 0 就转向指定地址 否则程序顺序执行 上述两条指令均为双字节指令 且指令的执行不改变原累加器 A 的内容 不影响标 志位 指令的执行过程如图所示 例 1 将内部 RAM 单元中起始地址为 20H 的数据传送到 P1 口 当 RAM 单元中内容 为 0 时 不传送 接着传送下一单元内容 PC PC 2 A 0 PC PC rel N Y PC PC 2 A 0 PC PC rel N Y a JZ rel b JNZ rel 程序设计如下 MOV R0 20H 设置数据指针 LOOP MOV A R0 内部 RAM 单元内容送入累加器 A INC R0 指向下一单元 JZ LOOP A 0 则传送下一单元 MOV P1 A P1 A SJMP LOOP 继续执行 2 比较转移指令 指令格式 CJNE rel CJNE 类指令比较前面两个操作数的大小 如果它们的值不相等则转移 相等则继续 执行 这些指令都是三字节指令 PC 当前值 PC PC 3 与指令第三字节带符号的偏移 量相加即得到转移地址 如果目的字节的无符号整数值小于源字节的无符号整数值 则进 位标志位置 1 否则进位标志位清 0 指令不影响任何一个操作数 具体的比较转移类指令有四条 CJNEA data rel CJNEA data rel 20 20 CJNE Ri data rel CJNERn data rel 指令的操作过程如图所示 由图 1 可以看出 CJNE 指令先将源操作数与目的操作数进行比较 然后根据比较的 结果来决定程序的走向 程序的转移范围是以 PC 当前值 PC PC 3 为起始地址的 127 128 字节单元地址 PC PC 3 PC PC rel N Y C 0 C 1 在 MCS 51 中没有专门的数值比较指令 两个数值大小的比较可利用这四条指令来实 现 即按指令执行后 CY 的状态来判断数值的大小 若源操作数 目的操作数 则 CY 0 若源操作数 目的操作数 则 CY 1 例 1 设内部数据存储器的 30H 单元和 31H 单元之中各存放有一个 8 位无符号数 找 出其中较大者送入 40H 单元 这可通过 CJNE 指令和 JC 指令的配合使用 来实现两个数值大小的比较 具体程序 如下 MOVA 30H A 30H CJNEA 31H K1 30H 31H 则转移 MOV40H A SJMPK3 K1 JCK2 30H 31H 则存结果 SJMPK3 K2 MOV40H 31H 存结果 K3 21 3 循环减1转移指

温馨提示

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

评论

0/150

提交评论