2. Descreva o modelo do programador ARM em detalhes. [OU] Explique as várias operações.
explique os registradores visíveis em um processador ARM. [Abr’18]
O conjunto de instruções de um processador define as operações que o programador pode usar para
mude o estado do sistema incorporando o processador.
Este estado geralmente compreende os valores dos itens de dados visíveis no processador.
registros e a memória do sistema.
Cada instrução pode ser vista como a realização de uma transformação definida a partir do estado
antes da instrução ser executada até o estado após a sua conclusão.
Os registros visíveis em um processador ARM estão mostrados na Figura.
Ao escrever programas de nível de usuário, apenas os 15 registradores de 32 bits de uso geral (r0 até
r14), o contador de programa (r15) e o registro de status do programa atual (CPSR) precisam ser
considerado.
Os registros restantes são usados apenas para programação em nível de sistema e para manipulação.
exceções (por exemplo, interrupções).
Registradores visíveis da ARM
The Current Program Status Register (CPSR)
O CPSR é usado em programas de nível de usuário para armazenar os bits do código de condição. Esses bits são
usado, para registrar o resultado de uma operação de comparação e para controlar se sim ou não um
o ramo condicional é tomado.
O programador de nível de usuário geralmente não precisa se preocupar com como este registrador é
configurado, mas para completude o registro está ilustrado na figura abaixo.
Os bits na parte inferior do registrador controlam o modo do processador, o conjunto de instruções e
interrupções são habilitadas e estão protegidas de mudanças pelo programa de nível de usuário.
Formato ARM CPSR
N: Negativo; a última operação da ALU que alterou os flags produziu um negativo
resultado (a parte superior do resultado de 32 bits era um).
Z: Zero; a última operação ALU que alterou os flags produziu um resultado zero
(cada bit do resultado de 32 bits era zero).
C: Carregar; a última operação da ALU que alterou os sinais gerou um carry-out,
ou como resultado de uma operação aritmética na ALU ou do deslocador.
V: Overflow; a última operação aritmética da ALU que alterou os flags gerou um
transbordar para o bit de sinal.
O sistema de memória
Além do estado do registro do processador, um sistema ARM tem estado de memória.
A memória pode ser vista como um array linear de bytes numerados de zero até 23.
Os itens de dados podem ser bytes de 8 bits, meio-palavras de 16 bits ou palavras de 32 bits.
As palavras estão sempre alinhadas em limites de 4 bytes (ou seja, os dois endereços menos significativos
os bits são zero) e as metade-palavras estão alinhadas em limites de byte pares.
A organização da memória é ilustrada na figura abaixo. Isso mostra uma pequena área de
memória onde cada localização de byte tem um número único.
Um byte pode ocupar qualquer uma dessas localizações.
Um item de dados do tamanho de uma palavra deve ocupar um grupo de quatro localizações de byte começando em um byte
endereço que é um múltiplo de quatro.
Palavras de meio ocupam duas localizações de byte começando em um endereço par de byte.
Organização de memória ARM.
Arquitetura de carga e armazenamento
Em comum com a maioria dos processadores RISC, a ARM emprega uma arquitetura de carga-armazenamento.
Isso significa que o conjunto de instruções apenas processará (soma, subtração, e assim por diante) valores.
que estão em registros (ou especificados diretamente dentro da própria instrução) e sempre irão
coloque os resultados de tal processamento em um registro.
As únicas operações que se aplicam ao estado da memória são aquelas que copiam valores de memória
em registros (instruções de carga) ou copiar os valores dos registros para a memória (instruções de armazenamento).
Os processadores CISC normalmente permitem que um valor da memória seja adicionado a um valor em um
registrar, e às vezes permitir que um valor em um registrador seja adicionado a um valor na memória.
A ARM não suporta operações de 'memória para memória' desse tipo.
Portanto, todas as instruções ARM se enquadram em uma das três categorias a seguir:
Instruções de processamento de dados.
Esses usam e mudam apenas os valores dos registros.
Por exemplo, uma instrução pode somar dois registradores e colocar o resultado em um
registrar.
Instruções de transferência de dados.
Esses copiam valores de memória para registradores (instruções de carga) ou copiam registrador
valores na memória (instruções de armazenamento).
Uma forma adicional, útil apenas em código de sistema, troca um valor de memória
com um valor de registro.
Instruções de controle de fluxo.
Instruções de controle de fluxo fazem com que a execução mude para um endereço diferente.
ou permanentemente (instruções de desvio) ou salvando um endereço de retorno para retomar
a sequência original (instruções de ramificação e ligação) ou armadilha no sistema
código (chamadas do supervisor).
Modo supervisor
O processador ARM suporta um modo de supervisor protegido.
O mecanismo de proteção garante que o código do usuário não possa obter privilégios de supervisor.
sem verificação apropriada sendo realizada
Fora para garantir que o código não está tentando operações ilegais.
O resultado disso para o programador de nível de usuário é que funções de nível de sistema só podem ser
pode ser acessado através de chamadas de supervisor especificadas.
Essas funções geralmente incluem quaisquer acessos a registros de periféricos de hardware e a
operações amplamente utilizadas, como entrada e saída de caracteres.
Programadores de nível de usuário estão preocupados em elaborar algoritmos para operar sobre os dados
'possuidos' por seus programas, e dependem do sistema operacional para lidar com todas as transações
com o mundo fora de seus programas.
As instruções que solicitam funções do sistema operacional estão cobertas em 'Supervisor
chamadas
Conjunto de instruções ARM
Todas as instruções ARM têm 32 bits de largura e estão alinhadas em limites de 4 bytes na memória.
As características dos conjuntos de instruções ARM são:
A arquitetura de carga-armazenamento;
instruções de processamento de dados de 3 endereços (os dois registros de operandos de origem e a
o registro de resultados é todo especificado de forma independente);
Execução condicional de cada instrução;
A inclusão de instruções de carregar e armazenar múltiplos registradores muito poderosos;
A capacidade de realizar uma operação de deslocamento geral e uma operação ALU geral em um
instrução única que é executada em um único ciclo de clock;
Abra a extensão do conjunto de instruções através do conjunto de instruções do coprocessador, incluindo
adicionando novos registros e tipos de dados ao modelo do programador;
Uma representação compactada de 16 bits muito densa do conjunto de instruções em
Arquitetura de polegar.
Para os pequenos sistemas embarcados em que a maioria dos processadores ARM é usada, este código
a vantagem de densidade supera a pequena penalização de desempenho incorrida pela decodificação
complexidade.
O código Thumb estende essa vantagem para dar à ARM uma melhor densidade de código do que a maioria dos CISC
processadores.
O sistema de I/O
O ARM lida com periféricos de I/O (entrada/saída) (como controladores de disco, rede
interfaces, e assim por diante) como dispositivos mapeados na memória com suporte a interrupções.
Os registros internos nesses dispositivos aparecem como locais endereçáveis dentro do ARM.
o mapa de memória pode ser lido e escrito usando as mesmas instruções (load-store) como
outras localizações de memória.
Os periféricos podem atrair a atenção do processador fazendo uma solicitação de interrupção usando
ou a interrupção normal (IRQ) ou a interrupção rápida (FIQ).
Ambas as entradas de interrupção são sensíveis ao nível e mascaráveis.
Normalmente, a maioria das fontes de interrupção compartilha a entrada IRQ, com apenas uma ou duas que são críticas em termos de tempo.
fontes conectadas à entrada FIQ de maior prioridade.
Alguns sistemas podem incluir hardware de acesso direto à memória (DMA) externo ao
processador para lidar com tráfego de E/S de alta largura de banda.