指令寻址与PC自增

一、指令寻址方式

定义:寻找下一条将要执行的指令地址的过程。
核心部件:程序计数器(PC),用于指示待执行指令的地址。
执行流程

  1. CPU根据PC值从主存取指令。
  2. 取指后,PC自动自增,指向下一条指令。
  3. 跳转指令会修改PC为目标地址,打破顺序执行。

1. PC自增规则

PC自增取决于主存编址方式指令字长

  • 按字节编址
    • 指令字长=1字节:PC = PC + 1
    • 指令字长=4字节:PC = PC + 4
  • 按字编址(假设字长=4字节):
    • 指令字长=4字节:PC = PC + 1(以字为单位)

  • 关键点:PC自增在取指阶段完成后执行,确保指向下一条指令。

2. 跳转指令

  • 特点:PC不按顺序自增,而是修改为跳转目标地址。
  • 示例:当前PC=100,指令为“跳转到当前地址+3”,PC改为103。
  • 常用寻址:相对寻址,EA = (PC) + A(PC已自增,A为相对位移量)。
    • 8位补码A的寻址范围:(PC) - 128 ~ (PC) + 127
  • 执行流程
    1. 取指:从PC地址读取跳转指令。
    2. PC自增:按指令字长自增。
    3. 计算目标地址(EA):根据寻址方式(如相对寻址)。
    4. 修改PC:PC = EA,下一条指令从EA取指。


二、数据寻址方式

定义:寻找指令中操作数的真实地址(有效地址EA)。
指令格式:|操作码OP|寻址特征|形式地址A|
核心:形式地址A不一定是EA,需通过寻址特征转换。

1. 立即寻址

  • 特点:A为操作数本身(立即数,补码形式)。
  • 优点:无需访存,速度快。
  • 缺点:A位数限制立即数范围。
  • 格式:|OP|立即寻址特征|立即数A|

2. 直接寻址

  • 特点:A即EA(EA=A)。
  • 优点:简单,执行阶段只需访存一次。
  • 缺点:A位数限制寻址范围,修改地址需改A。
  • 格式:|OP|直接寻址特征|A|

3. 隐含寻址

  • 特点:操作数地址隐含在操作码或寄存器(如ACC)中。
  • 优点:缩短指令字长。
  • 缺点:需额外硬件存储隐含地址。
  • 示例:一地址加法指令,ACC作为第二操作数。

4. 间接寻址

  • 特点:A指向操作数地址的地址。
    • 一次间接:A → 主存 → EA → 操作数
    • 二次间接:A → 主存 → 中间地址 → EA → 操作数
  • 优点:扩大寻址范围(EA位数 > A位数)。
  • 缺点:多次访存,效率低。

5. 寄存器寻址

  • 特点:A为寄存器编号,操作数在寄存器中(EA=Ri)。
  • 优点:无需访存,速度快。
  • 缺点:寄存器资源有限且昂贵。
  • 格式:|OP|寄存器寻址特征|Ri|

6. 寄存器间接寻址

  • 特点:寄存器Ri存储操作数的主存地址(EA=(Ri))。
  • 优点:比间接寻址少一次访存。
  • 执行:访问Ri取地址,再访存取操作数。
  • 格式:|OP|寄存器间接寻址特征|Ri|

7. 基址寻址

  • 特点:EA = A + (BR),BR为基址寄存器。
  • 关键
    • BR由OS管理,用户不可修改。
    • 支持多道程序设计和内存保护。
    • 程序可浮动(通过修改BR)。
  • 分类
    • 隐式:专用BR寄存器。
    • 显式:通用寄存器指定。

8. 变址寻址

  • 特点:EA = A + (IX),IX为变址寄存器。
  • 与基址寻址区别
    • IX用户可修改,A固定。
    • BR由OS管理,A用户可修改。
  • 应用:数组处理,A为数组首地址,IX修改访问不同元素。

9. 相对寻址

  • 特点:EA = (PC) + A,PC为下一条指令地址(已自增)。
  • 应用:转移指令,A为相对位移量(补码)。
  • 寻址范围(8位A):(PC) - 128 ~ (PC) + 127
  • 格式:|OP|相对寻址特征|A|


