CPU如何读取数据?
如果取快递,我们会需要一个取件码,这个取件码对于CPU来说就是地址;
当地址为0x0001,CPU控制IBUS(代码总线)的电平使其呈现出现第一位为高电平,其他均为低电平,并且控制另外的读/写位为读,那么DBUS(地址总线)就会交出0x0001处的数据。
就像给了快递柜收件码,然后点取件,快递柜就会自动给出快递一样。
CPU写数据类似,不过使能写,就像点寄件一样。
CPU如何执行命令
我们可以取数据了,当然我们也可以取命令数据,以便CPU得知是用加法还是减法。类似取数据,我们也需要一个地址来取命令,这个地址一般由一个计数器给出。计数器从0x0000开始,不断增加。所以CPU从0x0000的地址开始取命令,然后从0x0001取命令,循环下去。。。
执行命令需要不仅需要命令,还需要数据。CPU会把第一个命令地址的数据当作操作命令,比如+,把第二个命令地址的数据当作数据1的地址,把第三个命令地址的数据当作数据2的地址。
比如命令地址的前三位里的数据为[0x0012,0x2000,0x2001],
- CPU读取到第一个地址数据为0x12,表示要做加法。
- CPU读取到第二个地址的数据为0x2000,表示为去0x2000的地方取数据,这里我们假设0x2000处的数据为1。
- CPU读取到第二个地址的数据为0x2001,表示为去0x2001的地方取数据,这里我们假设0x2001处的数据为2。
然后CPU就会计算得到1+2=3,那么3这个放到哪里呢,CPU会放到一个自己私有的地方先存着,以便之后需要的时候不用费劲去内存去拿了。
编程到底在编什么
-
最初阶段
由CPU的执行过程可知,编程需要做的就是从地址0x0000开始,写一些命令或者数据进去。
-
汇编阶段
后来有人用最初阶段的方法把
add,[0x2000],[0x2001]
这种文本数据解析成最初阶段的数据[0x0012,0x2000,0x2001]
并写入存储器,成功执行。人可以写一些肉眼可见的操作了。 -
高级语言
再后来有人把1 + 2
这种文本数据解析为把0x2000处的数据置为1mov,[0x2000],1
,把0x2001处的的数据置为2mov,[0x2001],2
,然后把这两个数相加add,[0x2000],[0x2001]
。有人把这个文本解析工具写出来,就叫做c语言的编译器,这些语法规范就叫做c语言。
再后来有人用C写了一个程序,这个程序可以解析1+2
,但是不同与c的是,这个程序直接就显示1+2
的结果到屏幕,而不是变成程序写入存储器执行。这个解析文本,并把结果直接显示出来,而不用重新写入到程序存储器的程序就叫做Python程序。