8086CPU的寻址方式(7种)

基本概念

  • 立即操作数:操作数包含在指令中
  • 寄存器操作数:操作数包含在CPU的某个内部寄存器中
  • 存储器操作数:约定操作数事先存放在存储器中存放数据的某个单元
  • 基本格式

    MOV xx,yy

            xx:目的操作数字段

            yy:源操作数字段

  • EA(Effect Address):有效地址
  • PA(Physical Address):物理地址

寻址方式

1、立即数寻址

  • 操作数直接存在指令中,紧跟在指令的操作码之后。
  • 主要用来对寄存器赋值,只能用于源操作数字段。

        例如:MOV BX,1234H        ;执行指令后,(BX)=1234H

  • 注意:立即数只能是整数,不能是小数、变量或其他类型的数据。

2、寄存器寻址

  • 操作数就在CPU的内部寄存器中

        例如:MOV DX,AX        ;AX的内容送到DX中

  • 注意:当源和目的操作数都采用寄存器寻址时,一定要注意类型要一致。

立即数寻址和寄存器寻址都没有有效地址(EA)

3、直接寻址

  • 操作数在存储器中,存储单元的有效地址由指令直接指出
  • 操作数本身若无特殊声明使用段超越,则默认存放在内存的数据段(DS段)中

 例如:MOV AX,[1070H]        

         ;若(DS)=2000H,该指令的操作数的物理地址为PA = 2000H + 1070H = 21700H,则执行过程是将物理地址为21700H和21701H两个单元的内容取出送AX。

4、寄存器间接寻址

  • 操作数在存储器中,操作数的有效地址一般在基址寄存器BX、BP或变址寄存器SI、DI中,即EA等于其中某一个寄存器的内容。
  • 如果指令前面没有用超越前缀指明具体的段寄存器,其操作数的段基址可以分为以下两种情况
  1. 操作数在当前数据段(DS给出段基址)
            PA = 16 * (DS) + EA = 16 * (DS) + [ BX | SI | DI ]
  2. 操作数在当前堆栈段(SS给出段基址)
            PA = 16 * (SS) + EA = 16 * (DS) + (BP)

 例如:MOV AX,[BX] ,若(DS) = 2000H,(BX) = 1000H

            ;EA = 1000H PA = 2000H * 16 +1000H = 21000H

5、寄存器相对寻址

  • 操作数在存储器中,并且一般在指定基址寄存器BX、BP或变址寄存器SI、DI的内容进行间接寻址,但是操作数的EA(即偏移量)还要加上指令中指定的8位或16位位移量
  • EA = [ BX | BP | SI | DI ] + { 8位或16位位移量 }

        例如:MOV AL,COUNT[SI] or MOV AL,[COUNT + SI]

        设(DS) = 6000H,(SI) = 1000H,COUNT = 55H(表示位移量的常量符号)

        ;EA = 1000H + 05H = 1005H。

            PA = 6000H * 16 + 1000H + 05H = 61500H.

6、基址变址寻址

8086指令系统允许把基址寄存器和变址寄存器组合起来构成一种新的寻址方式

  • 操作数一定存在存储器中,操作数的EA是由指令指定的一个基址寄存器(BX、BP)加上一个变址寄存器(SI、DI)的内容,即 EA = [ BX | BP ] + [ SI | DI ]
  • 只要用上BP,那么默认段寄存器就是SS;在其他情况,默认段寄存器都为DS。也可以用使用段超越前缀来指定段寄存器。

例如:MOV AX,[BP][SI] ,设(SS) = 2000H,(SI) = 1000H,(BP) = 5000H

        ;EA = 1000H + 5000H = 6000H

            PA = 20000H + 5000H + 1000H = 26000H

7、相对基址变址寻址

  • 操作数的EA是一个基址寄存器内容、一个变址寄存器内容和8位或16位偏移量这三者之和。
    • 与基址变址一样,使用基址寄存器BP时,默认的段寄存器是SS,其他情况默认的段寄存器是DS。
    • EA = [ BX | BP ] + [ SI | DI ] + { 8位或16位位移量 }

例如:设(BX) = 1000H,(SI) = 2000S), (DS)= 3000H,位移量为0020H

        MOV AX,[BX+DI+1020H]

        ;EA = 1000H + 2000H + 1020H = 4020H

            PA = 30000H + 4020H = 34020H

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

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

相关文章

whl is not a supported wheel on this platform.解决办法

1.问题: 安装torch产生 2.解决办法: 使用pip debug --verbose查看 对应的torch版本号 Compatible tags字样,这些就是当前Python版本可以适配的标签。例如,我的Python版本是3.11,可以匹配下面这些文件名:…

Nginx多域名部署多站点

目录 1.修改配置文件nginx.conf 2. 修改hosts文件 1.修改配置文件nginx.conf 在配置文件的 server_name 处修改成自己需要的域名,然后保存退出 j 查看语法是否错误,然后重启nginx nginx -t # 查看语法是否正确 systemctl restart nginx # 重启nginx …

【面试】面向对象编程的三大概念(实例辅助记忆)

【面试】面向对象编程的三大概念(实例辅助记忆) 虑面向对象编程的三大特性,它们是: 封装(Encapsulation): 将对象的状态和行为封装在一起,对外部隐藏对象的内部实现细节。这样可以防…

Power Automate删除SharePoint Online或OneDrive for Business文件版本历史

