ARM与MIPS的详细对比
版本：v1.2
Crifan Li
摘要
此文主要介绍ARM和MIPS之间的区别和联系,包括ARM的Thumb,MIPS的MIPS16e ASE
本文提供多种格式供：

HTML版本的在线地址为：
http://​www.crifan.com/​files/​doc/​docbook/​arm_​vs_​mips/​release/​html/​arm_​vs_​mips.html
有任何意见，建议，提交bug等，都欢迎去讨论组发帖讨论：
http://​www.crifan.com/​bbs/​categories/​arm_​vs_​mips/
在线阅读	HTML  1	HTMLs  2	PDF  3	CHM  4	TXT  5	RTF  6	WEBHELP  7	
下载（7zip压缩包）	HTML  8	HTMLs  9	PDF  10	CHM  11	TXT  12	RTF  13	WEBHELP  14	
修订历史	
修订 1.2	2013-10-04	crl	
· 	通过Docbook发布
· 	更新xml:id
· 		
修订 1.0	2011-07-19	crl	
· 	详细对比了ARM和MIPS的区别
· 		
ARM与MIPS的详细对比:
Crifan Li
版本：v1.2
出版日期 2013-10-04
版权 © 2013 Crifan, http://​crifan.com

本文章遵从：署名-非商业性使用 2.5 中国大陆(CC BY-NC 2.5)15

目录
缩略词  	 # 
1. 在精简指令集以减小代码空间占用方面的对比  	 # 

1.1. ARM中的Thumb模式  	 # 

1.1.1. 软件检测CPU处于何种模式  	 # 
1.2. MIPS中的MIPS16e ASE  	 # 

1.2.1. MIPS16e ASE的优势和劣势  	 # 
1.2.2. 软件检测CPU处于何种模式  	 # 
1.2.3. MIPS16e ASE的一些细节特性  	 # 
参考书目  	 # 

插图清单
1.1. Config1(CP0 Register 16, Select 1)寄存器域值说明  	 # 

缩略词
Application Specific Extension
（根据应用的）专用扩展

第 1 章 在精简指令集以减小代码空间占用方面的对比

1.1. ARM中的Thumb模式
常见的ARM是32位的，其中有个Thumb模式，即16位模式。
在标准32位模式下，可以切换到Thumb模式下，这样的话，代码大小会压缩不少，以此提高空间利用率。
同样的代码，如果用Thumb模式的话，比用普通ARM模式的指令，代码大小最大可以减少大约40%。
程序可以通过对应的指令，在ARM和Thumb模式之间切换。

1.1.1. 软件检测CPU处于何种模式
软件可以通过检测CPSR寄存器中Thumb位，来判断当前是处于ARM模式还是Thumb模式。

1.2. MIPS中的MIPS16e ASE
对应的，MIPS中也有个类似的做法。
普通MIPS是32位的，当然也有MIPS64的。
MIPS中有个MIPS16e ASE ，其中ASE是Application Specific Extension，（根据应用的）专用扩展。
关于为何叫做ASE，我的理解是，MIPS16e ASE是针对MIPS32来说的，是对其一种扩展，是在，某些特定的应用（多为嵌入式应用）下减少代码大小，方面的扩展，因此，才叫做Specific Extension专用扩展。
MIPS16e ASE也常被简称为MIPS16e。
在MIPS16e ASE之前，有个MIPS16™，提供了一些额外的指令，用于提高代码的兼容性。而MIPS16e ASE，可以看作是MIPS16™的增强版。
相比MIPS32，利用MIPS16e编译的应用程序平均减小30%，最多可减少40%。
MIPS16e的指令集，兼容MIPS32 和 MIPS64的指令集。
程序也可以在MIPS16e 模式和MIPS 32位模式之间切换。

1.2.1. MIPS16e ASE的优势和劣势
用了MIPS16e ASE后，代码量减少，也相应的带来一个好处，还能提高指令缓存命中率(cache hit rate)，即降低了cache miss rate。
而由于缓存是个耗电大户，因此，相应地减少了功耗，实现省电，环保（有利于生态系统Ecosystem）的功效。
与优点相对应的缺点是，MIPS16e ASE比普通的MIPS32，增加了解码的复杂度，即解码时间相对增加了。
不过，拿MIPS16e ASE的劣质和优势相比，总体优势还是很明显的。
不过，貌似实际应用中用到MIPS16e ASE的不多。

1.2.2. 软件检测CPU处于何种模式
软件中可以通过检测MIPS16e ASE中的Config1 CP0寄存器的CA bit位来判断是否是处在MIPS16e ASE模式。

图 1.1. Config1(CP0 Register 16, Select 1)寄存器域值说明

1.2.3. MIPS16e ASE的一些细节特性
· 	MIPS16e指令为16位指令
· 	32个通用寄存器中有8个可用于MIPS16e模式；其中包括常用于变元传递(argument passing)和返回值的寄存器
· 	与MIPS32一起使用时，支持8位、16位和32位数据类型；与MIPS64一起使用时，支持8位、16位、32位和64位数据类型
· 	MIPS16e 和 MIPS32/64之间的模式切换允许特权架构/浮点/ASE支持；通过一条特殊的跳转指令来实现模式切换的软件控制
· 	EXTEND指令可让16位指令有效创建16位立即值(immediate value)
· 	SAVE/RESTORE指令可提高栈帧处理(stack frame handling)的代码密度
· 	PC相关寻址可提高创建导入/存储地址的代码密度
· 	某些指令采用隐型寄存器描述符(implied register specifier)来提高代码密度--用于导入/存储的堆栈指针或程序计数器；分配一个GPR(通用寄存器)来比较分支结果
· 	仍支持专用宏指令序列
· 	

参考书目
[1] MIPS16e架构1 
[2] MIPS16e®2 
[3] MIPS32™ Architecture for Programmers, Volume IV-a: The MIPS16e™ Application-Specific Extension to the MIPS32™ Architecture3 
[4] 关于MIPS16e指令集4 
[5] Wiki: MIPS5