DJ12-1 8086系列指令系统-1

news2025/1/12 22:51:17

指令:能够被计算机识别并执行的二进制代码。

指令系统:所有指令的集合。

指令按功能分类:数据传送类、算术运算类、逻辑运算和移位、串操作、控制转移类、处理器控制。

 

一、8086 指令格式

1. 指令的一般格式

在《计组》里面,我们有对目的地址和目的操作数进行严格区分,但在《微机接口》里面我们统称为目的操作数。

8086 指令的长度在 1~7 字节之间,操作码为 1~2 字节,指令的长度决定于操作数的个数以及所采用的寻址方式。(可见,8086 使用的是 CISC 复杂指令集。)

按操作数数量分类:

  • 零操作数指令
  • 单操作数指令
  • 双操作数指令

 

2. 操作数类型

① 立即数操作数

(关键)立即数是运算数据本身,无地址含义,故无法作目的操作数。由于立即数无法作目的操作数,所以不能用于单操作数指令。

② 寄存器操作数

③ 存储器操作数

存储器操作数的表现形式:[ 内存偏移地址 ]

二、8086 寻址方式

寻址方式:是指获得操作数所在的地址的方法。 

寻址方式分类:

  • 寻找操作数的地址;
  • 寻找要执行的下一条指令的地址,即程序的地址。

后者主要在程序转移或过程调用时用来寻找目标地址或入口地址,这将在调用指令(CALL)或程序转移指令(JMP)中介绍。

 

1. 立即寻址

仅适用于源操作数。

例、MOV  AX,1200H

 

2. 直接寻址

与《计组》中不同,这里只指存储器直接寻址。

指令中直接给出操作数的 偏移地址,默认在 DS 数据段。

允许段重设,即可以通过增加段前缀以实现段超越。比如:ES:[1200H] 。

例、MOV  AX,[1200H] 等价于 MOV  AX,DS:[1200H]

 

3. 寄存器寻址

参加操作的操作数在 CPU 的寄存器中。

例、MOV  AX,BX

 

4. 寄存器间接寻址

特点:

① 寄存器的内容表示操作数的偏移地址。

② 允许的寄存器为 BX、BP、SI、DI,又称为间址寄存器或地址指针

(考点)判断指令的书写正误。

③ 操作数的段地址取决于间址寄存器,允许段重设。

非串操作的情况下:

  • BX、SI、DI:默认为 DS 数据段;
  • BP:默认为 SS 堆栈段。

④ 因为寄存器的内容表示操作数的偏移地址,所以指令中的间址寄存器必须加上方括号。

例、MOV  BX,1200H;MOV  AX,[BX]

 

5. 寄存器相对寻址

① 操作数在内存中的偏移地址由 间址寄存器 的内容加上指令中给出的一个 8 位或 16 位的位移量组成,即 偏移量 = 寄存器内容 + 位移量。

间址寄存器:BX、BP、SI、DI 。

② 操作数所在的段由所使用的间址寄存器决定。

例、指令MOV  AX,Disp[BX]

        假设 DS=6000H,BX=1000H,Disp=08H

        则偏移地址为 BX+Disp=1008H

        操作数物理地址为 61008H

③ 可以使用的寄存器为:BX、BP、SI、DI 。

(记忆)格式可以为:

  • MOV  AX,[BX+Disp]

  • MOV  AX,Disp[BX]

  • MOV  AX,[BX]+Disp

  • MOV  AX,Disp+[BX]

在 CPU 执行指令之前,会需要编译器对指令进行编译。

每一种寻址方式都对应有唯一的编码。

虽然编译器不认识 [BX]+Disp 和 Disp+[BX] 这两种形式,但它会进行语法分析,将其与寄存器相对寻址方式匹配。随后转换为对应的二进制代码,交由 CPU 执行。

 

6. 基址变址寻址

① 操作数的偏移地址 = 一个基址寄存器的内容 + 一个变址寄存器的内容。

