8085微处理器指令集分类


INTEL 8085拥有非常丰富的指令集,可以执行各种指令。所有这些指令可以大致分为以下几类:

描述操作码数量指令类型数量示例
数据传送指令8313MOV,MVI等
算术指令6214ADD,SUB等
逻辑指令4315AND,XOR等
堆栈指令159PUSH,POP等
分支指令368JMP,JZ等
I/O指令22IN,OUT等
中断指令55RST 0,RST 1等
总计24666

下表显示了控制指令及其含义的列表。

操作码操作数含义解释
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位地址
无条件跳转
程序顺序转移到操作数中给出的内存地址。
操作码描述标志状态
JC进位跳转CY=1
JNC无进位跳转CY=0
JP正数跳转S=0
JM负数跳转S=1
JZ零跳转Z=1
JNZ非零跳转Z=0
JPE偶校验跳转P=1
JPO奇校验跳转P=0
16位地址
条件跳转
根据PSW的指定标志位,程序顺序转移到操作数中给出的内存地址。
操作码描述标志状态
CC进位调用CY=1
CNC无进位调用CY=0
CP正数调用S=0
CM负数调用S=1
CZ零调用Z=1
CNZ非零调用Z=0
CPE偶校验调用P=1
CPO奇校验调用P=0
16位地址
无条件子程序调用
程序顺序转移到操作数中给出的内存地址。转移之前,CALL指令之后下一条指令的地址被压入堆栈。
RET

无条件子程序返回
程序顺序从子程序转移到调用程序。
操作码描述标志状态
RC进位返回CY=1
RNC无进位返回CY=0
RP正数返回S=0
RM负数返回S=1
RZ零返回Z=1
RNZ非零返回Z=0
RPE偶校验返回P=1
RPO奇校验返回P=0

条件子程序返回
根据PSW的指定标志位,程序顺序从子程序转移到调用程序,程序执行从新地址开始。
PCHL

将程序计数器加载为HL寄存器的内容
H和L寄存器的內容被复制到程序计数器中。H的内容作为高位字节,L的内容作为低位字节。
RST
0-7重启RST指令在程序中用作软件指令,用于将程序执行转移到以下八个位置之一。
指令重启地址
RST 00000H
RST 10008H
RST 20010H
RST 30018H
RST 40020H
RST 50028H
RST 60030H
RST 70038H
8085另外还有4个中断,可以在内部生成RST指令,不需要任何外部硬件。以下是这些指令及其重启地址

中断重启地址
TRAP0024H
RST 5.5002CH
RST 6.50034H
RST 7.5003CH

下表显示了算术指令及其含义的列表。

操作码操作数含义解释
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

更新于:2019年7月30日

17K+ 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告