8086微处理器中的指令
好的,8086 微处理器拥有丰富的指令集,用于执行各种操作。以下是用中文分类介绍的主要指令类型和一些关键指令示例:
1. 数据传送指令 (Data Transfer Instructions)
- 功能: 在寄存器、内存和 I/O 端口之间移动数据。
- 关键指令:
MOV dest, src:移动。将源操作数 (src) 的值复制到目标操作数 (dest)。例如:MOV AX, BX(将 BX 值复制到 AX),MOV [SI], AL(将 AL 值复制到 SI 指向的内存地址)。PUSH src:压栈。将源操作数(通常是寄存器或内存字)推入堆栈。栈顶指针 (SP) 减小。POP dest:出栈。将栈顶的字弹出到目标操作数(通常是寄存器或内存)。栈顶指针 (SP) 增大。XCHG op1, op2:交换。交换两个操作数(寄存器或寄存器与内存)的值。IN acc, port:输入。从指定的 I/O 端口 (port) 读取一个字节或字到累加器 (AL或AX)。OUT port, acc:输出。将累加器 (AL或AX) 中的字节或字写入指定的 I/O 端口 (port)。LEA reg, mem:加载有效地址。将内存操作数 (mem) 的偏移地址(不是其内容!)加载到目标寄存器 (reg)。LDS reg, mem:加载数据段指针。从内存 (mem) 读取一个字(偏移地址)到目标寄存器 (reg),再读取下一个字到 DS 寄存器。LES reg, mem:加载附加段指针。从内存 (mem) 读取一个字(偏移地址)到目标寄存器 (reg),再读取下一个字到 ES 寄存器。XLAT:查表转换。使用 AL 作为索引,查找 DS:[BX+AL] 处的字节,并用该字节替换 AL 的值。常用于代码转换。
2. 算术运算指令 (Arithmetic Instructions)
- 功能: 执行加、减、乘、除、比较等算术运算。
- 关键指令:
ADD dest, src:加法。dest = dest + src,结果影响标志位 (CF, OF, SF, ZF, AF, PF)。ADC dest, src:带进位加法。dest = dest + src + CF(考虑前一条指令产生的进位),结果影响标志位。SUB dest, src:减法。dest = dest - src,结果影响标志位。SBB dest, src:带借位减法。dest = dest - src - CF(考虑前一条指令产生的借位),结果影响标志位。INC op:增量。op = op + 1,影响标志位 (除 CF 外)。DEC op:减量。op = op - 1,影响标志位 (除 CF 外)。NEG op:取负。op = 0 - op(求补),影响标志位。CMP dest, src:比较。执行dest - src但不保存结果,仅根据结果设置标志位 (CF, OF, SF, ZF, AF, PF)。用于条件跳转。MUL src:无符号乘法。将AL(8位) 或AX(16位) 与源操作数 (src) 相乘。8位结果在 AX;16位结果高字在 DX,低字在 AX。IMUL src:有符号乘法。将AL(8位) 或AX(16位) 与源操作数 (src) 相乘。结果存放同 MUL。DIV src:无符号除法。用AX(16位/8位) 或DX:AX(32位/16位) 除以源操作数 (src)。8位除商在 AL,余数在 AH;16位除商在 AX,余数在 DX。IDIV src:有符号除法。操作同 DIV,但操作数为有符号数。CBW:字节转字。将 AL 中的有符号字节符号扩展到 AH,形成 AX 中的有符号字。CWD:字转双字。将 AX 中的有符号字符号扩展到 DX,形成 DX:AX 中的有符号双字。AAA/AAS/AAM/AAD:BCD 码调整指令。用于对压缩或非压缩 BCD 码的加法 (AAA)、减法 (AAS)、乘法 (AAM)、除法 (AAD) 结果进行十进制调整。
3. 逻辑运算指令 (Logical Instructions)
- 功能: 执行位级别的逻辑运算和位移/循环移位操作。
- 关键指令:
AND dest, src:逻辑与。dest = dest AND src,按位操作,结果影响标志位 (CF=0, OF=0, SF, ZF, PF)。OR dest, src:逻辑或。dest = dest OR src,按位操作,结果影响标志位。(CF=0, OF=0, SF, ZF, PF)。XOR dest, src:逻辑异或。dest = dest XOR src,按位操作,结果影响标志位 (CF=0, OF=0, SF, ZF, PF)。常用于清零寄存器 (XOR AX, AX)。NOT op:逻辑非。op = NOT op,按位取反,不影响标志位。TEST dest, src:测试。执行dest AND src但不保存结果,仅根据结果设置标志位 (CF=0, OF=0, SF, ZF, PF)。常用于位测试和条件跳转。- 位移指令 (Shift Instructions):
SHL dest, count/SAL dest, count:逻辑左移 / 算术左移。将目标操作数 (dest) 左移count次(CL 或 1)。最低位补 0,最高位移入 CF。SAL 与 SHL 在 8086 上功能相同。影响标志位 (CF, OF, SF, ZF, PF)。SHR dest, count:逻辑右移。将目标操作数 (dest) 右移count次。最高位补 0,最低位移入 CF。影响标志位 (CF, OF, SF, ZF, PF)。SAR dest, count:算术右移。将目标操作数 (dest) 右移count次。最高位(符号位)保持不变并复制,最低位移入 CF。用于有符号数除法。影响标志位 (CF, OF, SF, ZF, PF)。
- 循环移位指令 (Rotate Instructions):
ROL dest, count:循环左移。将目标操作数 (dest) 左移count次。最高位移入最低位,同时移入 CF。影响标志位 (CF, OF)。ROR dest, count:循环右移。将目标操作数 (dest) 右移count次。最低位移入最高位,同时移入 CF。影响标志位 (CF, OF)。RCL dest, count:带进位循环左移。将目标操作数 (dest) 和 CF 一起左移count次。CF 移入最低位,最高位移入 CF。影响标志位 (CF, OF)。RCR dest, count:带进位循环右移。将目标操作数 (dest) 和 CF 一起右移count次。CF 移入最高位,最低位移入 CF。影响标志位 (CF, OF)。
4. 串操作指令 (String Instructions)
- 功能: 高效处理内存中的数据串(字节串或字串)。配合源索引 (SI)、目的索引 (DI)、方向标志 (DF) 和重复前缀使用。
- 隐含操作:
- 源串地址:
DS:SI - 目的串地址:
ES:DI - 每次操作后自动修改 SI/DI:若 DF=0 (CLD 指令设置) 则递增 (字节+1, 字+2);若 DF=1 (STD 指令设置) 则递减。
- 可通过加重复前缀 (
REP,REPE/REPZ,REPNE/REPNZ) 自动重复执行,重复次数由 CX 寄存器指定。
- 源串地址:
- 关键指令:
MOVSB/MOVSW:串传送。将 DS:[SI] 处的一个字节/字传送到 ES:[DI],然后按 DF 修改 SI 和 DI。CMPSB/CMPSW:串比较。比较 DS:[SI] 和 ES:[DI] 处的一个字节/字(相当于CMP [SI], [DI]),仅设置标志位,然后按 DF 修改 SI 和 DI。常与REPE(相等继续) 或REPNE(不相等继续) 前缀连用。SCASB/SCASW:串扫描。将累加器 (AL/AX) 与 ES:[DI] 处的一个字节/字比较(相当于CMP AL/AX, ES:[DI]),仅设置标志位,然后按 DF 修改 DI。常与REPE(相等继续) 或REPNE(不相等继续) 前缀连用,用于在串中搜索特定值。LODSB/LODSW:取串。将 DS:[SI] 处的一个字节/字加载到 AL/AX,然后按 DF 修改 SI。STOSB/STOSW:存串。将 AL/AX 中的值存储到 ES:[DI],然后按 DF 修改 DI。常与REP前缀连用初始化内存块。
- 辅助指令:
CLD:清除方向标志。设置 DF=0,使 SI/DI 在串操作后自动递增。STD:设置方向标志。设置 DF=1,使 SI/DI 在串操作后自动递减。
5. 控制转移指令 (Control Transfer Instructions)
- 功能: 改变程序执行的顺序(跳转)。
- 无条件转移 (Unconditional Transfer):
JMP target:无条件跳转。立即跳转到指定的目标地址 (target)。目标地址可以是段内(近 Near,仅偏移地址)或段间(远 Far,段地址:偏移地址)。
- 条件转移 (Conditional Transfer):
Jcc target:条件跳转。根据上一条指令设置的标志位 (cc表示条件,如JE/JZ- 等于/为零跳转,JNE/JNZ- 不等于/不为零跳转,JB/JNAE/JC- 低于/不高于等于/有进位跳转,JA/JNBE- 高于/不低于等于跳转,JL/JNGE- 小于/不大于等于跳转 (有符号),JG/JNLE- 大于/不小于等于跳转 (有符号) 等)。所有条件跳转都是段内短跳转 (-128到+127字节)。
- 循环指令 (Loop Instructions): (隐含使用 CX 作为计数器)
LOOP target:循环。CX = CX - 1;如果CX != 0,则跳转到target(段内短跳转)。LOOPE/LOOPZ target:相等/为零循环。CX = CX - 1;如果CX != 0且ZF=1,则跳转。LOOPNE/LOOPNZ target:不相等/不为零循环。CX = CX - 1;如果CX != 0且ZF=0,则跳转。JCXZ target:CX 为零跳转。如果CX == 0,则跳转到target(段内短跳转)。
- 过程调用与返回 (Procedure Call and Return):
CALL target:调用过程。将下一条指令的地址(返回地址)压入堆栈,然后跳转到指定的过程入口地址 (target)。可以是段内或段间调用。RET [n]:过程返回。从堆栈弹出返回地址,并跳转到该地址继续执行。可选的n表示从堆栈中额外弹出n个字节(通常用于清除调用时压入的参数)。
- 中断指令 (Interrupt Instructions):
INT n:软件中断。调用由中断向量号n(0-255) 指定的中断服务程序。将标志寄存器、CS 和 IP 压栈,清除 TF 和 IF,然后根据中断向量表中的地址跳转。INTO:溢出中断。如果上一条指令导致 OF=1 (溢出),则执行INT 4。IRET:中断返回。从中断服务程序返回。从堆栈弹出 IP、CS 和标志寄存器,恢复被中断的程序。
6. 处理器控制指令 (Processor Control Instructions)
- 功能: 控制 CPU 本身的状态。
- 标志操作 (Flag Operations):
STC:设置进位标志。CF = 1CLC:清除进位标志。CF = 0CMC:进位标志取反。CF = NOT CFSTD:设置方向标志。DF = 1 (串操作地址递减)CLD:清除方向标志。DF = 0 (串操作地址递增)STI:设置中断允许标志。IF = 1 (允许可屏蔽中断)CLI:清除中断允许标志。IF = 0 (禁止可屏蔽中断)
- 其他控制:
NOP:空操作。占用 1 个字节空间和 3 个时钟周期,不进行任何操作。可用于延时或代码对齐。HLT:停机。使 CPU 暂停执行指令,直到接收到外部中断或复位信号。WAIT:等待。使 CPU 进入等待状态,直到 TEST# 引脚有效(低电平)。用于与协处理器 (如 8087) 同步。ESC opcode, src:换码。将指令交给协处理器 (如 8087) 执行。opcode指定协处理器操作码,src提供操作数地址。协处理器通过WAIT和TEST信号与 8086 通信。LOCK:总线锁定前缀。在多处理器系统中,使下一条指令在执行期间锁定系统总线,确保对共享内存的原子访问。
7. 段寄存器操作指令 (Segment Register Instructions)
- 功能: 专门用于加载段寄存器 (CS, DS, ES, SS)。
- 关键指令:
MOV sreg, src:移动。将源操作数 (src,可以是寄存器或内存字) 的值复制到段寄存器 (sreg:DS, ES, SS)。注意:不能直接用 MOV 指令给 CS 赋值!POP sreg:出栈。从堆栈弹出字到段寄存器 (sreg:DS, ES, SS)。同样不能用于 CS。LDS reg, mem/LES reg, mem:如前所述,它们在加载通用寄存器 (reg) 的同时也加载了段寄存器 (DS 或 ES)。这是加载 DS 和 ES 的主要方式之一。- CS 的特殊性: CS 的值通常只能通过远跳转 (
JMP FAR/CALL FAR) 或远返回 (RETF/IRET) 指令间接改变。
重要概念回顾:
- 寄存器: AX, BX, CX, DX (通用), SI, DI (索引), BP (基址), SP (堆栈指针), CS, DS, SS, ES (段), IP (指令指针), FLAGS (标志寄存器)。
- 寻址方式: 指令如何指定操作数的位置(立即数、寄存器、内存:直接、寄存器间接、基址变址、带偏移的基址变址等)。
- 标志寄存器 (FLAGS): 包含状态位 (CF, PF, AF, ZF, SF),和控制位 (TF, IF, DF)。算术和逻辑指令会影响状态位,条件跳转指令依赖这些状态位。
- 段: 内存被划分为逻辑段
简述微处理器的指令集架构
微处理器的指令集架构(Instruction Set Architecture,ISA)是计算机体系结构中的核心组成部分,它定义了计算机能够执行
2024-10-05 14:59:00
嵌入式微处理器与应用
嵌入式微处理器与应用(嵌入式开发环境的构建包括几部分内容)-该文档为嵌入式微处理器与应用讲解文档,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看看………………
资料下载
佚名
2021-07-30 09:59:26
计算机指令架构与微处理器设计原理
MIPS——内部无互锁级微处理器( Microprocessor without interlocked piped stages ),采用RISC 指令集,所有的
2023-06-27 16:56:17
16位和32位微处理器的相关资料推荐
第2章 16位和32位微处理器微处理器的性能指标最主要的是以下两项:1.字长2.主频一、16位微处理器80868086是Intel系列的16位
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- dtmb信号覆盖城市查询
- EDA是什么?有什么作用?
- 中科院研发成功2nm光刻机
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- amoled屏幕和oled区别
- 单片机和嵌入式的区别是什么
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机