指令和数据都用二进制代码存放在内存中,从时空观角度回答CPU如何区分读出的代码是指令还是数据

2023-10-26




指令用来确定“做什么”和“怎样做”,数据是“做”的时候需要原始数。


计算机可以从时间和空间两方面来区分指令和数据,在时间上,取指周期从内存中取出的是指令,而执行周期从内存取出或往内存中写入的是数据,在空间上,从内存中取出指令送控制器,而执行周期从内存从取的数据送运算器、往内存写入的数据也是来自于运算器。

比如:要计算机做1+2=?中,“+”表示要做什么和怎样做,1和2则是做的时候需要的原始数。现在假设某CPU中,“+”用二进制“00000001”来表示,“1、2”分别用“00000001、00000010”来表示。那么,这段程序存入内存中就是这样的:
XXXX1:00000001
XXXX2:00000001
XXXX3:00000010 前面的XXXX1 XXXX2
XXXX3表示内存的地址
  从上面可以看出,“+”指令和被加数是完全相同的,当然,这是我故意这样假设的,但是,在实际情况中,这种情况是大量存在的。在正常情况下,CPU只能把XXXX1内存中的00000001作为指令,XXXX2内存中的00000001作为被加数才能得到正确的结果。那么CPU如何才能做到不把第二个00000001也当成“+”呢?
  1.人们把内存的某个地址规定为起始地址(又称为复位地址),也就是说,当计算机开机或者被强行复位(也就是机箱上那个重启动按钮按下的的时候),CPU立即跳转到这个地址中,并且把它里面的代码作为指令来执行,同时根据这个指令的长度和格式判断下一条指令在什么地方。
  对于X86系列CPU(也就是现在人们常用的什么奔XX、赛XX系列),它的复位地址是FFFF0,如果表示成逻辑地址则是:FFFF:0000。对DEBUG比较熟悉的朋友或者会在一些高级语言中嵌入汇编语言的朋友可以这样做一个试验:
  用DEBUG执行一条指令(这是一条无条件跳转指令):jmp
FFFF:0000,或者在高级语言中嵌入这条汇编指令,执行后,你就会发现,计算机重新启动了。其实,用程序控制计算机重启的最本质的操作就是这样的。
  2.给各种指令规定了相应的长度和格式。比如:某数+某数这条指令就规定:这条指令的长度是3个字节,其中第一个字节表示“+”,后面两个字节表示被加数和加数。于是,当CPU到达这个指令后,就自动把第一个代码作为指令,后面两个代码作为数据,依次类推,第4个代码就必然是指令.....

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

指令和数据都用二进制代码存放在内存中,从时空观角度回答CPU如何区分读出的代码是指令还是数据 的相关文章

  • uc3842改可调电源教程_《学习笔记》--DC/DC电源电路设计实例

    1 设计概述 利用LTC3704实现3 3V 1 5V的转换 最大输出电流1A LTC3704是一款支持正向电源电压转换为负向电源电压的DC DC电源芯片 支持的输入端电源电压范围是2 5V 36V 输出端电源电压可调 2 引脚介绍 VIN
  • 若依前端后端框架 分离切换用户问题解决!学不会得找我!!!

    笔者最近遇到一个问题 就是有主账号一个字段 有多个从账号 基于这个目的用户表登录名是从账号得登录名 而有一个字段为主账号 识别是这个人 若依前后端 看了官网 都是用userName去鉴权 然后生成token和JWT数据 所有userName
  • todolist 案例 JavaScript

    css样式 body margin 0 padding 0 font size 16px background CDCDCD header height 50px background 333 background rgba 47 47 4
  • VUE 巧用$attrs和inheritAttrs提高组件的可扩展性

    VUE 巧用 attrs和inheritAttrs提高组件的可扩展性 前言 在平时创建组件时 一般使用的是利用props传值 然后通过传入的值再赋给标签的方式 来控制组件里的 这种方法在使用时的可扩展性不大 很难通过外部来动态的往组件内部添
  • java学习笔记(第7天:形参和返回值)

    目录 一 形参和返回值都是基本类型 二 类名作为形参和返回值 三 抽象类作为形参和返回值 四 接口作为形参和返回值 一 形参和返回值都是基本类型 这里比较简单 放一个不确定参数数量的例子玩玩 package Demo public clas

