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

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

比如:要计算机做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个代码就必然是指令.....

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

  1. 有一页式系统,其页表存放在内存中. (1)如果对内存的一次存取需要1.5微秒,问实现一次页面访问的存取时间是多少? (2)如果系统增加有快表,平均命中率为85%,.....

    题目: 有一页式系统,其页表存放在内存中. (1)如果对内存的一次存取需要1.5微秒,问实现一次页面访问的存取时间是多少? (2)如果系统增加有快表,平均命中率为85%,当页表项在快表中时,其查找时间 ...

  2. oracle中修改多个字段默认值_利用VBA代码在已有的数据表中删除、添加、修改字段...

    大家好,今日继续给大家讲解VBA数据库解决方案的第21讲,如何利用VBA代码在已有的数据表中删除,添加,修改字段.这个内容是操作数据库的一项必修的内容,还望大家在实际工作中多利用,所以这节的知识,对于 ...

  3. 我们仍未知道那天所见的数据是怎么存放在内存中的

    文章目录 前言 一.数据在内存中的存储 1.基础 (1)推导中使用的调试操作 (2)大小端的概念 (3)整形在内存中的存储 2.浮点型在内存中的存储 二.基本数据类型 1.指针中的简单应用 2.整型提 ...

  4. Java数组在内存中是如何存放的

    阅读目录 一维数组 二维数组 数组对象及其引用存放在内存中的哪里? Java中有两种类型的数组: 基本数据类型数组: 对象数组: 当一个对象使用关键字"new"创建时,会在堆上分配 ...

  5. c语言中全局变量内存,C语言——全局变量和局部变量在内存中的区别——及编译后的内存分区【栈-堆-全局存储区-文字常量区-程序代码区】...

    目录: 一:全局变量 二:局部变量 三:C语言经过编译之后将内存分为以下几个区域 (1)栈(stack) (2)堆(heap) (3)全局(静态)存储区 (4)文字常量区 (5)程序代码区 四:区别 ...

  6. Linux内存中的 buffer 和 cache 到底是个什么东东?

    Linux 中的 free 命令,会输出: total 总量 used  已使用 free 空闲 shared 共享内存 buffers cached 前面四项都比较好理解,一看我也就知道啥意思了.但 ...

  7. Linux内存中的 buffer 和 cache

    Linux内存中的 buffer 和 cache 到底是个什么东东? Linux 中的 free 命令,会输出: total 总量 used  已使用 free 空闲 shared 共享内存 buff ...

  8. HTML在计算机中指什么,计算机正在执行的指令存放在什么中

    计算机正在执行的指令存放在内存中. 在计算机中,操作要求和操作数地址都由二进制数码表示,分别称作操作码和地址码,整条指令以二进制编码的形式存放在存储器中.这里存储器,就是内存. 其作用是用于暂时存放C ...

  9. int、unsigned int、float、double 和 char 在内存中存储方式

    2017-12-28 创建人:Ruo_Xiao 实验环境:vs2010.Intel 邮箱:xclsoftware@163.com 2018-01-16 修改人:Ruo_Xiao添加对移位存储的说明. ...

最新文章

  1. 菜鸟学Java(二十一)——如何更好的进行单元测试——JUnit
  2. arm Linux 中断管理机制
  3. 【vue开发】vue导出Excel表格教程demo
  4. 数据增长浪潮下,PCIe 6.0的问与Rambus的答
  5. 打包jar文件后的spring部署及hibernate自动建表经验总结
  6. MySQL回放_mysql回顾
  7. arch linux 进入黑屏,无法从Arch Linux进入Beaglebone Black
  8. 常见的图结构表示(python)
  9. 计算机it dt ct基础知识,ot是什么意思(什么是CT,IT,DT,OT)
  10. 信息论与编码之信源编码详解
  11. html5网页构成要素有哪些,网页界面的构成要素
  12. 文件同步工具CwRsync的使用教程
  13. 【计算机网络】计算机网络的体系结构
  14. 在centos虚拟机中修改IP地址
  15. 内网渗透-内网穿透猕猴桃抓密码提权烂土豆提权
  16. springboot初次使用template可能遇到的问题
  17. 如何在网页中嵌入播放器
  18. Meteor android apk打包两种方式
  19. SNIPER- Efficient Multi-Scale Training
  20. com.alibaba.fastjson.JSONException: can not cast to long, value : 1.5

热门文章

  1. 函数不可访问_关于可重入函数
  2. java调用julia脚本,Julia请求脚本中的用户输入
  3. 半导体芯片原厂涨价及调价声明新增了这些!
  4. 5个IO口实现25个按键的扫描,他做到了!堪称一绝!
  5. java有道云,有道云笔记链接——JAVA面向对象的学习
  6. tabula-java_Java FileSystems.getDefault方法代码示例
  7. java post请求 json_好程序员Java教程分享Vue插件之Axios
  8. 异常错误:在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式
  9. android中解析后台返回的json字符串
  10. c#中引用类型作为值参数和引用参数问题