notebooks
  • notebooks
  • _planning
    • 2022 OKR
    • basketball
    • swimming
  • communication
    • Dubbo
    • Kafka
    • Messaging
    • RPC
    • Thrift
  • computation
    • map-reduce
  • cs-basic-knowledge
    • computer-architecture
    • data-structure-and-algorithms
    • networks
    • os
  • devops
    • Docker
    • Linux
    • Prometheus
    • operations
    • security
    • trouble-shooting
  • distributed-knowledge
    • Zookeeper_CMD
    • distributed-system
  • game-engine
    • Unity
  • others
    • appium使用
  • protocols
    • http(s)协议
    • 官方链接
    • sip
  • storage
    • Elasticsearch
    • GuavaCache
    • MySQL
    • MySQL_CMD
    • NoSQL
    • Redis
    • Redis_CMD
  • system-design
    • system-design
  • tools
    • Git
    • IDEA
    • Mac
    • VScode
    • Vim
  • _working
    • doc-template
      • backend-design-review
      • correction-of-error
      • service-review
    • process
      • domain-backup
      • oncall
  • blogs
    • history
      • 8088/8086微处理器
      • 8088/8086指令系统
      • CSS-DOM
      • CSS定位
      • CSS工作原理
      • CSS控制背景
      • CSS浮动布局
      • CSS盒模型
      • Chrome开发者工具使用方法
      • DOM
      • Django Model模型层学习
      • Django-REST-framework Serializers学习
      • Django-REST-framework Views和ViewSets学习
      • Django View视图层学习
      • Gvim下Emmet安装及使用教程
      • HTTP协议简介
      • HashMap原理初探
      • JavaScript简史
      • JavaScript语法
      • Java内存模型和GC机制
      • Java基础——Lambda学习
      • Java基础——方法引用
      • Java基础——枚举类型
      • Java类加载机制
      • KMP算法
      • Kafka学习
      • Linux下用命令行编译Java程序
      • MathJax简介和基本用法
      • Python实现常见数据结构
      • Python装饰器总结
      • TCP协议的三次握手和四次挥手
      • Thrift学习
      • asyncio学习
      • markdown的常用语法
      • 修改hosts文件实现翻墙
      • 充实文档的内容
      • 关系数据库
      • 关系数据库标准语言SQL(一)
      • 关系数据库标准语言SQL(二)
      • 关系数据理论
      • 关系查询处理和查询优化
      • 内联元素和块级元素
      • 剑指offer算法题练习
      • 动态创建标记
      • 图形化用户界面
      • 在Eclipse中使用Maven构建Java Web项目
      • 增加微博秀遇到的一些问题
      • 处理机调度
      • 如何用github和hexo搭建个人博客
      • 存储管理
      • 存储系统的层次结构
      • 学习模仿lionhit网站首页的过程总结
      • 实用的GitHub小技巧
      • 并发控制
      • 循环与分支程序设计
      • 指令系统的设计
      • 指令级并行及其开发——硬件方法
      • 搭建自己的VPN服务器
      • 操作系统用户界面
      • 数据库安全性
      • 数据库完整性
      • 数据库恢复技术
      • 数据库绪论
      • 数据库编程
      • 数据库设计
      • 数据抽象
      • 文件系统
      • 文法和语言
      • 最佳实践
      • 案例研究:JavaScript图片库
      • 案例研究:图片库改进版
      • 汇编语言程序格式
      • 汇编语言程序设计基础知识
      • 流水线技术
      • 深度优先搜索和广度优先搜索
      • 牛客网——网易2017秋招编程题集合
      • 用JavaScript实现动画效果
      • 第一篇博客
      • 经典排序算法总结(Java实现)
      • 经典查找算法总结(Java实现)
      • 综合示例
      • 编译原理引论
      • 背包、队列和栈
      • 虚拟机安装Linux系统及常用软件
      • 计算机操作系统绪论
      • 计算机系统结构的基础知识
      • 设备管理
      • 设计模式之代理模式
      • 设计模式之单例模式
      • 设计模式之工厂模式
      • 设计模式之策略模式
      • 设计模式之观察者模式
      • 词法分析
      • 进程管理
      • 闭包
      • 阻止Google自动跳转到香港服务器的方法
      • 项目部署过程
  • programming-language
    • C#
      • C#
    • C&C++
      • C
    • C&C++
      • C++
    • Java
      • GoogleGuice
    • Java
      • JVM
    • Java
      • Java
    • Java
      • Maven
    • Java
      • Mybatis
    • Java
      • Spring知识
    • Java
      • SpringBoot
    • Java
      • Tomcat
    • Python
      • Python
    • Shell
      • Shell
  • wheels
    • dcc
      • 产品调研
      • 方案设计
    • red-envelope
      • 方案设计
    • short-url
      • 短链接服务
    • sso
      • 方案设计
