python指令集_漫话CPU指令集架构

这两天了解了一下处理器比较底层的知识,发现处理器指令集架构(Instruction Set Architectures)是个挺有意思的存在。于是就简单记录一下学习心得。

目前市面上存在两种指令集架构类型:Reduced Instruction Set Computing (RISC) 精简指令集,比如ARM,MIPS等

Complex Instruction Set Computing (CISC) 复杂指令集,比如Intel的X86等

简单说,一个就是只规定非常简单的2进制处理器指令,复杂的指令也只能是最基本的指令的叠加组合。二复杂指令集代表着本身就有一个很庞大的指令集库,一些复杂的指令已经在指令集库里,只需要调用即可。

当然,目前最火的当属基于RISC开发的ARM架构,在移动通信时代,凭借着低功耗打遍天下无敌手。手机,平板,自动驾驶等等等等,一招鲜吃遍天。而且RISC的构架也是ARM低功耗原因之一。RISC的CPU包含有较少的单元电路,因而面积小、功耗低;而CISC的CPU包含有丰富的电路单元,因而功能强、面积大、功耗大。

X86,依靠强有力的Intel,强势控制产业链,获取价值链上最丰厚的那部分利润.

ARM, 靠IP授权的商业模式,且技术上走与Intel差异化路线,加上一些些运气(踏对了手机这条路,谢谢TI-Nokia,Apple,Samsung for big.Little)走小而美的路线,但是凭借已经形成巨大的生态系统,占据优势.

MIPS,很学术很精美很帅,但是对指令集控制松散,导致生态系统分裂,没有形成合力,最终被市场抛弃。

下面就看一下最学术最精美的MIPS的指令集是个什么样子吧。首先了解一下CPU的工作原理,如下图:简单例子,如何用指令集控制CPU完成2+5=7的运算

CPU里自带几个寄存器(32位或64位),三条总线连接内存(RAM).每一次执行指令,都包含了控制信息,地址信息,以及数据信息。而所有指令的集合就是CPU的指令集。如上图所示,左下角就是指令集,他有LOAD和STORE指令,也有数学运算指令。可以通过他们,来控制CPU和内存进行交流,比如: 从内存读取数据,CPU内部数学运算,然后存贮数据到内存。

对于32位MIPS指令集,共三种形式:R型 I型 J型

先说J型,就是让CPU调到一个地址,然后从这个地址开始执行指令:J型指令对应的二进制机器码

接下来是I型指令,它可以将一个任意数(立即数 immediate value)加上寄存器里的数字,然后把结果存储到另外一个寄存器里面:I型指令对应的二进制机器码

最后是R型指令,它用连续三个5位二进制码来表示三个寄存器的地址,然后用一个5位二进制码来表示移位的位数(如果未使用移位操作,则全为0),最后为6位的function码(它与opcode码共同决定R型指令的具体操作方式);

R型指令对应的二进制机器码

以上就是MIPS指令集的小笔记,基本上能有个初步的了解。当然,用01010101这种二进制代码写程序,可能会死人,毕竟难记还容易出错。所以大家用汇编程序来标记这些晦涩的2进制机器指令集代码,比如下面这个例子: 把数字5加上2号寄存器里面的数字,然后把结果存储到6号寄存器里。汇编小例子: 把数字5加上2号寄存器里面的数字,然后把结果存储到6号寄存器里。

当然人类又发明了更高级的计算机语言,比如C,C++甚至java, python, matlab等等等等, 其实只是需要用编译器把高级语言最终编译成这些010101组成的指令集指令而已,当然在编译过程中,有很多可以优化的地方。这也是为什么高级语言执行速度比较慢,而越低级的语言执行效率越快,因为越低级的语言越接近真实的机器代码。比如下面这个例子: 用c写的代码,被编译成了机器指令:C代码相应的部分汇编代码

而最后,每条汇编代码,都对应着唯一的一个32位(或者64位)二进制指令。依次顺序执行,然后就可以得到程序结果,是不是很神奇?

当然以上只是很宏观的角度分析了CPU指令集的概念,要想跟深入,恐怕要花更多的时间去学习每一个细节了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值