我和朋友谈论计算机是如何区分指令和数据的经历

有一天,风和日丽,晴空万里,饭后闲来无事,就聊了聊天,聊着聊着就聊到计算机是如何区分指令和数据的问题了。闲聊怎么会聊到这个问题!?可能因为我们虽不是计算机科班出身,但对计算机都有些兴趣。貌似他喜欢主要是PC游戏和一些其他应用,而不是PC本身。好吧,言归正传!

下面,将用M来表示我,用Z标示他。

M:Z哥你知道计算机是如何区分指令和数据的吗?

Z:不知道,没研究过,咋区分?

M:你想想吧。

Z:格式吗?

M:呵呵,你说计算机用什么来存储和处理信息?

Z:二进制0和1,这谁不知道。

M:哦,那000111,你说它是到底是数据还是指令?或者说有没有一个0、1序列即表示指令又表示数据,你再想想吧。

   (Z哥沉思了一阵子)

Z:分开存,把指令存到一个地方,把数据存到另一地方。

M:哦,你是想说假设你电脑内存4G,然后2G专门存指令,另外2G专门存数据吗?

Z:恩,没错。

M:那指令2G不够怎么办,数据又用不上2G,你怎么办?

Z:动态调整。

M:你厉害,想法挺接近了,不过我还是要问你,动态调整那不就有回到原先的话题了吗?有些地方既能存数据,又能存指令了。你怎么知道他到底是指令还是数据。

   (Z哥沉思之后表示不想和我再谈论这个话题了)

M:格式,空间都区分不开,还有一个你没有想想到就是时间。

Z:时间?

M:就像人一样该睡觉时就睡觉,该吃饭时就吃饭。到取指令时我就取到内存中某个地方去取指令(当然这个地址,既可以存指令也可以存数据)不过计算机此时此刻认定它存的是指令,不管它是不是有效指令,都进行读取了,之后还要执行。所以非常手段篡改程序后,崩溃时提示CPU无效指令,哈哈。到取数据时我就到内存中某个地方取数据,就算你跟某个指令一样,我也把你当成数据(当然了没有无效的数据,只有无意义的数据呵呵,游戏修改器,修改攻击力,经验值,等级,金钱)。到取指令时间取指令的电子元件就会工作(指令寄存器等),到取数据时间取数据的电子元件就会工作(数据寄存器等)。

Z:我有点明白了,照你这么说,到取指令时不一定取的就是指令,不是要经常遇到无效指令吗?

M:不会,首先需要非常手段篡改程序才可以出现无效指令,正常编译器无法编译出无效的指令,只要编译器正常,精神病也写不出无效指令的程序。其次计算机一开机访问BIOS,再之后每条指令执行前,下一条指令的位置就确定了,CPU自动确定的。况且指令在内存中时,此区域一般是只读的不允许修改(存数据一般是可以修改的,要不然针对内存游戏修改器就都报废了)。操作系统会把程序的指令放到一个只读区域,数据放到可读写区域。这个只读属性是操作系统赋予的不是硬件赋予的。程序退出后,其他程序才能利用这块内存区域,不过存数据还指令就不一定了哦。所以不是按空间分的,而是按时间分的。属于我程序的时间,它存的是指令,它只读。同样区域,属于你程序的时间,他存的是数据,它可读写。

———————————————————————————————————————————————————————————————————————————————

我总结的这两个时间,一个是涉及指令周期的概念,一个是涉及操作系统进程相关概念。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值