指令集架构instruction set architecture (ISA),这是一个电脑模型的概括,有时也叫做计算机架构。

ISA的具体实现有很多种,下面会介绍。不同的ISA实现在性能、物理空间和硬件成本上都不同。

ISA服务于硬件和软件之间的接口,基于某个ISA实现的软件可以在同一ISA的不同硬件上。

这就是在不同计算机上的二进制兼容功能,计算机可以一代代升级,而软件都能兼容运行。

所以,ISA是当今计算机里最重要的一个抽象概念。

ISA提供了机器语言编程所需的一切。但不同ISA实现的内容可能并不相同。

比如,数据类型、寄存器列表、寻址方式等。

下面列举一些ISA的主要方面:

1,Base / 进制

计算机最早时有用二进制,十进制,甚至还有三进制的。

当代的计算机几乎都是二进制。Contemporary computers are almost exclusively binary.

2,Bits / 位数

CPU处理的一个单位是一个word(字)。

一个字的长度主要有8,16,32或64位。也有其他位数的计算机出现过。

3,Operands / 操作数

操作数个数是一个指令集和性能有关的方面。

比如支持三个操作数的架构:

A = B + C

可以直接在一条指令集计算。

如果两个操作数的架构:

A = A + B

所以要计算两个数相加赋值给第三个数,就需要两条指令:

A = B

A = A + C

4,Endianness / 字节顺序或大小端

一个指令集可以选择大端或小端,或者都有,或者可配置的。

小端处理器在内存中的字节顺序,是多字节的数值,低有效位字节在低地址位。

大端则相反。

x86架构是小端的。

大部分的RISC精简指令集电脑(PowerPC,MIPS等)本来是大端的,而ARM是小端的。

目前更多的架构是两种模式都可配置的,比如ARM就可以。

当然,对于大小端的区别,只适用于那些允许单字节寻址的处理器,还要基本寻址的机器字大小要超过一个字节。

5,寄存器数目

一般寄存器的数目是2的指数,比如8,16,32。

有些情况下,还有一个硬件实现的值为0的伪寄存器,方便使用,提高效率。

有一些特殊寄存器,比如Program pointer / PC,指令寄存器。

处理器访问内存的模式,比如8051是load -store,先读取内存的值到寄存器,操作完后,将寄存器的结果写入内存地址,不是直接操作内存。

而x86是可以直接按地址对内存进行操作。

Architecture

Bits

Design

Max Operands

Registers Number

Instruction Encoding

Endianness

8080

8

CISC

2

8

Variable (1 to3 bytes)

Little

8051

32 (8→32)

CISC

1

32 in 4-bit

16 in 8-bit

8 in 16-bit

4 in 32-bit

Variable (1 to3 bytes)

Little

x86/x86-64

16,32,64

CISC

2-4

Variable

Little

AVR

8

RISC

2

32

Variable

Little

AVR32

32

RISC

2-3

15

Variable

Big

MIPS

32->64

RISC

1-3

4-32

Fixed(32-bit)

Big or Little

PowerPC

32->64

RISC

3

32

Fixed(32-bit)

Big or Little

Thumb/T32

32

RISC

3

7 with 16-bit Thumb instructions;

15 with 32-bit Thumb-2 instructions

Thumb: Fixed (16-bit), Thumb-2:

Variable (16- and 32-bit)

Big or Little

ARM/A32

32

RISC

3

15

Fixed(32-bit)

Big or Little

ARM64/A64

64

RISC

3

32

Fixed(32-bit)

Big or Little

。。。。。。

一般商用服务器,跑的是RISC的系统,CPU只执行最常用的那部分指令,稳定性更好。比如IBM的PowerPC,Intel的安腾(Itanium)处理器(64bit, EPIC: Explicitly Parallel Instruction Computer架构),不过安腾昙花一现而已。

x86_64介绍

x86是指intel的开发的一种32位指令集,从386时代开始的,一直沿用至今,是一种cisc指令集,所有intel早期的cpu,amd早期的cpu都支持这种指令集,intel官方文档里面称为“IA-32”

  x84_64是x86 CPU开始迈向64位的时候,有2选择:

(1)向下兼容x86。但反过来,32bit的CPU上运行64bit的软件是不可以的。

