8085微处理器指令集分类
INTEL 8085拥有非常丰富的指令集,可以执行各种指令。所有这些指令可以大致分为以下几类:
描述 | 操作码数量 | 指令类型数量 | 示例 |
---|---|---|---|
数据传送指令 | 83 | 13 | MOV,MVI等 |
算术指令 | 62 | 14 | ADD,SUB等 |
逻辑指令 | 43 | 15 | AND,XOR等 |
堆栈指令 | 15 | 9 | PUSH,POP等 |
分支指令 | 36 | 8 | JMP,JZ等 |
I/O指令 | 2 | 2 | IN,OUT等 |
中断指令 | 5 | 5 | RST 0,RST 1等 |
总计 | 246 | 66 |
下表显示了控制指令及其含义的列表。
操作码 | 操作数 | 含义 | 解释 |
---|---|---|---|
NOP | 无 | 无操作 | 不执行任何操作,即只提取和解码指令。 |
HLT | 无 | 暂停并进入等待状态 | CPU完成当前指令的执行并停止进一步执行。需要中断或复位才能退出暂停状态。 |
DI | 无 | 禁用中断 | 中断允许触发器被复位,所有中断都被禁用,除了TRAP中断。 |
EI | 无 | 启用中断 | 中断允许触发器被设置,所有中断都被启用。 |
RIM | 无 | 读取中断屏蔽 | 此指令用于读取中断7.5、6.5、5.5的状态以及读取串行数据输入位。 |
SIM | 无 | 设置中断屏蔽 | 此指令用于实现中断7.5、6.5、5.5和串行数据输出。 |
下表显示了逻辑指令及其含义的列表。
操作码 | 操作数 | 含义 | 解释 |
---|---|---|---|
CMP | R M | 比较寄存器或内存与累加器 | 操作数(寄存器或内存)的内容与累加器的内容进行比较。 |
CPI | 8位数据 | 比较立即数与累加器 | 第二个字节数据与累加器的内容进行比较。 |
ANA | R M | 累加器与寄存器或内存进行逻辑与运算 | 累加器的内容与寄存器或内存的内容进行逻辑与运算,结果存储在累加器中。 |
ANI | 8位数据 | 累加器与立即数进行逻辑与运算 | 累加器的内容与8位数据进行逻辑与运算,结果存储在累加器中。 |
XRA | R M | 累加器与寄存器或内存进行异或运算 | 累加器的内容与寄存器或内存的内容进行异或运算,结果存储在累加器中。 |
XRI | 8位数据 | 累加器与立即数进行异或运算 | 累加器的内容与8位数据进行异或运算,结果存储在累加器中。 |
ORA | R M | 累加器与寄存器或内存进行逻辑或运算 | 累加器的内容与寄存器或内存的内容进行逻辑或运算,结果存储在累加器中。 |
ORI | 8位数据 | 累加器与立即数进行逻辑或运算 | 累加器的内容与8位数据进行逻辑或运算,结果存储在累加器中。 |
RLC | 无 | 累加器左移 | 累加器的每个二进制位左移一位。D7位放入D0位以及进位标志中。CY根据D7位修改。 |
RRC | 无 | 累加器右移 | 累加器的每个二进制位右移一位。D0位放入D7位以及进位标志中。CY根据D0位修改。 |
RAL | 无 | 累加器通过进位左移 | 累加器的每个二进制位通过进位标志左移一位。D7位放入进位标志中,进位标志放入最低有效位D0中。CY根据D7位修改。 |
RAR | 无 | 累加器通过进位右移 | 累加器的每个二进制位通过进位标志右移一位。D0位放入进位标志中,进位标志放入最高有效位D7中。CY根据D0位修改。 |
CMA | 无 | 累加器取反 | 累加器的内容取反。无标志位受影响。 |
CMC | 无 | 进位取反 | 进位标志取反。其他标志位不受影响。 |
STC | 无 | 设置进位 | 设置进位 |
下表显示了分支指令及其含义的列表。
操作码 | 操作数 | 含义 | 解释 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
JMP | 16位地址 | 无条件跳转 | 程序顺序转移到操作数中给出的内存地址。 | ||||||||||||||||||||||||||||
| 16位地址 | 条件跳转 | 根据PSW的指定标志位,程序顺序转移到操作数中给出的内存地址。 | ||||||||||||||||||||||||||||
| 16位地址 | 无条件子程序调用 | 程序顺序转移到操作数中给出的内存地址。转移之前,CALL指令之后下一条指令的地址被压入堆栈。 | ||||||||||||||||||||||||||||
RET | 无 | 无条件子程序返回 | 程序顺序从子程序转移到调用程序。 | ||||||||||||||||||||||||||||
| 无 | 条件子程序返回 | 根据PSW的指定标志位,程序顺序从子程序转移到调用程序,程序执行从新地址开始。 | ||||||||||||||||||||||||||||
PCHL | 无 | 将程序计数器加载为HL寄存器的内容 | H和L寄存器的內容被复制到程序计数器中。H的内容作为高位字节,L的内容作为低位字节。 | ||||||||||||||||||||||||||||
RST | 0-7 | 重启 | RST指令在程序中用作软件指令,用于将程序执行转移到以下八个位置之一。
|
下表显示了算术指令及其含义的列表。
操作码 | 操作数 | 含义 | 解释 |
---|---|---|---|
ADD | R M | 将寄存器或内存加到累加器 | 寄存器或内存的内容加到累加器的內容中,结果存储在累加器中。 示例 - ADD B。 |
ADC | R M | 将寄存器和进位加到累加器 | 寄存器或内存的内容和进位标志加到累加器的內容中,结果存储在累加器中。 示例 - ADC B |
ADI | 8位数据 | 将立即数加到累加器 | 8位数据加到累加器的內容中,结果存储在累加器中。 示例 - ADI 55H |
ACI | 8位数据 | 将立即数和进位加到累加器 | 8位数据和进位标志加到累加器的內容中,结果存储在累加器中。 示例 - ACI 55H |
LXI | 寄存器对,16位数据 | 加载寄存器对立即数 | 该指令将16位数据存储到操作数中指定的寄存器对中。 示例 - LXI H, ABCDH |
DAD | 寄存器对 | 将寄存器对加到H和L寄存器 | 指定寄存器对的16位数据加到HL寄存器的內容中。 示例 - DAD B |
SUB | R M | 从累加器减去寄存器或内存 | 寄存器或内存的内容从累加器的內容中减去,结果存储在累加器中。 示例 - SUB B |
SBB | R M | 从累加器减去源和借位 | 将寄存器或内存 & M 的内容以及借位标志从累加器的內容中减去,结果存储到累加器中。 示例 − SBB B |
SUI | 8位数据 | 从累加器中减去立即数 | 将 8 位数据从累加器的內容中减去,结果存储到累加器中。 示例 − SUI 55H |
SBI | 8位数据 | 从累加器中减去带借位的立即数 | 将 8 位数据从累加器的內容中减去,结果存储到累加器中。 示例 − SBI 55H |
INR | R M | 将寄存器或内存加 1 | 将指定寄存器或内存的内容加 1,并将结果存储在同一位置。 示例 − INR B |
INX | R | 将寄存器对加 1 | 将指定寄存器对的内容加 1,并将结果存储在同一位置。 示例 − INX B |
DCR | R M | 将寄存器或内存减 1 | 将指定寄存器或内存的内容减 1,并将结果存储在同一位置。 示例 − DCR B |
DCX | R | 将寄存器对减 1 | 将指定寄存器对的内容减 1,并将结果存储在同一位置。 示例 − DCX B |
DAA | 无 | 十进制调整累加器 | 将累加器的内容从二进制值转换为两个 4 位 BCD 数字。 如果累加器低 4 位的值大于 9 或辅助进位标志 (AC) 被设置,则指令会向低 4 位添加 6。 如果累加器高 4 位的值大于 9 或进位标志 (CY) 被设置,则指令会向高 4 位添加 6。 示例 − DAA |
下表显示了数据传输指令及其含义的列表。
操作码 | 操作数 | 含义 | 解释 |
---|---|---|---|
MOV | Rd, Sc M, Sc Dt, M | 从源 (Sc) 复制到目标 (Dt) | 此指令将源寄存器的内容复制到目标寄存器,无需任何修改。 示例 − MOV H, L |
MVI | Rd, data M, data | 移动 8 位立即数 | 将 8 位数据存储到目标寄存器或内存中。 示例 − MVI B, 55H |
LDA | 16位地址 | 加载累加器 | 将操作数中指定的 16 位地址指向的内存位置的内容复制到累加器中。 示例 − LDA 2034H |
LDAX | B/D 寄存器对 | 间接加载累加器 | 指定寄存器对的内容指向一个内存位置。此指令将该内存位置的内容复制到累加器中。 示例 − LDAX B |
LXI | 寄存器对,16 位数据 | 加载寄存器对立即数 | 该指令将 16 位数据加载到寄存器或内存中指定的寄存器对中。 示例 − LXI B, 3225H |
LHLD | 16位地址 | 直接加载 H 和 L 寄存器 | 该指令将地址指向的内存位置的内容复制到 L 寄存器,并将下一个内存位置的内容复制到 H 寄存器。 示例 − LHLD 3225H |
STA | 16位地址 | 16位地址 | 将累加器的内容复制到操作数指定的内存位置。 这是一个 3 字节指令,第二个字节指定低位地址,第三个字节指定高位地址。 示例 − STA AB00H |
STAX | 16位地址 | 间接存储累加器 | 将累加器的内容复制到操作数内容指定的内存位置。 示例 − STAX 4050H |
SHLD | 16位地址 | 直接存储 H 和 L 寄存器 | 将 L 寄存器的内容存储到操作数中指定的 16 位地址的内存位置,并将 H 寄存器的内容存储到通过递增操作数指向的下一个内存位置。 这是一个 3 字节指令,第二个字节指定低位地址,第三个字节指定高位地址。 示例 − SHLD 3225H |
XCHG | 无 | 交换 H 和 L 与 D 和 E | 将 H 寄存器的内容与 D 寄存器的内容交换,将 L 寄存器的内容与 E 寄存器的内容交换。 示例 − XCHG |
SPHL | 无 | 将 H 和 L 寄存器复制到堆栈指针 | 该指令将 H 和 L 寄存器的内容加载到堆栈指针寄存器。 H 寄存器的内容提供高位地址,L 寄存器的内容提供低位地址。 示例 − SPHL |
XTHL | 无 | 交换 H 和 L 与堆栈顶部 | 将 L 寄存器的内容与堆栈指针寄存器内容指向的堆栈位置交换。 将 H 寄存器的内容与下一个堆栈位置 (SP+1) 交换。 示例 − XTHL |
PUSH | 寄存器对 | 将寄存器对压入堆栈 | 将操作数中指定的寄存器对的内容按以下顺序复制到堆栈中。 堆栈指针寄存器递减,并将高位寄存器 (B, D, H, A) 的内容复制到该位置。 堆栈指针寄存器再次递减,并将低位寄存器 (C, E, L, 标志) 的内容复制到该位置。 示例 − PUSH B |
POP | 寄存器对 | 从堆栈弹出到寄存器对 | 将堆栈指针寄存器指向的内存位置的内容复制到操作数的低位寄存器 (C, E, L, 状态标志)。 堆栈指针加 1,并将该内存位置的内容复制到操作数的高位寄存器 (B, D, H, A)。 堆栈指针寄存器再次加 1。 示例 − POP B |
OUT | 8 位端口地址 | 将数据从累加器输出到具有 8 位地址的端口 | 将累加器的内容复制到操作数指定的 I/O 端口。 示例 − OUT 01H |
IN | 8 位端口地址 | 从具有 8 位地址的端口输入数据到累加器 | 读取操作数中指定的输入端口的内容并将其加载到累加器中。 示例 − IN 04H |
广告