int gcd (int i, int j) { while (i != j) if (i > j) i -= j; else j -= i; return i; }
在ARM 组合语言中,循环为:
loop CMP Ri, Rj ; 設定條件為 "NE"(不等於) if (i != j) ; "GT"(大於) if (i > j), ; or "LT"(小於) if (i < j) SUBGT Ri, Ri, Rj ; 若 "GT"(大於), i = i-j; SUBLT Rj, Rj, Ri ; 若 "LT"(小於), j = j-i; BNE loop ; 若 "NE"(不等於),則繼續迴圈
这避开了<code>then</code>和<code>else</code>子句之间的分支。 另一项指令集的特色是,能将位移(shift)和回转(rotate)等功能并成"资料处理"型的指令(算数、逻辑、和暂存器之间的搬移),因此举例来说,一个C语言的叙述 <dl> <dd><code>a += (j << 2);</code></dd> </dl> 在ARM之下,可简化成只需一个word和一个cycle即可完成的指令 <dl> <dd><code>ADD Ra, Ra, Rj, LSL #2</code></dd> </dl> 这结果可让一般的ARM程式变得更加紧密,而不需经常使用内存存取,管线也可以更有效地使用。即使在ARM以一般认定为慢速的速度下执行,与更复杂的CPU设计相比它仍能执行得不错。 ARM处理器还有一些在其他RISC的架构所不常见到的特色,例如PC-相对寻址(的确在ARM上PC为16个暂存器的其中一个)以及 前递加或后递加的寻址模式。 另外一些注意事项是 ARM 处理器会随着时间,不断地增加它的指令集。某些早期的 ARM 处理器(比ARM7TDMI更早),譬如可能并未具备指令可以读取两 Bytes 的数量,因此,严格来讲,对这些处理器产生程式码时,就不可能处理如 C 语言物件中使用 "volatile short" 的资料型态。 ARM7 和大多数较早的设计具备三阶段的管线化(Pipeline):提取指令、解码,并执行。较高效能的设计,如 ARM9,则有五阶段的管线化。提高效能的额外方式,包含一颗较快的加法器,和更广的分支预测逻辑线路。 这个架构使用“协处理器”提供一种非侵入式的方法来延伸指令集,可透过软件下 MCR、MRC、MRRC和MCRR 等指令来对协处理器寻址。协处理器空间逻辑上通常分成16个协处理器,编号分别从 0 至 15 ,而第15号协处理器(CP15)是保留用作某些常用的控制功能,像是使用快取和记忆管理单元运算(若包含于处理器时)。 在 ARM 架构的机器中,周边装置连接处理器的方式,通常透过将装置的实体暂存器对应到 ARM 的内存空间、协处理器空间,或是连接到另外依序接上处理器的装置(如总线)。协处理器的存取延迟较低,所以有些周边装置(例如 XScale 中断控制器)会设计成可透过不同方式存取(透过内存和协处理器)。
&#39;&#39;&#39;&#39;Thumb&#39;&#39;&#39;&#39; 较新的ARM处理器有一种16-bit指令模式,叫做Thumb,也许跟每个条件式执行指令均耗用4位元的情形有关。在Thumb模式下,较小的opcode有更少的功能性。例如,只有分支可以是条件式的,且许多opcode无法存取所有CPU的暂存器。然而,较短的opcode提供整体更佳的编码密度(注:意指程式码在内存中占的空间),即使有些运算需要更多的指令。特别在内存埠或总线宽度限制在32 以下的情形时,更短的Thumb opcode能更有效地使用有限的内存带宽,因而提供比32位元程式码更佳的效能。典型的嵌入式硬件仅具有较小的32-bit datapath寻址范围以及其他更窄的16 bits寻址(例如Game Boy Advance)。在这种情形下,通常可行的方案是编译成 Thumb 程式码,并自行最佳化一些使用(非Thumb)32位元指令集的CPU相关程式区,因而能将它们置入受限的32-bit总线宽度的内存中。 首颗具备 Thumb 技术的处理器是 ARM7TDMI。所有 ARM9 和后来的家族,包括 XScale 都纳入了 Thumb 技术。
Jazelle ARM 还开发出一项技术,Jazelle DBX (Direct Bytecode eXecution),允许它们在某些架构的硬件上加速执行Java bytecode,就如其他执行模式般,当呼叫一些无法支援bytecodes的特殊软件时,能提供某些bytecodes的加速执行。它能在现存的ARM与Thumb模式之间互相执行。 首颗具备Jazelle技术的处理器是ARM926EJ-S:Jazelle以一个英文字母&#39;&#39;&#39;&#39;J&#39;&#39;&#39;&#39;标示于CPU名称中。它用来让手机制造商能够加速执行Java ME的游戏和应用程式,也因此促使了这项技术不断地发展。
Thumb-2 Thumb-2 技术首见于 ARM1156 核心 ,并于2003年发表。Thumb-2 扩充了受限的 16-bit Thumb 指令集,以额外的 32-bit 指令让指令集的使用更广泛。因此 Thumb-2 的预期目标是要达到近乎 Thumb 的编码密度,但能表现出近乎 ARM 指令集在 32-bit 内存下的效能。 Thumb-2 至今也从 ARM 和 Thumb 指令集中衍伸出多种指令,包含位元栏(bit-field)操作、分支建表(table branches),和条件执行等功能。
ARM 公司本身并不靠自有的设计来制造或贩售 CPU 装置,反而是将处理器架构授权给有兴趣的厂家。ARM 提供了多样的授权条款,包括售价与散播性等项目。对于授权方来说,ARM 提供了 ARM 内核的整合硬件叙述,包含完整的软件开发工具(编译器、debugger、SDK),以及针对内含 ARM CPU 硅芯片的销售权。对于无晶圆厂的授权方来说,其希望能将 ARM 内核整合到他们自行研发的芯片设计中,,通常就仅针对取得一份生产就绪的智财核心技术(IP Core)认证。对这些客户来说,ARM 会释出所选的 ARM 核心的闸极电路图,连同抽象模拟模型和测试程式,以协助设计整合和验证。需求更多的客户,包括整合元件制造商(IDM)和晶圆厂家,就选择可合成的RTL(暂存器转移层级,如 Verilog)形式来取得处理器的智财权(IP)。借着可整合的 RTL,客户就有能力能进行架构上的最佳化与加强。这个方式能让设计者完成额外的设计目标(如高震荡频率、低能量耗损、指令集延伸等)而不会受限于无法更动的电路图。虽然 ARM 并不授予授权方再次贩售 ARM 架构本身,但授权方可以任意地贩售制品(如芯片元件、评估板、完整系统等)。商用晶圆厂是特殊例子,因为他们不仅授予能贩售包含 ARM 内核的硅晶成品,对其它客户来讲,他们通常也保留重制 ARM 内核的权利。 就像大多数 IP 贩售方, ARM 依照使用价值来决定 IP 的售价。在架构上而言,较低效能的 ARM 内核比较高效能的内核拥有较低的授权费。以硅芯片实作而言,一颗可整合的内核要比一颗硬件宏(黑箱)内核要来得贵。更复杂的价位问题来讲,持有 ARM 授权的商用晶圆厂(例如韩国三星和日本富士通)可以提供更低的授权价格给他们的晶圆厂客户。透过晶圆厂自有的设计技术,客户可以更低或是免费的ARM预付授权费来取得 ARM 内核。相较于不具备自有设计技术的专门半导体晶圆厂(如台积电和联电),富士通/三星对每片晶圆多收取了两至三倍的费用。对中少量的应用而言,具备设计部门的晶圆厂提供较低的整体价格(透过授权费用的补助)。对于量产而言,由于长期的成本缩减可借由更低的晶圆价格,减少ARM的NRE成本,使得专门的晶圆厂也成了一个更好的选择。 许多半导体公司持有 ARM 授权:Atmel、Broadcom、Cirrus Logic、Freescale(于2004从摩托罗拉公司独立出来)、富士通、英特尔(借由和迪吉多的控诉调停)、IBM, 英飞凌科技, 任天堂, 恩智浦半导体(于2006年从飞利浦独立出来)、OKI电气工业, 三星电子, Sharp, STMicroelectronics, 德州仪器 和 VLSI等许多这些公司均拥有各个不同形式的ARM授权。虽然ARM的授权项目由保密合约所涵盖,在智慧财产权工业,ARM是广为人知最昂贵的CPU内核之一。单一的客户产品包含一个基本的 ARM 内核可能就需索取一次高达美金20万的授权费用。而若是牵涉到大量架构上修改,则费用就可能超过千万美元。