MIPS®架构介绍II-A:MIPS32®指令集手册

本文翻译自MIPS® Architecture for Programmers Volume II-A: The MIPS32® Instruction Set Manual

第一章 关于本书

《MIPS32®指令集手册》是系列文档中的一本,系列包括:

  • 卷I-A:描述了文档中的一些约定,并对MIPS32®架构进行了介绍
  • 卷I-B:描述了文档中的一些约定,并对microMIPS™架构进行了介绍
  • 卷II-A:对MIPS32®指令集中的每一条指令进行了详尽的描述
  • 卷II-B:对microMIPS™指令集中的每一条指令进行了详尽的描述
  • 卷III:描述了MIPS32®和microMIPS™的特权资源架构,其中定义了MIPS®处理器实现中特权资源应有的行为
  • 卷IV-a:描述了MIPS32®架构中的MIPS16e™扩展。从架构的Release 3开始,microMIPS就是在需要代码较短时的推荐解决方案。Release 6移除了MIPS16e:MIPS16e不能在Release 6中实现。
  • 卷IV-b:描述了MIPS64®和microMIPS64™架构中的MDMX™ 扩展。这一扩展不适用于MIPS32®和microMIPS32™文档集。在架构的Release 5中,MDMX被废弃了。MDMX和MSA不能同时实现。Release 6移除了MDMX;MDMX不能在Release 6中实现。
  • 卷IV-c:描述了MIPS®架构中的MIPS-3D®扩展。Release 6移除了MIPS-3D;MIPS-3D不能在Release 6中实现。
  • 卷IV-d:描述了MIPS32®和microMIPS32™架构中的SmartMIPS®扩展。Release 6移除了SmartMIPS:SmartMIPS不能在Release 6中实现,包括MIPS32 Release 6和MIPS64 Release 6、
  • 卷IV-e:描述了MIPS®架构中的MIPS® DSP模块。
  • 卷IV-f:描述了MIPS®架构中的MIPS® MT模块。
  • 卷IV-h:描述了MIPS®架构中的MIPS® MCU扩展。
  • 卷IV-i:描述了MIPS®架构中的MIPS®虚拟化模块。
  • 卷IV-j:描述了MIPS®架构中的MIPS® SIMD架构模块。

1.1 排版规则说明

本节说明了本书中对斜体粗体

代码块

的使用。

1.1.1 斜体

  • 用于强调
  • 用于从软件角度来说比较重要的寄存器(比如软件使用的地址位、可编程域和寄存器),以及很多浮点数指令格式,比如SD
  • 用于内存访问类型,比如缓存未缓存

1.1.2 粗体

  • 用于被定义的术语
  • 用于从硬件角度来说比较重要的(比如寄存器位,无法编程,只能通过硬件访问)
  • 用于数字区间;区间用省略号来表示。比如,5..1表示从5到1的整数
  • 用于强调UNPREDICTABLEUNDEFINED行为,下面会定义这两种行为

1.1.3 代码块

代码块用于展示在屏幕上出现的文字,代码例子和指令伪代码。

1.2 UNPREDICTABLE与UNDEFINED

术语UNPREDICTABLEUNDEFINED在本书中用于描述处理器在特定情况下的表现。UNDEFINED行为或操作只会在优先模式下执行指令时出现(比如在核心态或调试态,或在状态寄存器中CP0可用位被置位时)。不处在优先模式下的软件永远不会导致UNDEFINED的行为或操作。相反地,无论软件是否处在有限模式下,都可能导致*UNPREDICTABLE**结果或操作。

1.2.1 UNPREDICTABLE

UNPREDICTABLE的执行结果会随处理器实现的不同而不同,不同指令的结果不同,同一处理器和实现的执行结果也可能会随时间变化。软件不应依赖于UNPREDICTABLE的执行结果。UNPREDICTABLE操作可能会得到执行结果,也可能不会。

UNPREDICTABLE的执行结果或操作有一些实现限制:

  • 产生UNPREDICTABLE结果的操作的实现不得依赖任何在当前处理器模式下无法访问的数据源(内存或内部状态)
  • UNPREDICTABLE操作不得读、写或修改任何在当前处理器模式下无法访问的内存数据或内部状态。比如,用户态下执行的UNPREDICTABLE操作不得访问其他进程或核心态和调试态下才能访问的内存或内部状态
  • UNPREDICTABLE操作不得暂停或挂起(即进入处理器除了断电外无法退出的状态)处理器

1.2.2 UNDEFINED

UNDEFINED的操作或行为会随处理器实现的不同而不同,不同指令的结果不同,同一处理器和实现的执行结果也可能会随时间变化。UNDEFINED的操作或行为可能包括多种,从没有任何行为到创造一个无法再执行任何指令的环境。UNDEFINED的操作和行为可能导致数据丢失。

UNDEFINED的操作或行为有一个实现限制:

  • UNDEFINED的操作或行为不得导致处理器挂起

1.2.3 UNSTABLE

UNSTABLE的结果和值可能会随时间变化。和UNPREDICTABLE的值不同,软件可以依靠之一事实:对UNSTABLE的值的取样会得到一个瞬时值,它在取样之前的某些时间点是正确的。

UNSTABLE的值有一个实现限制:

  • 导致UNSTABLE结果的操作的实现不得依赖任何在当前处理器模式下无法访问的数据源(内存或内部状态)

1.3 伪代码表示中的特殊符号

在本书中,对操作的算法描述使用的是一种类似于Pascal的高级语言伪代码。表1.1中列出了伪代码表示中使用的特殊符号。

表1.1 指令操作语句中使用的符号

header header
xy..z 从位串x中选出第y位到第z位,使用小端表示(最右一位为0)。如果y<=z,则这一表达式表示一个空位串。
x.bit[y] 位串x的第y位。与传统MIPS表达式xy含义相同。
x.bits[y..z] 从位串x中选出第y位到第z位。与传统MIPS表达式xy}含义相同。
x.byte[y] 位串x的第y个字节。与传统MIPS表达式{{x8*y+7 .. 8*y
x.bytes[y..z] 位串x的第y个字节。与传统MIPS表达式x8*y+7 .. 8*z含义相同。
x.word[i]
x.doubleword[i]}} || 从位串中选出半字、字或双字,规则与选择字节类似。 ||
x.bit31, x.byte0, … x.bit[y]的缩写形式的例子,y为常数。
cell-content cell-content
cell-content cell-content
cell-content cell-content
cell-content cell-content
cell-content cell-content
cell-content cell-content
cell-content cell-content
cell-content cell-content
cell-content cell-content
cell-content cell-content
cell-content cell-content
cell-content cell-content

第二章 指令集指南

第三章 MIPS32®指令集

附录A 指令编码

附录B 版本历史


新增一则回应

除非特别注明,本页内容采用以下授权方式: Creative Commons Attribution-ShareAlike 3.0 License