② 操作数的段地址由选择的 基址寄存器 决定,允许段重设。

  • 若基址寄存器为 BX,则默认在 DS 数据段;
  • 若基址寄存器为 BP,则默认在 SS 堆栈段。

MOV  AX,[BX][SI] (√)

MOV  AX,[BP][SI] (√)

MOV  AX,[BX]+[SI] (√)

MOV  AX,[BX+SI] (√)

MOV  AX,[BX][BP] (×)

例、MOV  SI,1100H;MOV  BX,SI;MOV AX,[SI+BX]

 

7. 基址-变址-相对寻址

① 操作数的偏移地址 = 基址寄存器的内容 + 变址寄存器的内容 + 位移量。

② 操作数的段地址由选择的 基址寄存器 决定,允许段重设。

(重点)指令中不能同时出现两个基址寄存器或两个变址寄存器。

 

8. 隐含寻址

有些指令的操作码不仅包含了操作的性质,同时还隐含规定了部分操作数。

例、乘法操作(8位 × 8位 → 16位)

这条指令隐含规定了被乘数在 AL 中,同时乘积的结果存放在 AX 中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/24616.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络——第六章笔记(2)

TCP 连接的建立 三次握手建立连接: 1、一方(server)被动地等待一个进来的连接请求 2、另一方(the client)通过发送连接请求,设置一些参数 3、服务器方回发确认应答 4、应答到达请求方,请求方最…

[Spring Cloud] Hystrix三大特性--降级,熔断,隔离

✨✨个人主页:沫洺的主页 📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏 📖MyBatis专栏📖Spring专栏📖SpringMVC专栏📖SpringBoot专…

高级测试工程师必备技术:用Git版本控制自动化测试代码

初识Git版本控制 自动化测试代码反复执行,如果借用持续集成工具会提高测试效率,那么需要我们把自动化测试代码发布到正式环境中,这时候用Git版本控制工具高效、稳定、便捷。 分布式版本控制 Git可以把代码仓库完整地镜像下来,有…

Mybatis整合MP

