指令概述
要计算机服从指挥,就必须用计算机的语言,计算机语言中的基本单词称为指令。
指令也称机器指令、指令字,其实质是二进制序列代码,是计算机中一种控制元件执行动作的命令。
计算机可以执行的所有指令的集合称为指令集。
指令集由指令集体系结构(Instruction Set Architecture, ISA),简称体系结构(Architecture)来定义,ISA
是硬件和底层软件之间的接口。
CPU、微架构、芯片、指令集的关系
CPU 的基本组成单元是核心,多个核心可以同时执行多个运算任务。核心的实现方式被称为微架构,单个(或多个)物理核心组装成CPU 芯片
指令集是语言,一种规范,微架构是指令集的物理实现方式,是实实在在的硬件结构。
指令集分类
指令集分为 RISC
(精简指令集)和 CISC
(复杂指令集)两大类:
对比 | RISC | CISC |
---|---|---|
本质 | 指令格式统一、种类少 | 指令格式不统一,种类多 |
完成复杂工作 | 通过组合多个简单指令来完成 | 一个或数个复杂指令即可完成 |
编译工作 | 多 | 少 |
优势 | 在功耗、体积、价格等方面有很大优势 | 在处理能力上有优势 |
主要应用领域 | 多用于嵌入式领域、便携设备、智能手机、平板电脑等 | 多用于 PC 和服务器 |
常见的指令集 ARM
和 MIPS
属于精简指令集,X86
属于复杂指令集。
像智能手机领域的高通晓龙和华为麒麟采用的是 ARM
系列的指令集,而 PC 领域的 Intel 和 AMD 采用的则是 X86
系列的指令集。这里之所以用系列,是因为每一种指令集都在不断的升级中,会发展出多种不同的版本,这些版本之间一般会向前兼容。而 MIPS
指令集作为精简指令集中的元老,曾经连竞争对手都不得不承认它的优雅,被作为教科书的典范,在打印机、高清盒子等小众产品市场取得过辉煌成绩,但由于缺乏商业敏感,在移动通信时代,终于被 ARM
敲响了“丧钟” 。无人再提MIPS
随着技术进步,指令集对微架构的影响已经小到可以忽略,任何指令集都可以做出适合不同领域的优秀微架构来,因此 ARM
阵营开始进入 PC 、服务器等高性能计算领域,而 X86
也开始进入智能手机领域。
X86 architecture
,英文原意是X86 体系结构
,其定义的指令集叫X86 指令集
,很多地方译做X86 架构
,注意这与微架构不是一个范畴的概念。
指令
指令由操作码和地址码组成。
操作码
操作码即表示指令的操作特性和功能,例如加、减、存、取等操作。
操作码的字段位数一般受到计算机指令系统的约束,一般 8 条指令的指令系统,3 位操作码则足够;32 条指令的指令系统,则需要 5 位操作码。
地址码
地址码通常指定参与操作的操作数的地址,即在存储单元中的位置。
根据一条指令中有几个操作数地址,可将该指令称为几地址指令,一般由三地址指令、二地址指令、一地址指令和零地址指令
操作数有以下几种:
寄存器操作数-操作数地址在寄存器中
寄存器数量有限,只能存储有限的数据。
存储器操作数-操作数地址在存储器中
复杂数据结构如数组、结构体等包含大量数据元素,不可能映射到数量有限的寄存器中,只能存储到存储器。需要使用时通过数据传输指令从存储器取到寄存器中。
计算机中的基本访问单位称为字,通常 32 位为一组。
MIPS
以字节编址,每个“字”占 4 字节,所以连续的字地址相差 4。立即数
部分指令中可以使用常数数据,这样的常数叫立即数,指令叫立即数指令
MIPS 汇编语言
汇编语言是以助记符形式表示的计算机指令,一条机器指令对应一条汇编指令
汇编指令的分类
算术运算
算术运算的操作数必须来自存储器
数据传输
数据传输指令在寄存器和内存中传输数据
逻辑操作指令
决策指令
算术运算指令
算术运算指令的操作数必须来自寄存器。
以加法指令为例
add rd, rs, rt #注释
该指令执行
rd = rs + rt
的操作每条指令有且只有三个操作数,以存储操作数的寄存器来表示
add 称操作符
rd 是存储目的操作数的寄存器
rs 和 rt 是存储源操作数的寄存器
数据传输指令
以取字指令为例
lw rt, offset(rs) #注释
rt 是存储目的操作数的寄存器
rs 是存储数组首地址的寄存器,称为基地址寄存器
offset 是偏移量,是数组首地址到数组中某元素的存储位置的字节偏移量,是一个常数,例如数组下标为 8 ,则 offset 为 8 * 4 = 32