x86架构

关于CPU、指令集、架构、芯片的基本认识

风流意气都作罢 提交于 2019-12-01 01:41:56
  学过计算机基础知识的朋友都知道CPU的含义,亦即中央处理器,是负责计算机主要运算任务的组件。一般习惯把CPU比喻为人的大脑。而了解略深的用户会听说CPU有x86、ARM等分类,前者主要用于PC而后者主要用于手机平板等设备。那么这里的x86、ARM指的是什么呢?   CPU执行计算任务时都需要遵从一定的规范, 程序在被执行前都需要先翻译为CPU可以理解的语言。这种规范或语言就是指令集 (ISA,Instruction Set Architecture)。程序被按照某种指令集的规范翻译为CPU可识别的底层代码的过程叫做编译(compile)。 x86、ARM v8、MIPS都是指令集的代号 。指令集可以被扩展,如x86增加64位支持就有了x86-64。厂商开发兼容某种指令集的CPU需要指令集专利持有者授权,典型例子如Intel授权AMD,使后者可以开发兼容x86指令集的CPU。   CPU的基本组成单元即为核心(core)。多个核心可以同时执行多件计算任务,前提是这些任务没有先后顺序。   核心的实现方式被称为 微架构 (microarchitecture)。 微架构的设计影响核心可以达到的最高频率、核心在一定频率下能执行的运算量、一定工艺水平下核心的能耗水平等等。 此外,不同微架构执行各类程序的偏向也不同,例如90年代末期Intel的P6微架构就在浮点类程序上表现优异

深入浅出计算机组成原理学习笔记:CISC和RISC-为什么手机芯片都是ARM?(第29讲)

久未见 提交于 2019-11-28 03:50:58
一、引子 我在第5讲讲计算机指令的时候,给你看过MIPS体系结构计算机的机器指令格式。MIPS的指令都是固定的32位长度,如果要用一个打孔卡来表示,并不复杂。 第6讲的时候,我带你编译了一些简单的C语言程序,看了x86体系结构下的汇编代码。眼尖的话,你应该能发现,每一条机器码的长度是不一样的。 而CPU的指令集里的机器码是固定长度还是可变长度,也就是 复杂指令集(Complex Instruction SetComputing,简称CISC)和 精简指令集(Reduced Instruction Set Computing,简称RISC)这两种风格的指令集一个最重要的差别。那今天我们就来看复杂指令集和精简指令集之间的对比、差异以及历史纠葛。 二、CISC VS RISC:历史的车轮不总是向前的 1、人月神话 在计算机历史的早期,其实没有什么CISC和RISC之分。或者说,所有的CPU其实都是CISC。 虽然冯·诺依曼高屋建瓴地提出了存储程序型计算机的基础架构,但是实际的计算机设计和制造还是严格受硬件层面的限制。当时的计算机很慢,存储空间也很小。 《人月神话》这本软件工程界的名著,讲的是花了好几年设计IBM 360这台计算机的经验。IBM 360的最低配置,每秒只能运行34500条指令,只有8K的内 存。为了让计算机能够做尽量多的工作,每一个字节乃至每一个比特都特别重要。 所以

这18条背下来没人敢和你忽悠CPU

这一生的挚爱 提交于 2019-11-28 02:38:07
http://hi.baidu.com/hieda/blog/item/eb78fd444c6e5748510ffe83.html 1.主频   主频也叫时钟频率,单位是MHz,用来表示CPU的运算速度。CPU的主频=外频×倍频系数。很多人认为主频就决定着CPU的运行速度,这不仅是个片面的,而且对于服务器来讲,这个认识也出现了偏差。至今,没有一条确定的公式能够实现主频和实际的运算速度两者之间的数值关系,即使是两大处理器厂家Intel和AMD,在这点上也存在着很大的争议,我们从Intel的产品的发展趋势,可以看出Intel很注重加强自身主频的发展。像其他的处理器厂家,有人曾经拿过一快1G的全美达来做比较,它的运行效率相当于2G的Intel处理器。   所以,CPU的主频与CPU实际的运算能力是没有直接关系的,主频表示在CPU内数字脉冲信号振荡的速度。在Intel的处理器产品中,我们也可以看到这样的例子:1 GHz Itanium 芯片能够表现得差不多跟2.66 GHz Xeon/Opteron一样快,或是1.5 GHz Itanium 2大约跟 4 GHz Xeon/Opteron一样快。CPU的运算速度还要看CPU的流水线的各方面的性能指标。   当然,主频和实际的运算速度是有关的,只能说主频仅仅是CPU性能表现的一个方面,而不代表CPU的整体性能。   2.外频  

x86/x86_64的一些基本概念

