ISA Introduction
介绍一下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的更多相关文章
- 关于oc运行时 isa指针详解
Cocoa框架是iOS应用程序的基础,了解Cocoa框架,对开发iOS应用有很大的帮助. 1.Cocoa是什么? Cocoa是OS X和 iOS操作系统的程序的运行环境. 是什么因素使一个程序成为Co ...
- 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 ...
- NSObject中的isa到底是个什么?
首先看一下NSObject的定义: @interface NSObject <NSObject> { Class isa OBJC_ISA_AVAILABILITY; } 官方解释:Eve ...
- An Introduction to Laravel Policy
An Introduction to Laravel Policy 30 Dec 2018 . Laravel. 7.6K views If you heard about Laravel Polic ...
- A chatroom for all! Part 1 - Introduction to Node.js(转发)
项目组用到了 Node.js,发现下面这篇文章不错.转发一下.原文地址:<原文>. ------------------------------------------- A chatro ...
- Is-A,Has-A,Use-A(转载)
原文地址:http://blog.csdn.net/loveyou128144/article/details/4749576 而Is-A,Has-A,Use-A则是用来描述类与类之间关系的.简单的说 ...
- Introduction to graph theory 图论/脑网络基础
Source: Connected Brain Figure above: Bullmore E, Sporns O. Complex brain networks: graph theoretica ...
- INTRODUCTION TO BIOINFORMATICS
INTRODUCTION TO BIOINFORMATICS 这套教程源自Youtube,算得上比较完整的生物信息学领域的视频教程,授课内容完整清晰,专题化的讲座形式,细节讲解比国内的京师大 ...
- mongoDB index introduction
索引为mongoDB的查询提供了有效的解决方案,如果没有索引,mongodb必须的扫描文档集中所有记录来match查询条件的记录.然而这些扫描是没有必要,而且每一次操作mongod进程会处理大量的数据 ...
随机推荐
- ORM框架对分表分库的实现
*:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !impor ...
- spring使用jdbc
对于其中的一些内容 @Repository(value="userDao") 该注解是告诉Spring,让Spring创建一个名字叫“userDao”的UserDaoImpl实例. ...
- Android AIDL[Android Interface Definition Language]跨进程通信
全称与中文名IPC:Inter-Process Communication(进程间通信)Ashmem:Anonymous Shared Memory(匿名共享内存)Binder:Binder(进程间通 ...
- 震撼!全网第一张源码分析全景图揭秘Nginx
不管是C/C++技术栈,还是PHP,Java技术栈,从事后端开发的朋友对nginx一定不会陌生. 想要深入学习nginx,阅读源码一定是非常重要的一环,但nginx源码量毕竟还是不算少,一不小心就容易 ...
- Python爬虫 ---scrapy框架初探及实战
目录 Scrapy框架安装 操作环境介绍 安装scrapy框架(linux系统下) 检测安装是否成功 Scrapy框架爬取原理 Scrapy框架的主体结构分为五个部分: 它还有两个可以自定义下载功能的 ...
- 并查集---体会以及模板&&How Many Tables - HDU 1213
定义&&概念: 啥是并查集,就是将所有有相关性的元素放在一个集合里面,整体形成一个树型结构,它支持合并操作,但却不支持删除操作 实现步骤:(1)初始化,将所有节点的父亲节点都设置为自己 ...
- Byte字节
字节(Byte )是计算机信息技术用于计量存储容量的一种计量单位,作为一个单位来处理的一个二进制数字串,是构成信息的一个小单位.最常用的字节是八位的字节,即它包含八位的二进制数. 中文名 字节 外文名 ...
- CentOS安装C函数库的man帮助
安装linux可能没有安装C的man帮助, 像我安装时选择的是最小化安装就没有, 网上的大多是ubunu的安装方式,或者是C++的man帮助, 都不适合,那么CentOS安装C man手册的方法就是: ...
- Simple Chat Application for Python
一.知识点介绍: asyncore .asynchat模块使用 由于 Python 是一门带 GIL 的语言,所以在 Python 中使用多线程处理IO操作过多的任务并不是很好的选择.同时聊天服务器将 ...
- 一些SpringBoot的初步理解
SpringBoot SpringBoot作为近几年很火的微服务框架,只需要简单的几个依赖,少量的配置,就可以使用它快速搭建一个轻量级的微服务,优点是简单.快速.大道至简,缺点是真的太单一,不适于项目 ...