如何处理地址不对齐指令?

2023-11-09

连续不断是处理器取指的另一个目标。如果处理器在每一个时钟周期都能取一条指令,就可以源源不断的为处理器提供后续指令流,而不会出现空闲的时钟周期。

地址不对齐导致问题:

不管是从指令缓存,还是从ITCM中取指令,若处理器遇到了一条地址不对齐的指令,则会给连续不断取指造成困难,因为ITCM和指令缓存的存储单元往往使用SRAM,而SRAM的读端口往往具有固定宽度。以位宽为32位的SRAM为例,它在一个时钟周期只能读出一个(地址与32位对齐)32位的数据。假设一条32位长的指令处于地址不对齐的位置,则意味着需要分两个时钟周期读出两个32位的数据,然后各取其一部分并拼接成真正需要的32位指令,这样就需要花费至少两个时钟周期才能取出一条指令。

如何才能使处理器将地址不对齐的指令在一个时钟周期内取出?

1. 普通指令的地址不对齐

 对于普通指令按顺序取指(地址连续增长)的情形,使用剩余缓冲区(leftover buffer)保存上次取指后没用完的位,供下次使用。假设从ITCM中取出一个32位的指令字,但是只用了它的低16位,这种情况出现可能是以下两种原因造成。

(1)只需要使用此处取出的32位中的低16位和上一次取出的高16位来组成一条32位指令;

(2)这条指令的长度本身就是16位,因此只需要取出低16位。

此次没有使用到的高16位则可以暂存于剩余缓冲区,待下一个时钟周期取出下一个32位指令字后,拼接出新的32位指令字。

2. 分支跳转指令的地址不对齐(取指令不连续&#

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理地址不对齐指令? 的相关文章

随机推荐

  • 【SSM框架】之Spring

    SSM框架笔记 自用 Spring Spring Framework系统架构 Spring程序开发步骤 核心概念 IoC Inversion of Control 控制反转 使用对象时 由主动new产生对象转换为由外部提供对象 此过程中对象
  • 计算机毕业设计看这篇就够了(二)毕设流程

    本篇将为大家介绍计算机专业毕业设计流程 提前了解毕设流程可以让同学们从宏观角度去看毕设要做些什么样的事情 大概知道每个阶段要去做哪些工作 为后续毕设任务的真正开展打下心理预期 也不至于一脸懵 计算机毕设分为以下主流程 选题 确定导师 完成前
  • 【Proteus仿真】【STM32单片机】基于stm32的智能书桌设计

    文章目录 一 功能简介 二 软件设计 三 实验现象 联系作者 一 功能简介 系统运行后 默认为手动模式 当检测有人 可通过K2键开关灯 如果姿势不对 警示灯亮 否则灭 可通过K3和K4键调节桌子高度 按下K1键切换为自动模式 此时有人 且光
  • Sentinel原理与Demo

    Sentinel 是什么 随着微服务的流行 服务和服务之间的稳定性变得越来越重要 Sentinel 以流量为切入点 从流量控制 熔断降级 系统负载保护等多个维度保护服务的稳定性 Sentinel 具有以下特征 丰富的应用场景 Sentine
  • 【FreeRTOS(三)】任务状态

    文章目录 任务状态 任务挂起 vTaskSuspend 取消任务挂起 vTaskResume 挂起任务调度器 vTaskSuspendAll 取消挂起任务调度器 xTaskResumeAll 代码示例 任务挂起 取消任务挂起 代码示例 挂起
  • Docker help帮助文档

    1 查看 docker help 帮助 docker help 2 用法 docker 选项 命令 3 选项 客户端配置文件的配置字符串位置 默认为 root docker D 启用调试模式 H 要连接的主机列表守护进程套接字 l 设置日志
  • Centos7.3安装和配置Mysql5.7

    第一步 获取mysql YUM源 进入mysql官网获取RPM包下载地址 https dev mysql com downloads repo yum 点击 下载 右击 复制链接地址 https dev mysql com get mysq
  • 源码剖析transformer、self-attention

    原文链接 首先给大家引入一个github博客 这份代码是我在看了4份transformer的源码后选出来的 这位作者的写法非常易懂 代码质量比较高 GitHub Separius BERT keras Keras implementatio
  • 一步一步教你用idea上交代码到gitee(图文解释)

    一步一步教你用idea上交代码到gitee 图文解释 文章目录 一步一步教你用idea上交代码到gitee 图文解释 工具准备 具体操作 结语 工具准备 首先 我们进行代码的提交需要两个工具包 在我的上一篇中有讲 大家可以自行去提取 2条消
  • .net 批量注册服务

    假设我们需要注册xxxQuery服务 例如下图中的BarQuery和FooQuery 传统的做法是 services TryAddScoped
  • vscode 运行和调试 javascript 代码

    安装node 安装vscode 扩展包 code runer 配置vs code下有关F5的操作的文件 参考地址
  • 【Zabbix实战之运维篇】Zabbix监控Docker容器配置方法

    Zabbix实战之运维篇 Zabbix监控Docker容器配置方法 一 检查Zabbix监控平台状态 1 检查Zabbix各组件容器状态 2 奸诈Zabbix server状态 二 下载监控模板 1 进入Zabbix官网下载页面 2 查看下
  • 微信小程序中识别html标签的方法

    rich text组件 在微信小程序中有一个组件rich text可以识别文本节点或是元素节点 具体入下 需要识别的数据放在data中 然后放在nodes属性中即可
  • 编写程序:5类员工有对应封装类,创建Employee数组,若干不同的Employee对象,并实现增删改查功能(《黑马程序员》P144编程题加强版)

    文章目录 Employee类 SalariedEmployee类 HourlyEmployee类 SalesEmployee类 BasePlusSalesEmployee类 Test类 实现增删改查 原题 1 Employee 这是所有员工
  • 【python】深入了解Selenium-PageObject

    1 PageObject 定义 Page Object 简称PO 模式 是Selenium实战中最为流行 并且是自动化测试中最为熟悉和推崇的一种设计模式 在设计自动化测试时 把页面元素和元素的操作方法按照页面抽象出来 分离成一定的对象 然后
  • Sophus使用记录

    sophus库是一个基于Eigen的C 李群李代数库 可以用来方便地进行李群李代数的运算 头文件 主要用到以下两个头文件 include
  • 基于水文规约SL651-2014的“定时报”解析

    一 概述 水文监测数据通信规约SL651 2014规定了水文监测系统中前端传感器与遥测终端以及中心站之间的数据通信协议 本文将以M21F系列RTU为例 详细描述符合SL651 2014数据通信规约标准的遥测站终端与中心站之间的 定时报 报文
  • Go开源库Excelize介绍,电子Excel表格操作强大的库

    Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库 基于 ECMA 376 ISO IEC 29500 国际标准 项目作者是续 日 现任阿里巴巴软件工程师 曾就职百度 奇虎360公司 前百度Go语言编程委员
  • 循环监测b站用户粉丝数、舰长数及增量 程序

    前言 开发语言 python 3 8 功能介绍 循环监测b站用户粉丝数 舰长数及增量 实时打印 并存入数据库中 使用说明 运行 双击运行 bat 输入用户UID 回车 再输入循环周期 回车 即可开始监测 ps 数据存储是sqlite 可以使
  • 如何处理地址不对齐指令?

    连续不断是处理器取指的另一个目标 如果处理器在每一个时钟周期都能取一条指令 就可以源源不断的为处理器提供后续指令流 而不会出现空闲的时钟周期 地址不对齐导致问题 不管是从指令缓存 还是从ITCM中取指令 若处理器遇到了一条地址不对齐的指令