(2)完全重新设计指令集,不兼容x86。

  AMD抢跑了,比Intel率先制造出了商用的兼容x86的CPU,AMD称之为AMD64,抢了64位PC的第一桶金,得到了用户的认同。

  Intel选择了设计一种不兼容x86的全新64为指令集,称之为IA-64(这玩意似乎就是安腾),但是比amd晚了一步,而且IA-64也挺惨淡的,因为是全新设计的CPU,没有编译器,也不支持windows(微软把intel给忽悠了,承诺了会出安腾版windows server版,但是迟迟拿不出东西)。后来不得不在时机落后的情况下也开始支持AMD64的指令集,但是换了个名字,叫x86_64,表示是x86指令集的64扩展,大概是不愿意承认这玩意是AMD设计出来的。

  实际上,x86_64、x64、AMD64基本上是同一个东西,我们现在用的intel/amd的桌面级CPU基本上都是x86_64,与之相对的arm、ppc等都不是x86_64。

  x86、x86_64主要的区别就是32位和64位的问题,x86中只有8个32位通用寄存器,eax,ebx,ecx,edx, ebp, esp, esi, edi。

  x86_64把这8个通用寄存器扩展成了64位的,并且比x86增加了若干个寄存器(好像增加了8个,变成了总共16个通用寄存器)。同样的MMX的寄存器的位数和数量也进行了扩展。此外cpu扩展到64位后也能支持更多的内存了,等等许多好处。

  对于普通程序来说,CPU位数的扩展、寄存器数量的增加不会带来明显的性能提升,比如IE浏览器、Office办公这类的软件。特定的程序很能够充分利用64位CPU、更多的寄存器带来的优势,比如MMX除了能提升多媒体程序的性能,对矩阵、多项式、向量计算都能带来提升,更多的MMX寄存器、更大的寄存器字长都有利于SIMD指令的执行,能够提升CPU对数据的吞吐量(RISC指令集的CPU动不动就有数百个寄存器,可以有效的缓存中间计算结果,不需要把中间结果写入内存,从而减少内存访问次数,显著提升性能)

最后说重点,64bit相比32bit的性能优势:

这里不考虑64bit硬件上运行32bit软件的这种过度方式。

从架构上来说,64bit拥有64bit 的register和64bit的bus,在数据传输效率上比32bit要高不少;

另外,64bit地址总线的寻址空间突破了4G的限制。

所以,对于大内存,密集数据运算的应用场景,64bit的优势是非常明显的。网上有一些benchmark,这里不贴了。

但是,对于小内存系统,64bit的CPU在某些状况下可能比32bit CPU的效率更低。

因为64 bit的CPU的地址是64位的,指针是64位的,编译生成的二进制文件更大,运行时占用的内存更多;另一方面,因为64位地址的问题,cache中能存放的指令就更少,所以更容易导致cache的miss。

所以在某些应用场景,64 bit CPU的更大的寻址空间,更快的数据传递,更快的浮点运算的特性,与其64 bit的地址/指针所导致的cache miss的特性,始终并存。

为了充分利用64的优势,又避免64bit地址导致的cache miss的问题,Intel提出了x32 ABI的概念。

x32不是一个ARCH,是一个ABI。

x32可以充分的使用64 bit硬件的64 bit寄存器,64bit总线,以及64bit新增的指令,从而获得更快的数据处理速度。

同时x32又使用32bit的地址/pointer,32bit的C数据类型,因此cache miss并不会增加。

x32是一个ABI,其设计到的部分包括:kernel的support,toolchain的support,system lib的support。现在kernel(from 3.4)和toolchain的support都已经OK。

注:

1,x86-64 (also known as x64, x86_64, AMD64, and Intel 64) is a 64-bit version of the x86 instruction set, first released in 1999. It introduced two new modes of operation, 64-bit mode and compatibility mode, along with a new 4-level paging mode.

2,AArch64 or ARM64 is the 64-bit extension of the ARM architecture. ARMv8-A Platform with Cortex A57/A53 MPCore BIG.LITTLE CPU chip.

3,MPcore means main processor core.

4,x86系列都有向后兼容设计,所以x86 32-bit的程序可以在x86-64上运行,但反过来不可以。类似的,ARM32程序也可以在ARM64上运行,但具体过程会复杂些,反过来也不行。

5,ARMv8-A系列的芯片是ARM64的。

参考网址:

https://en.wikipedia.org/wiki/Comparison_of_instruction_set_architectures

https://en.wikipedia.org/wiki/ARM_architecture

CPU知识了解:关于x86、x86_64/x64、amd64和arm64/aarch64 - 古兰精 - 博客园

