乐趣区

关于单片机:单片机原理及应用-指令系统

单片机原理及利用 – 指令系统

指令概述

指令 即依照人们用意实现某种操作的命令,采纳 英文名称 或者 缩写模式 作为 助记符

依照所占字节分为:

  1. 单字节指令 49 条,操作码和操作数同在一个字节中。
  2. 双字节指令 45 条,1 字节为操作码,另 1 字节是操作数
  3. 三字节指令 17 条,操作码占 1 个字节,操作数占 2 个字节

按执行工夫分为:

  1. 1 个就机器周期(12 个时钟振荡周期)的指令 49 条
  2. 2 个机器周期指令 45 条
  3. 4 个机器周期 – 乘和除指令

按指令性能分为 5 类(112 条):

  1. 数据传送类(28 条)
  2. 算术运算类(24 条)
  3. 逻辑操作类(25 条)
  4. 管制转移类(17 条)
  5. 位操作类(17 条)

指令格局

指令格局即指令的 示意办法 ,通常由 操作码 操作数 两局部组成,指令长度不同,格局也就不同

操作码 :指令进行什么操作
操作数:指令操作的对象,可能是一具体数据,也可能是指出到哪里获得数据的地址或符号

指令系统的寻址形式

寻址形式即指令中阐明 操作数所在地址 的办法,也就是如何在整个存储器和寄存器的寻址空间内疾速地找到指定的地址单元,个别说,寻址形式越多,性能就越强,灵活性则越大,指令系统就越简单

寄存器寻址

指令中操作数为某一寄存器的内容,如:MOV A, Rn; n = 0 ~ 7

寻址范畴:

  1. 4 组通用工作寄存器共 32 个 工作寄存器,只对当前工作区域的 8 个工作寄存器寻址
  2. 局部非凡性能寄存器,如累加器 A,寄存器 B 以及数据指针寄存器 DTPR

间接寻址

指令中间接给出操作数的 单元地址,该单元地址中的内存就是操作数,如:MOV A, direct,把操作数的单元地址 direct 的数据传送到 A 中,指令中两个操作数都可由间接寻址形式给出

间接寻址是拜访片内所有 非凡性能寄存器 外部 RAM(128 个单元) 惟一寻址形式

寄存器间接寻址

寄存器中存的的是 操作数地址 ,先从 寄存器 中找到操作数的地址,再依照地址找到操作数,如:MOV A, @Ri; i = 0 或 1,为了和寄存器寻址形式辨别,在操作数前加 @ 符号

立刻数寻址

间接在指令中给出操作数(立刻数),为了区别间接寻址和立刻数,须要在操作数前加前缀 #,如:MOV A, #80H

基址寄存器加变址寄存器间接寻址

以 DPTR(数据指针寄存器,16 位)或 PC(程序寄存器,8 位)作为 基址寄存器 ,以累加器 A 作为 变址寄存器,两个内容相加造成的 16 位地址作为目标地址进行寻址,如:MOVC A, @A+DPTR,其中 (A)=05H, (DTPR)=0400H 相当于把程序存储器 0405H 单元的内容传送给 A

本寻址形式的三种指令:MOVC A, @A+DPTR, MOVC A, @A+PC, JMP @A+DPTR

绝对寻址

解决程序转移和跳转,该寻址是以该 转移指令的地址(PC 值)加上它的 字节数(下一条指令),再加上 绝对偏移量(rel),造成新的转移目标地址,从而程序转移到该目标地址

转移的目标地址用下式计算:目标地址 = 转移指令所在的地址 + 转移指令字节数 +rel

位寻址

对具备 位(一个二进制数)寻址性能 的某位内容进行 置 1 清 0 操作,位地址个别以间接位地址给出,位地址符号为 bit(0 或 1),如:MOV C, bit,其具体指令:MOV C, 40H 把位地址为 40H 的值送到进位位 C

能够进行位寻址的是外部 RAM 和 SFR

位解决性能,可间接对数据地位 1、清 0、求反、传送、判跳和逻辑运算等操作

指令系统

数据传送类(28 条)