最后都变了- 提交于 2019-11-26 17:34:32
本人在构建boost的时候,从"Start Menu" -> "Programs" -> "Visual Studio 2015" -> "Visual Studio Tools" -> "Windows Desktop Command Prompts": VS2015 x64 ARM Cross Tools Command Prompt.lnk VS2015 x64 Native Tools Command Prompt.lnk VS2015 x64 x86 Cross Tools Command Prompt.lnk VS2015 x86 ARM Cross Tools Command Prompt.lnk VS2015 x86 Native Tools Command Prompt.lnk VS2015 x86 x64 Cross Tools Command Prompt.lnk 开始郁闷于 VS2015 x64 Native Tools Command Prompt.lnk VS2015 x64 x86 Cross Tools Command Prompt.lnk 此两者的区别。 区别在这里 %comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"" amd64

x86\x64\ia64的区别

蓝咒 提交于 2019-11-26 17:34:23
这几天做MDT时,总是会遇到x86\x64\ia64这几个文件夹。前两者很常见,自从Win7系统出现之后,经常会遇到。于是猜想ia64应该也是CPU的某种架构或版本。现对三者做了下总结。 x86或80x86是英特尔Intel首先开发制造的一种微处理器体系结构的泛称。该系列较早期的处理器名称是以数字来表示,并以“86”作为结尾,包括Intel 8086、80186、80286、80386以及80486,因此其架构被称为“x86”。x86架构于1978年推出的Intel 8086中央处理器中首度出现,它是从Intel 8008处理器中发展而来的,而8008则是发展自Intel 4004的。8086在三年后为IBM PC所选用,之后x86便成为了个人计算机的标准平台,成为了历来最成功的CPU架构,如Pentium、Athlon。现在,Intel把x86-32称为IA-32,全名为“Intel Architecture, 32-bit”。 x86-64架构诞生颇有时代意义。当时了,处理器的发展遇到了瓶颈,内存寻址空间由于受到32位CPU的限制而只能最大到约4G。AMD主动把32位x86(或称为IA-32)扩充为64位。它以一个称为AMD64的架构出现(在重命名前也称为x86-64),且以这个技术为基础的第一个产品是单内核的Opteron和Athlon 64处理器家族

X86架构模式

别等时光非礼了梦想. 提交于 2019-11-26 05:26:44
计算机的工作模式 对于计算机来说,CPU(central processing Unit,中央处理器)肯定是最核心的,程序执行全都要依赖于它。 CPU和其他设备连接,要靠一种叫总线(bus)的东西,其实就是主板上密密麻麻的集成电路,这些东西组成了CPU和其他设备的高速通道。 在这些设备中,最重要的是内存(memory),因为单靠CPU是没法完成计算任务的,很多复杂的计算任务需要把中间结果保存下来,然后基于中间结果进行进一步计算,CPU本身是没有办法保存这些结果的,这就需要依赖内存了。 当然总线上也会有一些其他设备,例如显卡会连接显示器,磁盘控制器会连接硬盘,USB控制器会连接鼠标和键盘等等。 CPU和内存是完成计算任务的核心组件,CPU其实也不是单独一块,它包括三个部分,运算单元 ,数据单元和控制单元。 运算单元只管算,例如做加法,做位移等等。但是它不知道应该算哪些数据,运算结果应该放在哪里。运算单元计算的数据如果每次都要经过总线,到内存中去现拿,这样就太慢了, 所以有了数据单元。数据单元包括CPU内部的缓存和寄存器组,空间很小,但是速度飞快,可以暂时存放数据和运算结果。 有了放数据的地方,也有了算的地方,还需要有个指挥到底做什么运算的地方,这就是控制单元。控制单元是一个统一的指挥中心,它可以获得下一条指令,然后执行这条指令,这个指令会指定运算单元取出数据单元的某几个数据

深入iOS系统底层之指令集介绍

蹲街弑〆低调 提交于 2019-11-26 03:32:53
不以规矩.不能成方圆。--《孟子·离娄上》 说到指令集以及CPU架构体系,大家就会想到计算机专业课程里面的计算机体系结构的方面的内容。既然课程中已经有了的内容我就不想那么枯燥的去复述一遍,而是先看一个类的定义: //定义寄存器编号 typedef enum : int { Reg0, Reg1, Reg2, Reg3 } RegNum; //定义系统调用编号 typedef enum : int { Int3 //设备输出,将寄存器Reg0中的内容输出到屏幕 } Interrupt; //定义指令索引 typedef int Instruct; /** 虚拟CPU类,模拟CPU所提供的指令。 虚拟CPU由4个寄存器和运算部件组成。四个寄存器的编号分别定义在RegNum中;运算部件提供了赋值、加减、比较、跳转9个指令。 */ @interface VCPU : NSObject //将一个常量值赋值给编号为reg的寄存器中。 -(void)moveFromConst:(int)val toReg:(RegNum)reg; //将编号为reg1的寄存器中的值赋值给编号为reg2的寄存器中。 -(void)moveFromReg:(RegNum)reg1 toReg:(RegNum)reg2; //将编号为reg的寄存器中的值赋值给地址为addr的内存中。 -(void