码农的自我修养 - 指令集架构种类相关推荐

  1. 码农的自我修养之 软件危机和软件过程

    码农的自我修养之软件危机和软件过程 软件危机和软件过程 没有银弹 基于组件的软件工程方法 再论没有银弹 基于组件的软件供应链 软件危机的根本问题 软件危机的展望 软件过程模型 软件的生命周期概述 描述 ...

  2. 论一个糟糕的大数据码农的自我修养

    幸福的家庭都是一样的,不幸的家庭各有各的不幸 - 论一个糟糕的大数据平台工程师的自我修养 本来想写写如何成为一名优秀的大数据平台开发工程师,但说实话,这个话题太简单了!虽然我没有被Jeff dean大 ...

  3. 高效能码农的自我修养:5本书教你怎样科学学习,拒绝无用功

    导读:作为一枚苦逼的码农,你需要学习很多东西.但在开始的开始,你学会学习了吗?科学.高效的学习方法,会让你事半功倍.今天书单姐推荐5本书,为你带来26种黄金学习法则.11个高效能学习习惯.效率加法的2 ...

  4. 码农的自我修养 - ARM V9架构的巨大价值

    ARM'S V9 ARCHITECTURE EXPLAINS WHY NVIDIA NEEDS TO BUY IT 我们中的许多人一直在绞尽脑汁,为什么Nvidia会花费巨资--高达400亿美元--来 ...

  5. 码农的自我修养 - 关于ARM你需要知道的

    据ARM公司的工程师说,第九代Arm处理器架构可以在这十年的剩余时间里支持所有的分布式计算.Arm的崛起是否意味着我们所知道的中央处理器的终结? 关于Arm处理器架构在任何计算或通信市场--智能手机. ...

  6. 三十年软件开发之路:老码农的自我修养!

    [CSDN编者按]"千帆过尽仍少年",对于程序员来说,保留技术初心.不断提升实力是夯实自己的不二法则.而本文的作者,作为一名有着三十多年开发经验的"老"程序员, ...

  7. 码农的自我修养 - 关于MinGW和Cygwin

    Windows下使用GCC套件,并且模拟Unix/Linux的操作环境,一般使用的是MinGW和Cygwin. 让我们来一起认识一下. MinGW Minimalist GNU for Windows ...

  8. 码农的自我修养 - 流程图 Flowchart

    什么是流程图?   设计和文档化是一个过程,需要将不同的步骤从开始到结束都绘制出来.在这种情况下,一个错误就会导致整个系统崩溃,造成时间.金钱.资本设备的重大损失,甚至可能威胁到执行该过程的人力的安全 ...

  9. 【原创】论码农的财富修养

    <喜剧之王>里看到了演员的自我修养,然后想聊下码农的财富修养,这里不是聊理财,更多是保险Insurance: 保险是什么,是一种通过支付少量的保险费用来应对未知风险的机制,比如车险.财险. ...

最新文章

  1. python编程面试题
  2. install g++ 出现“g++ : Depends: g++-4.8 (= 4.8.2-5~) but it is not going to be installed...解决方法
  3. 2p刷高恪魔改固件_Newifi3路由器试用高恪固件
  4. 首个进入Gartner领导者象限的中国数据库要开发布会了!
  5. jzoj4802-[GDOI2017模拟9.24]探险计划【费用流,拆点】
  6. Leetcode--238. 除自身以外数组的乘积
  7. 有人说JavaScript是未来的编程语言?这是为什么?
  8. CSS3特效,跳动的心
  9. ElacticSearch索引,文档,记录,常用指令
  10. SAP ABAP搜狗输入法注释删除注释快捷键设置(未解决)
  11. 执行taosdemo发生错误Unable to establish connection
  12. System.Net.Sockets空间
  13. STL(五)之智能指针剖析
  14. 斗鱼直播Android开发二面被刷,跳槽薪资翻倍
  15. “二码合一”健康码和行程码一次出示即可
  16. Word 使用宏根据文件名实现文件版本号自动更新_rev00
  17. html中的li标签不换行,css li 不换行(布局,内容)
  18. (二)u-boot2013.01.01 for TQ210:《Makefile分析》
  19. NotFoundError:Tensor name incept5b_1/... not found in checkpoint files /home/cqh2/...
  20. win7怎么设置热点让手机连接?热点共享网络的方法

热门文章

  1. 全球卫星导航系统(GNSS)频率表(2017年)
  2. 世界著名汽车公司谱系
  3. k8s(一)、 1.9.0高可用集群本地离线部署记录
  4. c语言中不可表示的字符是什么,2014年3月全国计算机二级C选择题真题第2套
  5. onTouch事件机制
  6. 二氧化钛TiO2纳米粒子(尺寸80nm-800nm可调节)的高清电镜图
  7. Java编程思想读书笔记——初始化与清理(二)
  8. 智能合约开发——TypeScript 基础(全)
  9. javaweb项目案例:员工管理系统
  10. 关于系统设计中的流程图