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

 我来答
后视镜的风景kS
推荐于2018-03-23
知道答主
回答量:28
采纳率:100%
帮助的人:4.4万
展开全部
指令和数据均存放在内存中,CPU是从时间和空间上区分它们是指令还是数据的。
  时间上讲,取指令事件发生在“取指周期”,取数据事件发生在“执行周期”。
从空间上讲,从内存读出的指令流流向控制器(指令寄存器)。从内存读出的数据流流向运算器(通用寄存器)。
BDHXM893622046
2012-09-14 · TA获得超过155个赞
知道答主
回答量:172
采纳率:0%
帮助的人:47.2万
展开全部
计算机可以从时间和空间两方面来区分指令和数据,在时间上,取指周期从内存中取出的是指令,而执行周期从内存取出或往内存中写入的是数据,在空间上,从内存中取出指令送控制器,而执行周期从内存从取的数据送运算器
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
来自岘山尽职的李小狼
2011-05-19 · TA获得超过573个赞
知道小有建树答主
回答量:837
采纳率:50%
帮助的人:339万
展开全部
指令用来确定“做什么”和“怎样做”,数据是“做”的时候需要原始数。

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

比如:要计算机做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个代码就必然是指令.....
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式