Powered by GitBook
On this page
  • 寻址方式
  • 指令系统
  • 数据传送指令
  • 算术运算指令
  • 逻辑运算和移位指令
  • 控制转移指令
  1. blogs
  2. history

8088/8086指令系统

Previous8088/8086微处理器NextCSS-DOM

Last updated 3 years ago

寻址方式

指令的组成

  • 操作码字段:标明计算机要执行什么操作

  • 操作数字段:指出指令在执行过程中所需要的操作数(值为多少或者放在什么地方),以及操作结果送到哪里

指令的一般格式:操作数字段可以有一个,二个或三个操作数,通常称为“一地址”,“二地址”或“三地址”指令。

指令中如何提供操作数或操作数地址的方式称为寻址方式。(规定如何对地址字段作出解释以找到操作数)

在不同的计算机系统中,寻址方式的名称和分类并不统一,但基本可以归结为以下几种方式或它们的变型或组合:

  • 立即寻址(立即数寻址)

  • 寄存器寻址

  • 直接寻址

  • 间接寻址

  • 变址寻址

8088/8086与操作数有关的寻址方式

  • 立即寻址方式

  • 寄存器寻址方式

  • 直接寻址方式

  • 寄存器间接寻址方式

  • 寄存器相对寻址方式

  • 基址变址寻址方式

  • 基址变址相对寻址方式

寻址方式总结

  1. 三种类型的操作数:立即数(data),寄存器操作数(reg),存储器操作数(mem)。

  2. 段前缀:寻址方式隐含地规定了存储器操作数的段地址。允许数据存放在其它的段(代码段除外),此时应在指令中给出 “段前缀”。

  3. 操作数的类型必须一致

指令系统

8088/8086的指令系统可分为六大类:

  • 数据传送指令

  • 算术运算指令

  • 逻辑运算和移位指令

  • 控制转移指令

  • 串操作指令

  • 处理器控制指令

数据传送指令

所有通用传送指令都不影响标志位。

  1. MOV指令

  • MOV mem/reg1,mem/reg2

  • MOV reg,data

  • MOV ac,mem

  • MOV segreg,mem/reg

  • MOV mem/reg,segreg

  • MOV mem/reg,data

  1. PUSH 和 POP 指令

  • PUSH reg

  • PUSH mem

  • POP reg

  • POP mem

  1. 交换指令

  • XCHG reg,reg

  • XCHG reg,mem

  • XCHG mem,reg

  1. 输入输出指令

  • 直接输入输出指令

    • IN AL,PORT; AL ← (PORT)

    • IN AX,PORT; AX ← (PORT+1,PORT)

    • OUT PORT,AL; (PORT) →AL

    • OUT PORT,AX; (PORT+1,PORT) → AX 注:PORT为输入输出端口号,范围为0~255(00~FFH)

  • 间接输入输出指令

    • IN AL, DX; AL ← (DX)

    • IN AX, DX; AX ← (DX+1,DX)

    • OUT DX,AL; (DX) → AL

    • OUT DX,AX; (DX+1,DX) → AX 在使用间接输入输出指令之前,需将端口号 → DX

  1. 地址传送指令

  • LEA (Load Effective Address)

  • LDS (Load pointer into register and DS)

  • LES (Load pointer into register and ES)