三、总结

  • PC自增:按指令字长和编址方式(PC+1或PC+n)。
  • 跳转指令:修改PC为目标地址,常用相对寻址(EA=(PC)+A)。
  • 寻址方式
    1. 立即:操作数在指令中。
    2. 直接:A为操作数地址。
    3. 隐含:地址隐含在操作码/寄存器。
    4. 间接:A为地址的地址。
    5. 寄存器:操作数在寄存器。
    6. 寄存器间接:寄存器存操作数地址。
    7. 基址:EA=A+(BR),OS管理BR。
    8. 变址:EA=A+(IX),用户改IX。
    9. 相对:EA=(PC)+A,PC已自增。

示例分析

假设:

  • 按字节编址,指令字长=4字节,当前PC=100。
  • 跳转指令(相对寻址),A=3。
  1. 取指:读取PC=100的指令。
  2. PC自增:PC = 100 + 4 = 104。
  3. 计算EA:EA = 104 + 3 = 107。
  4. 修改PC:PC = 107,下一指令从107取。

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

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

相关文章

生成式对抗网络(GAN)模型原理概述

生成对抗网络(Generative Adversarial Network, GAN)是一种通过对抗训练生成数据的深度学习模型,由生成器(Generator)和判别器(Discriminator)两部分组成,其核心思想源于博弈论中的零…

Vue和Element的使用

文章目录1.vue 脚手架创建步骤2.vue项目开发流程3.vue路由4.Element1.vue 脚手架创建步骤 创建一个文件夹 vue双击进入文件夹,在路径上输入cmd输入vue ui, 目的:调出图形化用户界面点击创建 9. 10.在vscode中打开 主要目录介绍 src目录介绍 vue项目启动 图形化界面中没有npm…

如何设置直播间的观看门槛,让直播间安全有效地运行?

文章目录前言一、直播间观看门槛有哪几种形式?二、设置直播间的观看门槛,对直播的好处是什么三、如何一站式实现上述功能?总结前言 打造一个安全、高效、互动良好的直播间并非易事。面对海量涌入的观众,如何有效识别并阻挡潜在的…

【SkyWalking】配置告警规则并通过 Webhook 推送钉钉通知

🧭 本文为 【SkyWalking 系列】第 3 篇 👉 系列导航:点击跳转 【SkyWalking】配置告警规则并通过 Webhook 推送钉钉通知 简介 介绍 SkyWalking 告警机制、告警规则格式以及如何通过 webhook 方式将告警信息发送到钉钉。 引入 服务响应超时…

关于 验证码系统 详解

验证码系统的目的是:阻止自动化脚本访问网页资源,验证访问者是否为真实人类用户。它通过各种测试(图像、行为、计算等)判断请求是否来自机器人。一、验证码系统的整体架构验证码系统通常由 客户端 服务端 风控模型 数据采集 四…

微服务集成snail-job分布式定时任务系统实践

前言 从事开发工作的同学,应该对定时任务的概念并不陌生,就是我们的系统在运行过程中能够自动执行的一些任务、工作流程,无需人工干预。常见的使用场景包括:数据库的定时备份、文件系统的定时上传云端服务、每天早上的业务报表数…

依赖注入的逻辑基于Java语言

对于一个厨师,要做一道菜。传统的做法是:你需要什么食材,就自己去菜市场买什么。这意味着你必须知道去哪个菜市场、怎么挑选食材、怎么讨价还价等等。你不仅要会做菜,还要会买菜,职责变得复杂了。 而依赖注入就像是有一…

skywalking镜像应用springboot的例子

目录 1、skywalking-ui连接skywalking-oap服务失败问题 2、k8s环境 检查skywalking-oap服务状态 3、本地iidea启动服务连接skywalking oap服务 4、基于apache-skywalking-java-agent-9.4.0.tgz构建skywalking-agent镜像 4.1、Dockerfile内容如下 4.2、AbstractBuilder.M…