源操作数 传送到 目标操作数(复制),运行后源操作数不变,目标操作数批改为源操作数,格局:MOV < 目标操作数 >, < 源操作数 >

  1. 累加器 为目标:把源操作数内容送累加器 A,源操作数有寄存器寻址、间接寻址、间接寻址和立刻数寻址等形式
  2. 寄存器 Rn 为目标:把源操作数送入以后寄存器区的 R0~R7 中的某一寄存器
  3. 间接地址 direct 为目标:把源操作数送入间接地址指定的存储单元。direct 指的是外部 RAM 或 SFR 地址。
  4. 寄存器间接地址 目标:性能是把源操作数内容送入 R0 或 R1 指定的存储单元中
  5. 16 位数 传送指令:把 16 位立刻数送入 DPTR,用来设置数据存储器的地址指针
  6. 堆栈操作 指令:外部 RAM 中设定一个后进先出的区域叫做 堆栈 ,非凡性能寄存器中有一个 堆栈指针 SP 指向堆栈的栈顶地位,别离为 进栈 出栈 功能设计两个指令:PUSHPOP
  7. 累加器 A 内部数据存储器 RAM/IO 传送指令:拜访内部存储器能力,应用 MOVX 指令,高下位别离放到 R1 和 R0 中
  8. 查表 指令:仅有的两条读 程序存储器中表格数据 的指令,程序存储器只能读,不能写,因而该指令是单向的,两条指令均采纳基址寄存器加变址寄存器间接寻址形式,应用 MOVC
  9. 字节替换 指令:累加器 A 的内容和源操作数的内容相互交换
  10. 字节半替换 指令:累加器低 4 位与外部 RAM 低 4 位替换

算术运算类(24 条)

算数运算的后果将会使 PSW 中的进位(Cy)、辅助进位(AC)、溢出(OV)三种标记位 置 1 清 0,增 1 或减 1 指令不会影响这些标记

加法指令

加法指令一个加数总是来自 累加器 A,另一个加数可有 寄存器寻址 间接寻址 寄存器间接寻址 立刻数寻址 等形式失去,相加的后果总是放到 累加器 A 中,如:ADD A, 加数

A 中运算后果对各个标记位的影响:

  1. 如果 位 7 有进位,则 进位标记位 Cy 置 1,否则 Cy 清 0
  2. 如果 位 3 有进位,则 辅助进位标记 Ac 置 1,否则 Ac 清 0
  3. 如果 位 6 有进位而 位 7 没有进位,或者 位 7 有进位而 位 6 没有进位,则 溢出标记位 OV 置 1,否则 OV 清 0

带进位加法指令

带进位加法指令的特点是进位标记位 Cy 参加运算,因而带进位加法指令是三个数相加,别离是 累加器 A加数 进位标记位,指令格局为:ADDC A, 加数

源操作数 能够为:寄存器寻址、间接寻址、寄存器间接寻址和立刻数寻址

A 中运算后果对各个标记位的影响:

  1. 如果 位 7 有进位,则 进位标记位 Cy 置 1,否则 Cy 清 0
  2. 如果 位 3 有进位,则 辅助进位标记 Ac 置 1,否则 Ac 清 0
  3. 如果 位 6 有进位而 位 7 没有进位,或者 位 7 有进位而 位 6 没有进位,则 溢出标记位 OV 置 1,否则 OV 清 0

带借位的减法指令

带进位减法指令的特点是进位标记位 Cy 参加运算,因而带进位减法指令是三个数相加,别离是 累加器 A加数 进位标记位,指令格局为:SUBB A, 加数

源操作数 能够为:寄存器寻址、间接寻址、寄存器间接寻址和立刻数寻址

A 中运算后果对各个标记位的影响:

  1. 如果 位 7 需借位,则 进位标记位 Cy 置 1,否则 Cy 清 0
  2. 如果 位 3 需借位,则 辅助进位标记 Ac 置 1,否则 Ac 清 0
  3. 如果 位 6 需借位而 位 7 不需借位,或者 位 7 需借位而 位 6 不需借位,则 溢出标记位 OV 置 1,否则 OV 清 0

增 1 指令

增 1 指令会把指令中所指向的变量加 1,但不会扭转 PSW 寄存器中任何标记位,即便溢出也不会扭转标记位,指令格局为:INC DPTR

源操作数 能够为:寄存器寻址、间接寻址、寄存器间接寻址和立刻数寻址

减 1 指令

减 1 指令会把指令中所指向的变量减 1,但不会扭转 PSW 寄存器中任何标记位,即便溢出也不会扭转标记位,指令格局为:DEC DPTR

源操作数 能够为:寄存器寻址、间接寻址、寄存器间接寻址和立刻数寻址

乘法指令

乘法指令把 累加器 A 寄存器 B 中的无符号 8 位整数相乘,其 16 积 高 8 位 放到 寄存器 B 中,低 8 位 放到 累加器 A 中,如果积大于 255 则溢出标记位 OV 置 1,否则清 0,进位标记位 Cy 始终清 0,指令格局为:MUL AB; (A*B->A)

除法指令

乘法指令把 累加器 A 中无符号 8 位整数(被除数)和 寄存器 B 中的 8 位无符号整数(除数)相乘,所得商放到累加器 A 中,余数放到寄存器 B 中,且 Cy 和溢出标记位 OV 清 0,如果 B 为 0,除数不能为 0,则溢出标记位 OV 为 1,指令格局为:DIV AB;A/B->A(商),B(余数)

十进制调增指令

用于对于 BCD 码(用 4 位二进制数来示意 1 位十进制数中的 0~9 这 10 个数码)十进制数加法运算后果的内容进行修改,指令格局为:DA A

