计算机组成原理的学习笔记(8)-- 指令系统·其一 指令的组成以及数据寻址方式

学习笔记

前言


本文主要是对于b站尚硅谷的计算机组成原理的学习笔记,仅用于学习交流。

1. 指令

1.1 组成
  • 操作码(Opcode):指指令中执行特定操作的部分。
  • 地址码:指令中用于指定操作数位置的部分。
1.2 扩展操作码
  • 变化长度操作码:采用哈夫曼编码等技术确保操作码不重复。
  • 实现步骤:需求分析、设计、硬件实现、软件支持、验证测试和文档发布。

2. 常见的数据寻址方式

2.1 立即寻址
  • 定义:操作数直接写在指令中,不需要访问内存。
  • 实现:指令的操作数就是数据。
  • 应用场景:常用于赋值操作,例如 MOV AX, 5,将数值 5 加载到寄存器 AX
  • 优点:简单,速度最快。
  • 缺点:数据范围小。

2.2 直接寻址
  • 定义:指令中给出的是一个内存地址,CPU 直接访问该地址的内容。
  • 实现:从内存中直接读取数据。
  • 应用场景:简单的内存访问。
  • 优点:简洁
  • 缺点:不灵活,无法动态计算地址。

2.3 间接寻址
  • 定义:指令中给出的地址是一个指针,指向另一个内存地址,CPU 需要先从该指针中获取目标地址,再访问数据。
  • 实现:首先从给定的地址获取一个指向数据的地址,然后再访问数据。
  • 应用场景:动态数据访问,指针操作等。
  • 优点:灵活,可以访问不同的内存位置,尤其适用于复杂数据结构。
  • 缺点:需要两次内存访问,速度较慢。

2.4 隐含寻址
  • 定义:指令的操作数由指令本身隐含或自动确定,操作数的位置不需要显式提供。CPU 在执行指令时自动操作特定的寄存器或内存位置。

    实现:操作码本身决定了操作数的位置,通常固定与某些寄存器或硬件资源关联。

    应用场景:适用于寄存器操作、堆栈操作、状态寄存器操作等简单且快速的操作。

    优点

    • 无需显式地址,指令格式简洁。
    • 操作快速,无需地址计算或内存访问。

    缺点

    • 灵活性较差,操作数位置固定,无法动态指定或变更。

2.5 寄存器寻址
  • 定义:操作数直接存储在寄存器中,指令通过指定寄存器来访问数据。
  • 实现:指令操作数本身是寄存器的值,无需访问内存。
  • 应用场景:寄存器之间的操作,如 MOV AX, BX,将寄存器 BX 的值复制到 AX
  • 优点:访问速度非常快,因为寄存器访问是最快的。
  • 缺点:数量有限,无法存储大量数据。

2.6 寄存器间接寻址
  • 定义:使用寄存器存储数据的地址,寄存器中存储的是指向数据的内存地址,CPU 通过寄存器访问内存。
  • 实现:寄存器中的值指向目标数据的内存地址,CPU 通过该寄存器来间接访问数据。
  • 应用场景:通过寄存器指向内存地址的操作,如 MOV AX, [BX],将 BX 指向的内存地址中的值加载到 AX 寄存器中。
  • 优点:灵活,寄存器间接寻址支持动态访问内存。
  • 缺点:需要管理寄存器中的地址,速度较直接寻址慢。

2.7 基址寻址
  • 定义:通过基地址寄存器和偏移量计算最终地址。
  • 实现:将基址寄存器和偏移量相加,得到内存地址。
  • 应用场景:数组或结构体的访问。
  • 优点:适合访问连续的数据块,灵活,常用于数组和结构体。
  • 缺点:需要管理基址寄存器和偏移量。

2.8 变址寻址
  • 定义:基址寻址的一种扩展,使用基址寄存器和索引寄存器的组合来计算地址。
  • 实现:基址寄存器 + (索引寄存器 × 步长) + 偏移量。
  • 应用场景:访问数组元素。
  • 优点:支持灵活的内存访问,尤其适用于数组访问。
  • 缺点:需要使用多个寄存器,增加了计算复杂度。