算术运算指令

  1. 二进制加法和减法指令

  • 加法   ADD DST,SRC   DST ←SRC+DST

  • 带进位加法 ADC DST,SRC   DST ←SRC+DST+CF

  • 减法   SUB DST, SRC   DST ←DST﹣SRC

  • 带借位减法 SBB DST,SRC   DST ←ST﹣SRC﹣CF 标志位: 所有状态标志都受到指令执行结果的影响。

  1. 加1 减1和比较指令

  • 加 1 INC OPR   OPR ← OPR+1 INC reg INC mem

  • 减 1 DEC OPR   OPR ← OPR-1 DEC reg DEC mem

  • 标志位: O D I T S Z A P C × - - - × × × × -

  1. 求补指令

  • NEG reg

  • NEG mem 操作: 对操作数按位取反, 末位加1。

  1. 比较指令

  • CMP OPR1, OPR2

  • 操作:OPR1-OPR2

  1. 乘法指令

  • 带符号乘法

    • 格式:IMUL SRC

    • 所执行的操作: 字节操作数: AX ← (AL)* (SRC) 字操作数: DX:AX ← (AX)*(SRC) (乘积带符号,并符合一般代数符号规则)

  • 无符号乘法

    • 格式:MUL SRC

    • 所执行的操作: 同IMUL,但操作数和乘积均不带符号。

  1. 除法指令

  • 带符号除法

    • 格式:IDIV SRC

    • 所执行的操作: SRC为字节数据: AL ← (AX)/(SRC) 之商 AH ← (AX)/(SRC) 之余数 SRC为字数据: AX ← (DX:AX)/(SRC) 之商 DX ← (DX:AX)/(SRC) 之余数 商和余数是带符号的:商的符号符合一般代数符号规则,余数的符号与被除数相同。

  • 无符号除法

    • 格式:DIV SRC

    • 所执行的操作: 与IDIV相同,但操作数,商和余数均是无符号的。

  • 符号扩展指令

    • CBW 操作:将AL中的8位带符号数扩展为16位并送入AX中。 实际上就是将AL的最高位送入AH的所有各位。

    • CWD 操作:将AX中的16位带符号数扩展为32位并送入DX和AX中(其中DX存放高16位,AX存放低16位)。 实际上就是将AX的最高位送入DX的所有各位。

逻辑运算和移位指令

  1. 逻辑运算指令

  • 非 NOT OPR   OPR ← OPR

  • 或 OR DST,DST   DST ← DST ∧ SRC

  • 与 AND DST,SRC   DST ← DST∧SRC

  • 异或 XOR DST,SRC   DST ← DST ∨ SRC

  • 测试 TEST OPR1,OPR2   OPR1∧OPR2 标志: O D I T S Z A P C 0 - - - × × U × 0 (NOT指令除外,对标志位无影响)

  1. 移位指令

  • 逻辑左移 SHL OPR,CNT

  • 算术左移 SAL OPR,CNT

  • 逻辑右移 SHR OPR,CNT

  • 算术右移 SAR OPR,CNT (OPR是除立即数以外的任何一种寻址方式,CNT可以是1或CL) 标志位: O D I T S Z A P C × - - - × × U × × (左移1位时,若最高位发生改变,则OF=1;否则OF =0。)

  • (不带进位)循环左移 ROL OPR, CNT

  • (不带进位)循环右移 ROR OPR, CNT

  • (带进位)循环左移 RCL OPR , CNT

  • (带进位)循环右移 RCR OPR , CNT

控制转移指令

  1. 与转移有关的寻址方式(无条件转移指令)

  • 段内直接转移

  • 段间直接转移

  • 段内间接转移

  • 段间间接转移 区别:对CS和IP进行修改的方法不同

  1. 条件转移指令

  • 寻址方式相同:段内直接短转移

  • 处理流程相同, 判断条件不同

  1. 循环控制指令

  • LOOP OPR

  • 功能: (CX) - 1→ CX 若 (CX) ≠0,则转移至标号OPR处;否则顺序执行

  1. 子程序调用与返回

  • CALL

  • RET

  1. 中断调用与返回

  • INT

  • IRET


《IBM-PC汇编语言程序设计(第2版)》沈美明 温冬婵 著

寄存器间接寻址(MOV AX, [BX])和寄存器相对寻址 (MOV AX, 1100H[BX])

基址变址寻址(MOV AX, [BX][SI])和基址变址相对寻址(MOV AX, 1100H[BX][SI])

8088-8086指令系统1
8088-8086指令系统3
8088-8086指令系统2