介绍一下X86、MIPS、ARM三种指令集:
1. X86指令集
X86指令集是典型的CISC(Complex Instruction Set Computer)指令集。
X86指令集外部看起来是CISC指令集,事实上,它是采用类RISC内核,将部分复杂指令通过micro-op模式进行翻译成简单指令,再处理。
X86指令集的几个特性

  • 后向兼容
    Intel每推出一代新处理器,总会兼容以前处理器的feature。这是由于长期积累的用户习惯和生态环境不容更改,否则没法赚钱了~
    后向兼容导致指令集愈发庞大、愈发复杂,同时功耗也会比较大,不过由于Intel超高的工艺水平,这都不是事。
  • 变长指令
    X86指令集采用变长指令(1~15Bytes),一般每条指令为2~3Bytes。这样可以提高码字的利用率,但也使得译码以及读取指令时比较复杂,因为不知道一条指令应该读多长。
  • 多种寻址方式
    X86指令集可以采用多种寻址方式,比如立即寻址、寄存器寻址、寄存器相对寻址……
  • 通用寄存器个数有限
    X86-32的系统有8个通用寄存器,之后X86-64系统扩展到了16个。
  • 指令执行时,最多只能有一个操作数在内存里,另一个操作数必为立即数或者寄存器。
  • 由于后向兼容以及类RISC内核,导致功耗增加;同时,有很多复杂的指令利用率很低。

2. MIPS指令集
MIPS指令集是典型的RISC(Reduced Instruction Set Computer)指令集。
精简指令集系统的设计思想就是:把复杂指令集中一些不常用的指令踢出指令集,这些复杂指令由日益强大的软件技术(编译)去实现,这样使得每个指令的流水线分段比较均匀,充分利用了处理器的流水线结构,提高了主频。
MIPS指令集以32个寄存器为中心,只能通过Load/Store指令访问内存,其余涉及计算的指令都从寄存器堆中读取数据,并且将计算结果写入寄存器堆中。
另外,MIPS指令的格式比较规整,所有指令长度一致,指令操作码都在固定的位置;寻址方式、对于每条指令的操作都很简单。
那么CISC与RISC的区别是什么呢?
最大的区别在于:RISC只能通过Load/Store指令访问内存,而CISC指令集则没有这个限制。

3. ARM指令集
ARM指令集属于RISC指令集,每条指令32位。
ARM也有16位的压缩指令集,这是为了避免32位出现的码字浪费,提高运行速度推出的。

  • ARM指令由于属于RISC指令集,一般完成的操作比较简单。程序员可以通过多条简单的指令组合实现一个复杂的操作。
  • 同样的,ARM指令集也是只能通过Load/Store指令读取内存中的数据到寄存器,其余的指令只能对寄存器的操作数进行处理。
  • 大多数指令长度相同,字段位置(尤其是操作码的位置)固定,且具有“条件执行”模式。

ISA Introduction的更多相关文章

  1. 关于oc运行时 isa指针详解

    Cocoa框架是iOS应用程序的基础,了解Cocoa框架,对开发iOS应用有很大的帮助. 1.Cocoa是什么? Cocoa是OS X和 iOS操作系统的程序的运行环境. 是什么因素使一个程序成为Co ...

  2. Core Java Volume I — 4.1. Introduction to Object-Oriented Programming

    4.1. Introduction to Object-Oriented ProgrammingObject-oriented programming, or OOP for short, is th ...

  3. NSObject中的isa到底是个什么?

    首先看一下NSObject的定义: @interface NSObject <NSObject> { Class isa OBJC_ISA_AVAILABILITY; } 官方解释:Eve ...

  4. An Introduction to Laravel Policy

    An Introduction to Laravel Policy 30 Dec 2018 . Laravel. 7.6K views If you heard about Laravel Polic ...

  5. A chatroom for all! Part 1 - Introduction to Node.js(转发)

    项目组用到了 Node.js,发现下面这篇文章不错.转发一下.原文地址:<原文>. ------------------------------------------- A chatro ...

  6. Is-A,Has-A,Use-A(转载)

    原文地址:http://blog.csdn.net/loveyou128144/article/details/4749576 而Is-A,Has-A,Use-A则是用来描述类与类之间关系的.简单的说 ...

  7. Introduction to graph theory 图论/脑网络基础

    Source: Connected Brain Figure above: Bullmore E, Sporns O. Complex brain networks: graph theoretica ...

  8. INTRODUCTION TO BIOINFORMATICS

    INTRODUCTION TO BIOINFORMATICS      这套教程源自Youtube,算得上比较完整的生物信息学领域的视频教程,授课内容完整清晰,专题化的讲座形式,细节讲解比国内的京师大 ...

  9. mongoDB index introduction

    索引为mongoDB的查询提供了有效的解决方案,如果没有索引,mongodb必须的扫描文档集中所有记录来match查询条件的记录.然而这些扫描是没有必要,而且每一次操作mongod进程会处理大量的数据 ...

随机推荐

  1. Vue+Element Table 列标红

    效果图 列方法 调用 样式

  2. docker下安装centos,并在其上搭建lnmp环境

    一.安装CentOs容器 1.进入docker下载CentOs,这里我使用的CentOs6.8 docker pull centos:6.8 2.创建容器 sudo docker run --priv ...

  3. Django模拟ASP.NET MVC 自动匹配路由(转载)

    项目结构 操作步骤 1.创建项目结构如上图 2.在myapp目录下创建urls文件,代码: from django.conf.urls import patterns, url from untitl ...

  4. Centos7 编译安装 Libmcrypt 库

    0x00 先下载 libmcrypt 库源码 libmcrypt-2.5.8.tar.gz 或者去这里 libmcrypt 下载你需要的版本. 0x01 将下载的源码解压到文件夹 tar -zxvf ...

  5. For循环详解

    for语句 学过c语言都对循环结构不陌生,尤其是for循环,他是C语言中最有特色的循环语句,使用最为灵活. 形式 结构:for(表达式1:表达式2:表达式3){循环体结构} 每部分的作用 表达式1:一 ...

  6. 最近遇到adb connection 问题,总结一下

    最近eclipse总是遇到adb connection问题,网上搜索了一些解决方法,在cmd tool工具下adb kill-server ,adb start-server ,甚至重启都无效.然后我 ...

  7. android学习笔记——使用QuickContactBadge关联联系人

    本文大部分内容来自<疯狂android讲义>. QuickContactBadge继承了ImageView,因此它的本质也是图片,也可以通过android:src属性指定它显示的图片.Qu ...

  8. XFS文件系统的备份与恢复

    永久修改主机名:hostnamectl set-hostname oldboy临时修改主机名:hostname xfsdump备份xfsdump -f 备份的文件位置 要备份的分区或者磁盘 免交互备份 ...

  9. How Many Answers Are Wrong HDU - 3038 (经典带权并查集)

    题目大意:有一个区间,长度为n,然后跟着m个子区间,每个字区间的格式为x,y,z表示[x,y]的和为z.如果当前区间和与前面的区间和发生冲突,当前区间和会被判错,问:有多少个区间和会被判错. 题解:x ...

  10. Java 8 到 Java 14,改变了哪些你写代码的方式?

    前几天,JDK 14 正式发布了,这次发布的新版本一共包含了16个新的特性. 其实,从Java8 到 Java14 ,真正的改变了程序员写代码的方式的特性并不多,我们这篇文章就来看一下都有哪些. La ...