逻辑操作类(25 条)

  1. 累加器 A 字节清 0 指令:累加器 A 清 0,不影响 Cy,AC,OV 标记位,指令格局:CLR A
  2. 累加器 A 字节求反指令:将累加器 A 的内容按位逻辑取反,不影响标记位,指令格局:CPL A
  3. 左环移指令:将累加器 A 的 8 位向左循环移位,位 7 移向位 0,指令格局:RL A
  4. 带进位左环移指令:将累加器 A 的内容和进制标记位 Cy 向左移位一位,位 7 移向 Cy,Cy 移向位 0,指令格局:RLC A
  5. 右环移指令:将累加器 A 的 8 位向右循环移位,位 0 移向位 7,指令格局:RR A
  6. 带进位右环移指令:将累加器 A 的内容和进制标记位 Cy 向右移位一位,位 0 移向 Cy,Cy 移向位 7,指令格局:RRC A
  7. 累加器半字节替换指令:将累加器 A 高半字节和低半字节调换,指令格局:SWAP A
  8. 逻辑与指令:将目标操作数和源操作数进行与操作,将后果放到目标操作数中,指令格局:ANL < 目标操作数 >, < 源操作数 >
  9. 逻辑或指令:将目标操作数和源操作数进行或操作,将后果放到目标操作数中,指令格局:ORL < 目标操作数 >, < 源操作数 >
  10. 逻辑异或指令:将目标操作数和源操作数进行异或操作,将后果放到目标操作数中,指令格局:XORL < 目标操作数 >, < 源操作数 >

管制转移类指令(17 条)

  1. 长转移指令:指令的第一和第二字节别离装入 PC 的高位和低位,无条件转向给定地址,指令格局:LJMP addr16
  2. 绝对转移指令:rel 为绝对偏移量,单字节带符号 8 位二进制补码数,能够实现双向转移,执行指令时 PC 加 2,而后把 rel 加到 PC 上,跳转到该地址,指令格局:SJMP rel
  3. 相对转移指令:提供了 11 位地址去替换 PC 的低 11 位指令,造成新的 PC 值,即为转移地址,指令格局:AJMP addr11
  4. 间接跳转指令:转移地址为 A 中 8 位无符号数与 DPTR 的 16 位无符号内容之和,该指令以 DPTR 为 基址 ,A 为 变址,即可实现程序的多分支转移,指令格局:JMP @A+DPTR
  5. 条件转移指令:执行条件转移指令时,如不满足条件则,程序执行下一条指令;如不满足条件,跳转至下一条指令起始地址加上 rel 偏移量,指令格局:累加器为 0 进行跳转 JZ rel; 累加器非 0 进行跳转 JNZ rel;
  6. 比拟不相等转移指令:比拟 目标操作数 源操作数 的值是否雷同,如果不雷同进行跳转下一条指令起始地址加上 rel 偏移量,如果目标数 小于 源操作数,则 Cy 置 1,否则 Cy 置 0,指令格局:CJNE 目标操作数, 源操作数,rel
  7. 减 1 不为 0 转移指令:将操作数减 1,如果不为 0 则转移,次要用于循环管制,指令格局:DNJZ 操作数,rel
  8. 调用子程序指令:长调用指令 :先把 PC 设置为下一条指令地址,而后把 PC 低位和高位寄存到堆栈中,SP + 2,而后把 addr16 装入 PC 中执行子程序,指令格局:LCALL addr16 相对调用指令:PC 设为下一条指令的地址,把 PC 低位和高位寄存到堆栈中,SP + 2,而后把 addr11 寄存到 PC 低 11 位中,指令格局:ACALL addr11
  9. 子程序的返回指令:执行本指令时,从堆栈中退出 PC 的高 8 位和低 8 位字节,把栈指针减 2,从 PC 值处开始持续执行程序,指令格局:RET
  10. 中断返回指令:和 RET 指令类似,不同之处在于该指令革除了在中断响应时被置 1 的 AT89S51 外部中断优先级寄存器的中断优先级状态,指令格局:RET1
  11. 空指令:CPU 不进行任何操作,只耗费一个机器周期的工夫,且只执行 (PC)+1->PC 操作,指令格局:NOP

位操作类指令

AT89S51 外部有一个位处理机,对位地址空间有丰盛的位操作指令

  1. 数据位传送指令:由源操作数指定的位标量送到目标操作数指定的单元,指令格局:MOV C, bit
  2. 位变量批改指令:CLR C Cy 位清 0;CPL C Cy 位求反;SETB C Cy 地位 0;
  3. 位变量逻辑与指令:ANL C, /bit Cy 的值与取反(/)后的 bit 进行与操作
  4. 位变量逻辑或指令:ORL C, bit Cy 的值与 bit 进行异或操作
  5. 条件转移类指令:JC JNC JB JNB JBC
退出移动版