2.9 相对寻址
  • 定义:相对地址是指相对于当前指令的地址(或程序计数器 PC)的偏移量。
  • 实现:通过当前地址(PC)加上偏移量计算最终地址,常用于跳转或分支指令。
  • 应用场景:程序跳转、分支语句、函数调用等。
  • 优点:常用于控制流操作,支持代码独立性和程序重定位。
  • 缺点:只能用于跳转和分支指令,通常不适用于数据访问。

2.10 堆栈寻址
  • 定义:通过栈顶指针(SP)来访问数据。
  • 实现:栈顶元素的地址由栈指针寄存器(SP)决定。
  • 应用场景:函数调用、局部变量管理、返回地址管理等。
  • 优点:支持动态的函数调用和局部数据存取,常用于递归和函数栈。
  • 缺点:操作栈需要使用专门的寄存器和管理机制。

结语

好累,好多没看懂的都得问问AI,寻址什么的…好麻烦。请添加图片描述

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

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

相关文章

汇总贴:cocos creator

1 cocoscreator-doc-TS:目录-CSDN博客 访问节点和组件 常用节点和组件接口 创建和销毁节点 加载和切换场景 获取和设置资源 监听和发射事件 节点系统事件 缓动系统(cc.tween) 使用计时器 使用对象池 使用 TypeScript 脚本 模块化脚本 脚本执行顺序 全局…

RAGFlow 基于深度文档理解构建的开源 RAG引擎 - 安装部署

