Objetivos
Memória
A arquitetura armv4 define que um espaço endereçado de 4GB esteja disponível para a execução de
programas. Abaixo, um exemplo de uso da memória:
Tab. 1: Uso de memória
| Memória |
Uso |
| 0x00000000 |
Código |
| 0x10000000 |
Dados |
| 0x20000000 |
Vídeo |
| 0x30000000 |
Áudio |
| 0x40000000 |
Entrada e Saída |
O mapeamento da memória fica a ser definido pelo hardware que utiliza o processador baseado em ARM. Não há
nenhum mapeamento ou área reservada, exceto o vetor de interrupções(Hard Vectors) quando seguida a
implementação padrão predefinida.
Abaixo um exemplo de mapeamento memória real de hardware que utiliza um processador ARMv7TDMI:
Tab. 4: Exemplo de mapeamento
| Ínicio |
Fim |
Uso |
| 0x00000000 |
00003FFF |
BIOS |
| 0x00004000 |
01FFFFFF |
- |
| 0x02000000 |
0203FFFF |
WRAM |
| 0x02040000 |
02FFFFFF |
- |
| 0x03000000 |
03007FFF |
WRAM |
| 0x03008000 |
03007FFF |
- |
| 0x04000000 |
040003FE |
I/O |
| 0x04000400 |
04FFFFFF |
- |
O uso, definição do mapeamento é de total responsabilidade do hardware que utiliza o processsador ARM
como processador principal ou secundário.
Por padrão, um processador ARM lê dados armazenados em memória na ordem Little-endian. Isso significa que
os bytes menos significativos são armazenados primeiro, seguidos dos mais significativos.
O valor 0xAABBCCDD, em Little-endian, ficará armazenado em memória com seus bytes na ordem 0xDDCCBBAA.
Dependendo da implementação do processador, o formato big-endian pode ser utilizado.
O mesmo vale para valores Halfword que tem seus bytes armazenados, obviamente, da mesma forma. Um valor
0xAABB é armazenado em memória como 0xBBAA.
Tab. 3: Dados Halfword e Word em memória
| Endereço |
00 |
01 |
02 |
03 |
(...) |
0C |
0D |
0E |
0F |
| 00000000 |
DD |
CC |
BB |
AA |
(...) |
-- |
-- |
-- |
-- |
| 00000010 |
BB |
AA |
-- |
-- |
(...) |
-- |
-- |
-- |
-- |
Por questões de performance, o acesso a dados, tanto na leitura quanto na escrita na arquitetura ARM
devem acontecer em endereços de memória alinhados. Valores Halfword devem estar alinhados em endereços
múltiplos de 2 e valores Word devem estar alinhados em endereços múltiplos de 4. Não há restrição
para o tipo de dado Byte.
Tab. 3: Dados Halfword e Word em memória
| Endereço |
00 |
01 |
02 |
03 |
(...) |
0C |
0D |
0E |
0F |
| FA000000 |
Byte0 |
Byte1 |
|
|
(...) |
-- |
-- |
-- |
-- |
| FB000000 |
-- |
-- |
Halfword |
(...) |
-- |
-- |
-- |
-- |
| FF000000 |
Word |
(...) |
-- |
-- |
-- |
-- |
Na tabela acima, temos Byte0 e Byte1 em endereços pares e ímpares, uma halfword em um endereço par
alinhado em 2 bytes e uma word com endereço par alinhado em 4 bytes.
O suporte a acesso a dados em endereços não alinhados para valores Halfword e Word
está disponível apenas nas arquiteturas v7+.
O assunto registrador mapeado em memória será visto em
Entrada e Saída.
Registrador mapeado em memória
ARM possuir instruções de Entrada e Saída de Dados(E/S) para comunicaçao
via portas lógicas. Isso é possível utilizar regiões da memória como registradores de E/S.
Tab. 5: Registrador mapeado em memória
| Endereço |
Descrição |
| 04000000h |
Config. Vídeo |
| 04000200h |
Controle de interrupção |
| 040000B0h |
Controle de DMA |
Um chip específico deve ser utilizado para mapear endereços de memória como registradores para
gerenciar o funcionamento semelhante ao uso de portas como em 8086.
Com esse tipo de registrador, as instruções de movimentação, load e store devem ser utilizadas.
Mesmo contendo 4GB de memória acessível, um processador ARM pode, dependendo do hardware,
utilizar bancos de memória para expandir sua memória utilizando bancos.
Essas bancos podem ser utilizados para carregar o kernel, sistema operacional e programas
do usuário.
Abaixo, um exemplo de bancos de memória utilizando o um processador ARM para armazenar
bancos de programção:
Tab. 6: Bancos de memória
| Região |
Tamanho |
Descrição |
|
| 08000000-09FFFFFF |
32MB |
ROM 0 |
| 0A000000-0BFFFFFF |
32MB |
ROM 1 |
| 0C000000-0DFFFFFF |
32MB |
ROM 2 |
O uso, definição de endereço e outras configurações é de total responsabilidade do hardware que utiliza o
como processador principal. O 8086 não possui nenhum mapeamento de banco nativo tendo apenas a
segmentação de memória definida.
Histórico de atualizações
- 22/04/2026 - revisão 1 - Ajustes: 'objetivos' e 'alinhamento'; Adição: banco de memória e registrador mapeado.
- 27/01/2025 - versão inicial
Os cursos oferecidos nesta página são cursos fornecidos por parceiros. Ao comprar um curso clicando
em seu banner, você está ajudando a manter o projeto TutorialDev vivo. Os sites dos cursos parceiros utilizam cookies.