随机推荐

  • 关于Unity游戏开发场景切换:Time.timeScale的捣乱

    在制作场景切换功能的时候 我用的是SceneManager LoadScene函数 从主界面场景切换到关卡1场景 从关卡1场景切换到关卡2场景都是没有问题的 但是 当我在点击Pause按钮来到暂停界面 点击Back Menu按钮准备回到主界
  • LR和线性回归的区别与联系

    区别 区别 线性回归 liner regression LR logistics regression 构建方法 最小二乘法 似然函数 解决问题 主要解决回归问题 也可以用来分类 但是鲁棒性差 解决分类问题 输出 输出实数域上连续值 输出值
  • 在#define中使用参数

    在 define中使用参数 在 define中使用参数可以创建外形和作用与函数类似的类函数宏 例如 define SQUARE X X X 在程序中可以这样用 z SQUARE 2 这看上去像函数调用 但它的行为与函数调用完全不同 预处理器
  • 网关Gateway-快速上手

    gateway网关官方文档 https docs spring io spring cloud gateway docs current reference html 网关的概念 网关作为流量的入口 常用的功能包括路由转发 权限校验 限流等
  • 单片机:按键(使用中断)控制数码管的数字加减(c语言实现)

    本实验的目的 使用中断实现通过编号为8和C的按键控制数码管数字的加减 加至15之后再循环到0 减到0之后保持0不变 include
  • Python Django项目URL中包含另外一个urls模块

    在我们的项目中 不可能只有一个app 如果把所有的app的views中的视图都放在urls py中进行映射 肯定会让代码显得非常乱 因此django给我们提供了一个方法 可以在app内部包含自己的url匹配规则 而在项目的urls py中再
  • win11 设置系统环境变量

    由于win11的设置面板大变样 一时之间找不到高级设置进入系统环境变量的设置 面对这个问题可以这样 1 按win键 在搜索中输入 编辑系统环境变量 如图
  • 线程同步与线程安全

    1线程同步 同步 多线程访问临界资源时 必须进行同步控制 多进程或者多线程的执行并不完全是绝对的并行运行 又可能主线程需要等待函数线程的某些条件的发生 多线程的临界资源有全局数据 堆区数据 文件描述符 同步控制方式 1 1信号量 需要用到头
  • git repo工具介绍引入

    一 repo是什么 是什么 Repo是基于git的仓库管理工具 是一个python脚本 干什么 Repo用于同时管理多个git仓库 可以做统一的上传下载等操作 二 repo使用相关语法介绍 2 1 要使用repo首先需要有 manifest
  • iOS 捷径大全

    iOS 捷径大全 一 实用工具 支付助手3 0 新 微博热搜榜 新浪微博 网购历史价格查询3 0 小火箭 新 支付宝红包 新 任天堂红白机小游戏 你不会自己百度么 上朝网易云 早上好 晚安 天气预报 系统自带 捷径2 1 0 报时语音天气
  • JS数组去重之利用set数据结构去重

    在常用的JS去重方法中 都是通过循环遍历来去重 难免麻烦了不少 这边发现ES6中有更加方便的去重方式 记录一下 1 set数据结构 ES6提供了新的数据结构Set 类似于数组 只不过其成员值都是唯一的 没有重复的值 这边就是利用set没有重
  • RF4463F30半双工模组,伪全双工透传方案(STM32平台)(第二章,业务逻辑)

    RF4463F30半双工模组 伪全双工透传方案 STM32平台 第二章 业务逻辑 前言 核心代码编写 宏定义和变量声明 工具函数 功能函数 发送数据函数 时间管理函数 模块工作状态函数 将数据帧提取放入发送区的函数 接收数据函数 解包函数
  • 售前工程师工作内幕揭秘:面试实战技巧

    售前工程师工作内幕揭秘 面试实战技巧 前言 一 售前面试问题 基本就下面这些 二 售前工程师岗位普遍误区 三 售前工程师核心技能 四 面试中 主动出击 才是王道 五 对行业的了解是做好售前的基础 前言 看到网上很多关于售前工程师面试技巧的内
  • react项目搭建--相对较全面

    前言 简单记录一下第一次搭建react项目框架 之前只是在已搭建好的框架内去开发实现项目 没有自己动手搭建过 亲自动手实际操作 还遇到挺多问题的 参考了不少文献 帮助我解决并完成整个项目搭建的文献 都会在文章最后附上链接 感兴趣的可以都看一
  • 网络安全之数据链路层安全协议

    前言 本章将会讲解数据链路层上的安全协议 目录 前言 一 数据链路层安全协议简介 1 数据链路安全性 二 局域网数据链路层协议 1 本地链路局域网 LAN 2 广域网 WAN 3 IEEE802局域网数据链路层协议 1 数据链路层包括逻辑链
  • Python爬虫-17-案例:利用爬虫框架scrapy ,爬取JavaScript动态加载网页,将图片下载至本地

    新建项目 1 在cmd中创建爬虫项目 2 项目结构 由于基础模板设置这里会默认新建一个images py文件 不设置的话这边可以直接写也是可以的 3 设置settings 图片下载地址分析 1 查看萌女最新选项的图片 2 查看请求信息 发现
  • 新建android studio项目错误,提示AppcompatActivity有问题

    直接上图解决办法 希望后来者少走弯路
  • LAMMPS-使用MATLAB计算径向分布函数

    LAMMPS 使用MATLAB计算径向分布函数 在分子动力学模拟中 径向分布函数 Radial Distribution Function 简称RDF 是一种重要的统计工具 用于描述原子或分子之间的空间分布情况 通过计算RDF 我们可以获得
  • 腾讯云TencentOS Server3.1(TK4)系统镜像如何?兼容CentOS

    腾讯云服务器TencentOS Server系统镜像即Tencent Linux 腾讯云研发的Linux操作系统 TencentOS Server免费使用 在CentOS上开发的应用程序可直接在TencentOS Server上运行 Lin
  • 指令和数据都用二进制代码存放在内存中,从时空观角度回答CPU如何区分读出的代码是指令还是数据

    指令用来确定 做什么 和 怎样做 数据是 做 的时候需要原始数 计算机可以从时间和空间两方面来区分指令和数据 在时间上 取指周期从内存中取出的是指令 而执行周期从内存取出或往内存中写入的是数据 在空间上 从内存中取出指令送控制器 而执行周期