1. M0

    Introdução e ambiente

    Por que um emulador é o melhor laboratório de arquitetura, e como montar a bancada.

    1. M0.1Por que emular ARM (e por que isso ensina arquitetura)O ecossistema arm-jitter + armbox + gbaemu/ndsemu/n3dsemu + virtual-arm-box.ler →
    2. M0.2Setup do ambiente ARMJDK 25, Maven, toolchain arm-none-eabi e os repositórios.ler →
    3. M0.3Convenções de assembly da trilhaUnified Assembler Language, GAS e como os listings aparecem aqui.ler →
  2. M1

    Fundamentos da arquitetura

    Registradores, CPSR, ARM vs Thumb, anatomia da instrução e o ciclo de execução.

    1. M1.0Fundamentos da arquitetura ARMPanorama: banco de registradores, modos, conjunto de instruções e endereçamento.ler →
    2. M1.1Registradores e CPSR: banking, modos e SPSRR0–R15, flags N/Z/C/V, modos de CPU e register banking.ler →
    3. M1.2Thumb e Thumb-2: instruções de 16/32 bitsDensidade de código, troca de estado com BX/BLX e o bit 0 do PC.ler →
    4. M1.3Anatomia de uma instrução ARMFormato {cond}{S}, Operand2, barrel shifter e addressing modes.ler →
    5. M1.4Fetch–decode–execute e o ArmCore.step()O que um núcleo faz por instrução, mapeado para o código real.ler →
  3. M2

    Lendo o binário

    Do C ao ELF, decodificação manual de ARM e Thumb, e o decoder do arm-jitter.

    1. M2.1Do C ao binário ARM: gcc + objdumpCompilando, lendo a desmontagem e entendendo seções e símbolos.ler →
    2. M2.2Decodificando instruções ARM à mão com o objdumpcond | opcode | S | Rn | Rd | Operand2 — bit a bit.ler →
    3. M2.3Decodificando Thumb à mãoOs formatos de 16 bits, imediatos e deslocamentos.ler →
    4. M2.4Flags e desvios condicionais: N/Z/C/VComo o CPSR é formado e por que o bge do laço funciona.ler →
    5. M2.5Como o decoder do arm-jitter funcionabytes → DecodedInstruction → IR, e por que existe um otimizador.ler →
  4. M3

    Criando e rodando programas

    Seu assembly, montado, ligado e executando no arm-box e via API Java.

    1. M3.1Primeiro programa em assembly ARMFibonacci e máximo de dois números; retorno com BX lr.ler →
    2. M3.1aCarga e armazenamento: LDR, STR e seu primeiro laçoLer e escrever memória, montar um laço com CMP/BNE, somar um vetor.ler →
    3. M3.1bSub-rotinas em ARM: BL/BX, pilha e convenção de chamadaBL salva o retorno em LR, PUSH/POP preserva registradores, a AAPCS.ler →
    4. M3.2Montando e ligando um executável ARMas + ld (ou gcc), linker script, mapa de memória e vetor de reset.ler →
    5. M3.3Criando um executável ARM e rodando no arm-boxHello world em assembly → ELF real → arm-box.ler →
    6. M3.5Depurando ARM com GDB no arm-boxStub GDB remoto: breakpoints, watchpoints, step e continue.ler →
  5. M4

    Por dentro de um emulador

    Core, memória/MMIO, IR e backends, performance, exceções e interrupções.

  6. M5

    Evolução da arquitetura

    A linha do tempo do ARMv4T (GBA) ao AArch64, seguindo os emuladores da coleção.

    1. M5.4aInstruções condicionais em Thumb: IT blocksDe "quase tudo é condicional" no ARM aos IT blocks do Thumb-2.ler →
    2. M5.4bManipulação de bits em Thumb: AND, ORR, EOR, BIC, BFIO kit de ferramentas do embedded para setar, limpar e alternar bits.ler →
  7. M6

    Estudos de caso por console

    Onde o núcleo ARM aparece no boot de cada máquina emulada da coleção.

  8. M7

    Tópicos avançados

    Extensões que podem ser lidas em qualquer ordem depois do M4.

Exemplos de código

Os fontes de assembly usados nos artigos, montados e testados com o arm-none-eabi e rodados no arm-box. Cada .s tem o .elf pré-montado no mesmo diretório.

  • cpsr.sM1.1Lê o CPSR em três momentos — N e Z mudando.
  • anat.sM1.3Dez instruções para ver a codificação no objdump.
  • pcoffset.sM1.4Prova que R15 lê como "instrução + 8".
  • soma.cM2.1Soma de 1 a n — compilada em -O0 e -O2.
  • thumb1.sM2.3Laço Thumb de 16 bits para decodificar à mão.
  • fib.sM3.1Fibonacci iterativo; retorno via exit code.
  • max.sM3.1Máximo de dois números sem um único desvio.
  • user.ldM3.2Linker script mínimo para os exemplos user-mode.
  • soma5.sM3.2Soma de vetor; ligado com user.ld, extraído com objcopy.
  • java/TraceSoma.javaM3.4Embute o arm-jitter e traça o laço instrução a instrução.
  • svc.sM4.1Duas instruções que disparam uma exceção SWI.
  • java/ExcecaoSwi.javaM4.1Mostra a entrada no vetor 0x08: troca de modo, SPSR, LR.
  • isa-v5te.sM5.2Instruções novas do ARMv5TE (CLZ, BLX, DSP).
  • isa-v6k.sM5.3ARMv6K: LDREX/STREX, SIMD paralelo, REV, SETEND.
  • isa-thumb2.sM5.4Thumb-2: MOVW/MOVT, IT block, formas .W.
  • isa-v7a-vfp.sM5.5ARMv7-A + VFPv2: bitfield, SDIV, RBIT, VADD.F64.
  • hello-cortexm.cM5.6Firmware bare-metal Cortex-M com tabela de vetores.
  • ldrex.sM7.2Incremento atômico com LDREX/STREX e retry.