1-1-指令概述

指令集(Instruction Set):一个给定的计算机体系结构所包含的指令集合。

不同的CPU所支持的指令集不同,流行的指令集有:ARMv7、Intel x86、ARMv8、MIPS等。
高级语言编写的程序被编译成汇编代码,汇编器将汇编代码编译成机器语言代码(即计算机指令)存储在存储器中,运行时,CPU将程序装载进内存,一条条的依次执行。

程序从高级语言代码到机器语言代码

常见的指令分类

操作数

寄存器

MIPS中寄存器,受指令格式位数(5位,共 252^5个)的限制,只有 3232 个。

MIPS x86
名称 寄存器编号 说明 过程调用时必须保存 操作数 说明
\$zero 0 寄存器0,其值恒为0 --
\$at 1 汇编器保留 --
\$v0 - \$v1 2-3 过程调用时,用于返回值的2个寄存器
\$a0 - \$a3 4-7 过程调用时,用于传递参数的4个寄存器
\$t0 - \$t7 主要用于编译时临时所需
\$s0 - \$s7 16-23 保存的寄存器
\$t8 - \$t9 24-25 更多临时变量
\$k0 - \$k1 26-27 操作系统保留 --
\$gp 28 全局指针
\$sp 29 栈指针
\$fp 30 帧指针
\$ra 31 过程调用时,用于返回起始点的返回地址寄存器

存储器

存储器只能通过数据传输指令访问。

MIPS x86
操作数 说明 操作数 说明
m[0]、m[4]... MIPS通过字节编址,所以连续的字地址相差4 操作数 说明

对齐限制

MIPS 采用 大端 编址,按字节编址,字的起始地址必须是 44 的倍数。

指令格式

指令的布局形式叫做指令格式

MIPS指令格式

MIPS指令格式占 32 位,与字长相同。不同类型的指令采用不同的指令格式。虽然多种指令格式使硬件变得复杂,但是保持指令的类似性,可以降低复杂度。

R型指令结构(适用于寄存器)

I型指令结构(适用于立即数或基址寻址操作)

16位的地址字段,意味着取字指令可以取相对于基址寄存器地址偏移 2152^{15}3276832 7682132^{13})个字节或 81928192 个字范围内的任意数据字。

J型指令结构(适用于地址跳转)

寻址模式

寻址模式是指:根据对操作数或地址的使用不同加以区分的多种寻址方式中的一种。

立即数寻址

立即数寻址(Immediate Addressing),操作数是位于指令自身中的常数。

MIPS中的立即数寻址

寄存器寻址

寄存器寻址(Register Addressing),操作数是寄存器。

基址寻址

基址寻址(Base Addressing)又称偏移寻址(Displacement Addressing),操作数在内存中,其地址是指令中基址寄存器和常数的和。

此种寻址方式非常适合存储数组和结构,基址存储器指向变量的首地址,偏移量用于指定对应的元素下标。

PC相对寻址

PC相对寻址(PC-relative Addressing),地址是PC和指令中常数的和。

伪直接寻址

伪直接寻址(Pseudodirect Addressing),跳转地址是指令中26位字段和PC高位相连。