RAGFlow 基于深度文档理解构建的开源 RAG引擎 - 安装部署 flyfish 1. 确保 vm.max_map_count ≥ 262144 这是指要调整Linux内核参数vm.max_map_count,以确保其值至少为262144。这个参数控制着进程可以映射的最大内存区域数量。对于某些应用程序(如Ela…

2024.2 ACM Explainability for Large Language Models: A Survey

Explainability for Large Language Models: A Survey | ACM Transactions on Intelligent Systems and Technology 问题 可解释性问题:大语言模型(LLMs)内部机制不透明,难以理解其决策过程,如在自然语言处理任务中&…

docker与docker-compose版本对应

1、说明 docker 和 docker-compose 是两个独立但又紧密相关的工具,docker用于管理docker容器,docker-compose用于编排多docker容器应用。了解它们之间的版本对应关系有助于确保在使用 docker-compose 时不会遇到兼容性问题。 2、docker与docker-compos…

【Nginx系列】---Nginx配置tcp转发

参考 Nginx 配置文件: error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid;events {worker_connections 1024; }stream {# 第一个服务转发upstream mysqltest {server 172.16.187.142:9000;}server {listen 9000;proxy_pass mysqltest;}…

Micropython RPI-PICO 随记-DS3231和RTC

开发环境 MCU:Pico1(无wifi版)时钟模块:DS3231使用固件:自编译版本开发环境:MacBook Pro Sonoma 14.5开发工具:Thonny 4.1.6开发语言:MicroPython 1.24.0 知识记录 DS3231是一款高…

SQLSERVER、MYSQL LIKE查询特殊字符和转义字符相同与不同

SQL Server 和 MySQL 都支持 LIKE 操作符进行模式匹配,但它们在处理特殊字符和转义字符方面有一些差异。尽管两者有很多相似之处,但在某些细节上并不完全通用。以下是 SQL Server 和 MySQL 在 LIKE 操作符使用上的比较: 通配符 百分号 %&am…

【动态规划篇】步步带你深入解答成功AC最优包含问题(通俗易懂版)

本篇小鸡汤:待到苦尽甘来时,我给你讲讲来时路。 欢迎拜访:羑悻的小杀马特.-CSDN博客 本篇主题:解答洛谷的最优包含问题 制作日期:2024.12.23 隶属专栏:C/C题海汇总 ​​ 目录 本篇简介: 一动态…

Intent--组件通信

组件通信1 获取子活动的返回值 创建Activity时实现自动注册!【Activity必须要注册才能使用】 默认 LinearLayout 布局,注意 xml 中约束布局的使用; 若需要更改 线性布局 只需要将标签更改为 LinearLayout 即可,记得 设置线性布局…

table 表格转成 excell 导出

OK,功能非常简单,但是很实用啊! 依赖安装 这里我们需要安装两个依赖: xlsx 和 file-saver,就可以帮助我们实现功能了! npm i xlsx file-saver代码参考 导出方法 utils/index.js import * as XLSX from …

python file seek tell

Python面试题解析丨Python实现tail -f功能 文件指针定位之 seek 方法 seek(offset, from) offset :文件指针偏移量(很多博客在这里将offset定义为指针偏移量,但是目前我的看法是这里定义为指针的相对位置) from : 0-文件开头 1-当前位置 2-文…

Vivado 编译(单核性能对比+高性能迷你主机+Ubuntu20.04/22.04安装与区别+20.04使用远程命令)

目录 1. 简介 2. 单核性能对比 2.1 PassMark 2.2 geekbench 2.3 CPU-7 2.4 选择 UM790 pro 3. Ubuntu 22.04 物理机 3.1 安装 Ubuntu 22.04 3.2 安装 Vitis 2022.1 3.3 缺点 4. Ubuntu 20.04 物理机 4.1 安装 Ubuntu 20.04 4.2 实用命令 4.2.1 SSH 保持活跃 4.2…

Java期末复习JDBC|网课笔记+校课总结

目录 1、概念 2、JDBC步骤 JDBC的基本步骤: 1、加载数据库驱动:通常使用Class类的forName()静态方法来加载驱动。 2、通过DriverManager获取数据库连接:需要传入3个参数:数据库URL、登陆数据库的用户名和密码。 3、通过Conn…

Require:离线部署 Sourcegraph

Sourcegraph 使读取、编写和修复代码变得容易——即使在庞大而复杂的代码库中。 代码搜索:搜索所有分支和所有代码主机的所有存储库。代码智能:导航代码、查找引用、查看代码所有者、跟踪历史记录等。修复和重构:一次对许多存储库进行大规模更…

element ui--下拉根据拼音首字母过滤

很多场景下我们的下拉不仅仅要根据选项中的字过滤,还要根据拼音首字母过滤,现在我们来实现下。 要获取汉字拼音,可以用pinyin-pro库来实现 1.导入拼音库 npm install pinyin-pro 下面的代码可以获取companyName的拼音,返回的是…

《QT 5.14.1 搭建 opencv 环境全攻略》

《QT 5.14.1 搭建 opencv 环境全攻略》 一、引言二、准备工作(一)软件下载(二)系统环境确认 三、安装 QT 5.14.1(一)安装包下载与运行(二)环境变量配置 四、OpenCV 安装与配置&#…

python实现根据搜索关键词爬取某宝商品信息

当程序打开淘宝登陆页面后,需要快速手动登录淘宝,如果服务报错,需要重新登录! pip安装库 pip install pyquery pip install selenium pip install openpyxl # 代码说明:代码功能: 基于ChromeDriver爬取tao…

Vue3 中使用axios

1.安装axios、js-cookie、pinia axios命令行: npm install axios js-cookie命令行: npm install js-cookie store命令行: npm install pinia 2.配置文件 (1)缓存文件配置 src/plugins/auth.js const sessionCache {set (key, valu…

从AI换脸到篡改图像,合合信息如何提升视觉内容安全?

本文目录 引言一、AI“真假之战”下的发展现状与考验挑战1.1 视觉内容安全现状与技术分类1.2视觉内容安全企业1.3视觉内容安全领域挑战 二、开山之石:引领视觉内容安全的创新之路2.1合合内容安全系统2.2发起编制相关技术规范2.3参与篡改检测挑战赛 三、视觉内容安全…

IBatis和MyBatis在细节上的不同有哪些

iBatis 和 MyBatis 都是流行的 Java 持久化框架,用于简化数据库交互。MyBatis 是从 iBatis 演化而来,MyBatis 在 iBatis 的基础上做了很多改进和优化,因此两者在设计和功能上存在一些差异。以下是它们在细节上的主要区别: 1. 框架…