Читал тут документацию по ARM-процессорам, в качестве примера там был такой код:
обычный ассемблер, возьмем, к примеру x86
; eax, ebx - два целых числа, для которых ищем наибольший общий делитель gcd: cmp eax,ebx ; сравниваем числа jz stop ; если они равны, то заканчиваем поиск, переходим на метку stop jl less ; если eax < ebx, переходим на метку less sub eax,ebx ; eax = eax - ebx jmp gcd ; продолжаем поиск less: sub ebx,eax ; ebx = ebx - eax jmp gcd ; продолжаем поиск stop:
а вот реализация этого же алгоритма на ARMе:
; r0, r1 - два целых числа, для которых ищем наибольший общий делитель gcd: cmp r0,r1 ; сравниваем r0 и r1 subgt r0,r0,r1 ; если r0 > r1, то r0 = r0 - r1 sublt r1,r1,r0 ; если r0 < r1, то r1 = r1 - r0 bne gcd ; если r0 != r1, то продолжаем поиск
ARM вообще интересная штука и фичи довольно вкусные, вот часть из них:
- Все инструкции 32-битные
- Большинство инструкций исполняется за 1 цикл
- Каждая инструкция может быть исполнена по условию
P.S.
вот вам код на PHP:
function gcd($a, $b) { while ($a != $b) if ($a>$b) $a -= $b; else $b -= $a; return $a; }