http://www.ic.unicamp.br/~celio/mc404-2012/armexemplos/Readme.html
Ordem sugerida para leitura/teste dos exemplos:
1. hello.s - o programa clássico "Hello World!"
2. hellothumb.s - versão com código thumb do "Hello World!"
3. subr.s - exemplo com subrotinas
3.1 powerof2.s - verifica se inteiro é uma potencia de 2
4. copystr.s - copia cadeia de caracteres usando indexação
5. wordcopy.s - copia palavras de 32 bits usando indexação
6. ex1.s - exemplo de leitura de numeros pelo teclado via função scanf
7. blockcopy.s - copia blocos de palavras
8. jumtbl.s - exemplo de uma tabela de saltos para subrotinas
9. div10.s - divide inteiro de 32 bits sem sinal por 10 via multiplicação e shifts:
- "constante mágica" obtida do código gerado por gcc da versão em C (tdiv.c)
10. udiv10.s - variante de div10.s usando constante mágica obtida no manual
- "ARM Programming Techniques" p 5-12 - obtem quociente e resto
11. div.s - divisão (via subtrações sucessivas) de inteiros sem sinal de 31 bits em tempo
- logaritmico: explora o recurso de "execução condicional" do ARM
12. ndiv.s - versão melhorada de div.s: divide inteiros sem sinal de 32 bits,
- usa a instrução CLZ para cortar pela metade as iterações de div.s
13. strcopy-a.s e copy.s - exemplo de uso de módulos compilados separadamente
14. tdiv.c - teste para obter via gcc a "constante mágica" para dividir por 10
15. tdiv.lst - codigo assembler gerado pela compilação de tdiv.c:
- gcc -c -g -Wa,-a,-ad tdiv.c > tdiv.lst
16. div.c - do manual citado em 10, gera o código em assembler para divisão de
- inteiros via somas, subtrações e shifts quando o divisor é do tipo 2**n +- 2**m