Mybatis整合MP 案例准备: 创建测试表: -- 创建测试表 CREATE TABLE tb_user (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 主键ID,user_name varchar(20) NOT NULL COMMENT 用户名,password varchar(20) NOT NULL COMMENT 密码,name varchar(30) …

kafka性能指南

kafka性能指南 1.绪论 首先是epoll模型,epoll使其在框架上得以使用mmp和回写高性能。 epoll模型具体可以看linuxIO那一个笔记,这里简单讲一下 首先是epoll模型,模型要求有一组fd由单独线程监控,然后app去干别的事,当…

Arduino开发实例-MAX30100 脉搏血氧仪传感器驱动

MAX30100 脉搏血氧仪传感器驱动 1、MAX30100介绍 MAX30100 脉搏血氧仪和心率传感器是一款基于 I2C 的低功耗即插即用生物识别传感器。 MAX30100 是一款集成脉搏血氧饱和度和心率监测传感器解决方案。 它结合了两个 LED、一个光电探测器、优化的光学器件和低噪声模拟信号处理,…

【蓝桥杯Web】第十四届蓝桥杯(Web 应用开发)模拟赛 2 期 | 精品题解

🧑‍💼 个人简介:一个不甘平庸的平凡人🍬 🖥️ 蓝桥杯专栏:蓝桥杯题解/感悟 🖥️ TS知识总结:十万字TS知识点总结 👉 你的一键三连是我更新的最大动力❤️! &…

降本增效利器?Share Creators智能数字资产管理系统真香!

降本增效似乎是一个持续又永久的话题。尤其在今年, 显得格外的重要~ 疫情不知不觉已经伴随了我们三年,在各行各业都受到了疫情所带来巨大冲击的背景下,降本增效对很多企业来说不再是锦上添花,而可能是一条唯一的出路。 随着市场…

荧光素PEG活性酯,FITC-PEG-NHS,FITC-PEG-SCM,荧光素聚乙二醇琥珀酰亚胺乙酸酯

中文名称:荧光素聚乙二醇琥珀酰亚胺乙酸酯 英文名称:FITC-PEG-NHS,FITC-PEG-SCM 分子量: 1K,2K,3.4K,5K,10K(黄色、橙黄色或者橘黄色固体或者粉末) 端基取代率:≥90% 原料分散系数PDI:≤1.05 纯度:98%…

Vue简单示例——weex跨平台解决方案

简单介绍: Weex的出现主要解决了Web开发的应用频繁发布版本和多端研发两个问题,同时解决了前端语言性能差异和显示效果受限的问题。 什么是weex: Weex是使用流行的Web开发体验来开发高性能原生应用框架。使开发者可以用JS语言和前端开发经…

若依框架解读(微服务版)—— 3.验证码与登录

验证码 查看验证码的请求: 之前已经讲过http://localhost/dev-api/code会在前端重写为http://localhost:8080/code。 请求第一步会进入网关模块 网关相关知识:Gateway基于的WebFlux框架,与我们平时用的WebMVC是不太一样的。网关由Route&#…

PHP的Exception

# 简单解释 Exception是PHP的内置类,用来处理异常的基类 https://www.php.net/manual/zh/class.exception.php php class Exception implements Throwable { /** The error message */ protected $message; /** The error code */ protect…

MVC升级swagger No operations defined in spec!

不要嘲笑农民工种田怎么不香了,要反思为什么别人种田收入高。 以下是农民工即将转行挖野菜之前的种田心得。 1No operations defined in spec! 2Failed to load API definition. Failed to load API definition. 经过多次试验测试&#xff0…

光盘如何重装系统教程

​如果你想用光盘来重装自己的电脑系统,但是不知道怎么操作的话,下面让我们一起来看一下光盘重装系统的步骤吧。 工具/原料: 系统版本:win7 品牌型号:惠普 光盘重装系统: 1.首先我们需要先打开电脑上的光…

VUE 的生命周期

Vue 实例有一个完整的生命周期,也就是从创建之前→创建完成→挂载之前→挂载完成→更新渲染之前→渲染完成→销毁之前→销毁完成等一系列过程,我们称这是 Vue 的生命周期。通俗说就是 Vue 实例从创建到销毁的过程,就是生命周期。每一个组件或…

22.11.20补卡 javaSE多线程学习笔记

自用 并发编程 多个任务同时执行 并发原理: CPU分时间片交替执行, 宏观并行, 微观串行; 由OS调度 进程: OS中并发的一个任务 线程: 在一个进程中,并发的一个顺序执行流程 每当执行新的进程时, 之前的进程都会暂且暂停, 由于cpu的时间片非常短, 人感觉不出来 线程的三个要素: CP…

RemObjects SDK for Delphi

RemObjects SDK for Delphi RemObjects SDK for Delphi是一个高级远程处理框架,它允许您从局域网内或Internet上的客户端远程访问驻留在服务器上的对象。RemObjects SDK for Delphi将允许您构建客户端和服务器应用程序,使用高度优化的Smart Services实现…

Seata AT模式下的源码解析(三)

7. 网络请求 7.1 TransactionManager 事务管理器,在客户端主要用于发起事务请求、提交事务、回滚事务请求等,用于跟 TC 进行通信的类,其中获取当前接口的实现类是通过 TransactionManagerHolder 进行获取,然后通过 SPI 接口获取…

【没用的小知识又增加了--电机】

一些乱七八糟的笔记.. 怎么计算电流环带宽 https://www.csdn.net/tags/MtTaMgysMTgwMTQwLWJsb2cO0O0O.html 理解电机控制系统中的带宽问题 - 知乎 电机控制电路程序带宽和硬件带宽的关系,应该如何设计相关参数? - 知乎 怎么理解Clarke和park变换&am…

[附源码]java毕业设计西柚网购物系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…