3. java 堆和 JVM 内存结构

1. JVM介绍和运行流程-CSDN博客 2. 什么是程序计数器-CSDN博客 3. java 堆和 JVM 内存结构-CSDN博客 4. 虚拟机栈-CSDN博客 5. JVM 的方法区-CSDN博客 6. JVM直接内存-CSDN博客 7. JVM类加载器与双亲委派模型-CSDN博客 8. JVM类装载的执行过程-CSDN博客 9. JVM垃圾回收…

UnityShader——SSAO

目录 1.是什么 2.原理 3.各部分解释 2.1.从屏幕空间到视图空间 2.2.以法线半球为基,获取随机向量 2.3.应用偏移,并将其转换为uv坐标 2.4.获取深度 2.5.比较并计算贡献 2.6.最后计算 4.改进 4.1.平滑过渡 4.2.模糊 5.变量和语句解释 5.1._D…

【设计模式】外观模式(门面模式)

外观模式(Facade Pattern)详解一、外观模式简介 外观模式(Facade Pattern) 是一种 结构型设计模式,它为一个复杂的子系统提供一个统一的高层接口,使得子系统更容易使用。 外观模式又称为门面模式&#xff0…

【6.1.1 漫画分库分表】

漫画分库分表 “数据量大了不可怕,可怕的是不知道如何优雅地拆分。” 🎭 人物介绍 架构师老王:资深数据库架构专家,精通各种分库分表方案Java小明:对分库分表充满疑问的开发者ShardingSphere师傅:Apache S…

Tomcat问题:启动脚本startup.bat中文乱码问题解决

一、问题描述 我们第一次下载或者打开Tomcat时可能在控制台会出现中文乱码问题二、解决办法 我的是8.x版本的tomcat用notepad打开:logging.properties 找到:java.util.logging.ConsoleHandler.encoding设置成GBK,重启tomcat即可

Linux中Gitee的使用

一、Gitee简介:Gitee(码云)是中国的一个代码托管和协作开发平台,类似于GitHub或GitLab,主要面向开发者提供代码管理、项目协作及开源生态服务。适用场景个人开发者:托管私有代码或参与开源项目。中小企业&a…

Oracle大表数据清理优化与注意事项详解

一、性能优化策略 1. 批量处理优化批量大小选择: 小批量(1,000-10,000行):减少UNDO生成,但需要更多提交次数中批量(10,000-100,000行):平衡性能与资源消耗大批量(100,000行):适合高配置环境,但需监控资源使…

Anaconda及Conda介绍及使用

文章目录Anaconda简介为什么选择 Anaconda?Anaconda 安装Win 平台macOS 平台Linux 平台Anaconda 界面使用Conda简介Conda下载安装conda 命令环境管理包管理其他常用命令Jupyter Notebook(可选)Anaconda简介 Anaconda 是一个数据科学和机器学…

外包干了一周,技术明显退步

我是一名本科生,自2019年起,我便在南京某软件公司担任功能测试的工作。这份工作虽然稳定,但日复一日的重复性工作让我逐渐陷入了舒适区,失去了前进的动力。两年的时光匆匆流逝,我却在原地踏步,技术没有丝毫…

【QT】多线程相关教程

一、核心概念与 Qt 线程模型 1.线程与进程的区别: 线程是程序执行的最小单元,进程是资源分配的最小单元,线程共享进程的内存空间(堆,全局变量等),而进程拥有独立的内存空间。Qt线程只要关注同一进程内的并发。 2.为什么使用多线程…

VS 版本更新git安全保护问题的解决

问题:我可能移动了一个VS C# 项目,然后,发现里面的git版本检测不能用了 正在打开存储库: X:\Prj_C#\3D fatal: detected dubious ownership in repository at X:/Prj_C#/3DSnapCatch X:/Prj_C#/3D is owned by:S-1-5-32-544 but the current …

Git常用命令一览

Git 是基于 Linux内核开发的版本控制工具。与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持(ps:这得分是用什么样的服务端,使用http协议或者git协议等不太一样。并且在…