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 8086 como processador
principal. O 8086 possui apenas a segmentação que deve ser levada em consideração.
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 ser 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.
Histórico de atualizações
- 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.