SharePoint Online和OneDrive for Business支持版本控制,可以保留文件的版本历史,方便用户随时查看和恢复以前的版本。但该功能也会占用大量SharePoint Online或OneDrive for Business存储空间。官方删除版本历史的方法无法批量操作,故今天提…

音效出众设计时尚,内置AI功能,sanag塞那Z50上手

现在蓝牙耳机已经成为人们生活中不可或缺的一部分了,像是在上班、坐车的时候,既可以享受自己的音乐空间,又不会吵到别人,看书、做题还是运动的时候,也可以保证长时间使用耳朵卫生、舒适度。正因为庞大的市场需求&#…

高压继电器,未来几年市场将保持稳定增长

高压继电器是一种用于控制大功率电气设备的开关装置,广泛应用于电力系统、轨道交通、工业自动化等领域。随着各行业对电气控制需求的不断增加,高压继电器市场也在不断扩大。全球高压继电器市场分析: 在全球市场中,目前主要的高压继…

Java8 lambda如何对Map的集合进行分组并求和

Java8 lambda如何对Map的集合按照Key进行分组并将Value求和?由于业务中遇到了这样的场景,想通过简单的方式进行求和统计,于是借助lambda表达式进行实现,下边是示例的代码: import java.util.*; import java.util.stre…

理解 RPC 与 Protobuf:完整指南

一、Protobuf 数据格式简析 Protobuf 是什么? 在数据密集型应用领域,Google 开发的 Protobuf 作为一种高效数据编码方式而广受欢迎。它胜任于 JSON 及 XML 对比,不仅在体积和速度上表现出色,而且其结构化方式优化了网络传输中的…

二叉树的层序遍历,力扣

目录 题目地址: 题目: 我们直接看题解吧: 解题方法: 方法分析: 解题分析: 解题思路: 代码实现: 代码补充说明: 题目地址: 102. 二叉树的层序遍历 - 力扣&…

Java计算 代码的执行时间

目录 1 实现 1 实现 StopWatch stopWatch new StopWatch();stopWatch.start();你的代码stopWatch.stop();stopWatch.getTime() 毫秒

RoadMap7:C++构建代码库(命名空间与头文件)

摘要:在编写一个项目工程时,显然你大可把所有的代码都写在一个main函数里面,但是这对后续的修改和维护、代码功能的理解会造成很大的不便。构建代码库(Structuring Codebase)是围绕着软件工程处理 如何清晰地实现代码组…

使用 if...elif...else 语句判断数字是

以下实例通过使用 if...elif...else 语句判断数字是正数、负数或零: 实例(Python 3.0) # Filename : test.py # author by : www.dida100.com # 用户输入数字 num float(input("输入一个数字: ")) if num > 0: print("正数") eli…

WEB:探索开源OFD.js技术应用

1、简述 OFD.js 是一个由开源社区维护的 JavaScript 库,专注于在浏览器中渲染和处理 OFD 文件。OFD 作为一种开放式的文档格式,被广泛应用于电子政务、电子合同等领域。OFD.js 的出现为开发者提供了一个强大的工具,使得在前端实现 OFD 文件的…

Docker仓库搭建与镜像推送拉取

1.Docker镜像仓库 搭建镜像仓库可以基于Docker官方提供的DockerRegistry来实现。 官网地址:https://hub.docker.com/_/registry 1.1.简化版镜像仓库 Docker官方的Docker Registry是一个基础版本的Docker镜像仓库,具备仓库管理的完整功能,…

【Matlab】基于遗传算法优化BP神经网络 (GA-BP)的数据时序预测(附代码)

资源下载: https://download.csdn.net/download/vvoennvv/88682033 目录 【Matlab】BP 神经网络时序预测算法 【Matlab】CNN卷积神经网络时序预测算法 【Matlab】ELM极限学习机时序预测算法 【Matlab】基于遗传算法优化BP神经网络 (GA-BP)的数据时序预测 【Mat…

【力扣100】【好题】79.单词搜索

添加链接描述 class Solution(object):# 定义上下左右四个行走方向directs [(0, 1), (0, -1), (1, 0), (-1, 0)]def exist(self, board, word):""":type board: List[List[str]]:type word: str:rtype: bool"""m len(board)if m 0:return Fa…

机器学习-实践:海量文件遍历和简单计算器实现

今日我们分享2个机器学习的实践代码海量文件遍历和简单计算器实现。 海量文件遍历 In [40] !tree -L 3 ./data/ ./data/ ├── data19638 │ ├── insects │ │ └── insects │ └── insects.zip └── data55217├── Zebra│ ├── others│ └─…

Docker安装Flarum(开源论坛)

Flarum介绍安装命令 #---------------------------------------------------------- mkdir -p /opt/flarum && cd /opt/flarum #---------------------------------------------------------- docker run -p 8888:8888 --name flarum \ --restartalways \ -v /opt/flar…

2 Windows网络编程

1 基础概念 1.1 socket概念 Socket 的原意是“插座”,在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。Socket本质上是一个抽象层,它是一组用于网络通信的API,包括了一系列…

resetlogs失败故障恢复-ORA-01555---惜分飞

客户数据库resetlogs报错 Tue Dec 19 15:21:23 2023 ALTER DATABASE MOUNT Successful mount of redo thread 1, with mount id 1683789043 Database mounted in Exclusive Mode Lost write protection disabled Completed: ALTER DATABASE MOUNT Tue Dec 19 15:22:01 2023…