Upload
gabriel-santarem-anjos
View
239
Download
0
Embed Size (px)
Citation preview
Arquitetura do ARM
• RISC (Reduced Instruction Set Computer)– Conjunto relativamente grande de registradores– Modelo “load/store “de processamento• Operações são feitas em registradores e não
diretamente na memória.– Número limitado de modos de endereçamento.– Tamanho fixo de instruções (32 bits).
Arquitetura do ARM• Além da arquitetura RISC tradicional...– ALU e Shifter separados.• Controle adicional e aumento de velocidade.
– Modos de endereçamento de Auto-incremento/decremento.• Loops mais rápidos.
– Execução condicional de instruções• Aumento de velocidade através da redução do
“pipeline flushing”
Modos do Processador• User mode – modo normal – Acesso limitado ao sistema– Não pode mudar o modo
• Privileged Mode - modo privilegiado– Acesso total ao sistema– Pode mudar modo– Registros adicionais para evitar corrupção– FIQ, IRQ, Supervisor, Abort, Undefined
• System mode – modo para o S.O. – Privilegiado, mas sem registradores adicionais
Registradores• 37 registradores ao todo.– 30 de uso geral– 6 de status– Program Counter – PC
• R0 - R7 : Uso geral, comum a todos os modos.• R8 - R12 : idem, menos no modo FIQ, onde
são substituídos por R8_fiq – R12_fiq• R13-R15: Uso especial (SP, Link Register, PC),
com versões diferentes para exception modes.
Registradores
• Registradores de status: – CPSR : Current Processor Status Register• Informação de estado corrente do processador
– SPSR: Saved Processor Status Register• Só disponível nos modos privilegiados• Armazena informação de estado imediatamente antes
do processador mudar para o estado privilegiado.
Registradores
• Stack Pointer ou R13– Cada exception mode tem o seu SP– Ponteiro de pilha– Stack é usado para armazenar valores temporários
Registradores
• Link Register ou R14– Armazena o endereço de retorno para a sub-rotina– Ao chamar uma sub-rotina com a instrução BL
(Branch and Link) o endereço da próxima instrução é armazenado em R14.
– No retorno da sub-rotina:• MOV PC, LR ou...• BAL LR
Registradores
• Program counter (PC) ou R15– R15 armazena o PC. – Se for escrito causará a execução da instrução no
endereço armazenado em R15. – Não deve ser usado com STR (Store Register) ou
STM (Store Multiple Registers)
Registradores• Os de uso geral, podem ser usados para
manipular :– Bytes – Half-words (16 bits)– Words (32 bits)
Registradores• CSPR - Current Processor Status Register– Dividido em User flags e Systems Control flags– Pode ser usado para afetar a operação de um programa.– SBZ = Uso futuro – I = Interrupções são permitidas– F = Fast Interrupts são permitidas– Mode = Modo corrente do processador– Salvo em SPSR nos modos de exceção
Registradores
• Flags “condition code” ou cc– Negative (N) : valor do bit mais significativo do
resultado da operação, em complemento 2.– Zero (Z) : 1 se a operação resultou em 0.– Carry (C) : “vai-um” do bit mais significativo em
adições ou deslocamentos.– Overflow (V) : 1 quando o resultado da operação é
maior que o registrador pode armazenar.
Exceções• 7 tipos, geradas interna ou externamente– Interrupção.– Execução de instrução não definida.
Exceções• Reset : Power on ou Pino de Reset baixo• Software Interrupt: chamadas ao S.O.• Undefined Instruction: instrução inválida• Prefetch Abort: Acesso a memória inexistente• Data abort: Acesso a dados fora do alinhamento
(2 bits menos significativos <> 0)• Interrupt: interrupção de hardware• Fast Interrupt: Interrupção rápida (não pode ser
interrompida).
Interrupções
• Processador para após a execução da instrução corrente.
• CPSR é salvo em SPSR.• Endereço da próxima instrução é salvo em LR.• Processador inicia a execução da rotina de
tratamento de interrupção.
Conjunto de Instruções
• 6 categorias:– Movimentação de dados– Aritmética– Acesso a memória– Lógica e manipulação de bits– Controle de fluxo– Controle do sistema / instruções privilegiadas
Execução Condicional <cc>
• A instrução é executada dependendo do resultado de uma flag de condição.Ex: MOVCS R0,R1
Execução Condicional <cc>
• Geralmente usadas após instrução CMP (compare)
• Greater than (GT) and Less than (LT) são usados com inteiros com sinal.
• Higher than (HT) and Lower than (LO) são usados para inteiros sem sinal.
Atualização das flags de condição
• Adicionando um “S” ao final do mnemônico Ex: MOV R0, #0 – Move 0 para R0 e não atualiza flagsMOVS R0,#0 – Move 0 para R0 e atualiza flags
Flag Zero vai para 1Flag Negative vai para 0Flags Carry e Overflow não serão afetadas
Exercício
• Considere o comando – MOV <cc> <S> Rd, <op1>
• O que o código seguinte faz?MOVS R0, R1MOVEQS R0, R2MOVEQ R0, R3
Operandos de Processamento de Dados <op1>
• Pode ser uma constante ou registrador• Pode ser modificado de 5 formas diferentes• Um operando é roteado pelo Barrel Shifter
Ex: MOV R0, #1234MOV R0, R1
Operandos de Processamento de Dados <op1>
• Logical Shift Left (LSL)• Maneira prática de multiplicar por 2n
• Bits menos significativos vão para 0EX:
MOV R0, R1, LSL #2MOV R0, R1, LSL R2
• Bit “perdido” vai para Carry Flag se modificador S é usado.
Operandos de Processamento de Dados <op1>
• Logical Shift Right (LSR)• Maneira prática de dividir por 2n
• Bits mais significativos vão para 0EX:
MOV R0, R1, LSR #2MOV R0, R1, LSR R2
• Bit “perdido” vai para Carry Flag se modificador S é usado.
Operandos de Processamento de Dados <op1>
• Arithmetic Shift Right (ASR)• Maneira prática de dividir por 2n para inteiros
sinalizados. • Bit mais significativo é mantido
EX:MOV R0, R1, ASR #2MOV R0, R1, ASR R2
• Não existe Arithmetic Shift Left!
Operandos de Processamento de Dados <op1>
• Rotate Right (ROR)• Bit menos significativo é copiado para Carry
Flag (C) e Carry Flag é copiada para o bit mais significativo.EX:
MOV R0, R1, ROR #2MOV R0, R1, ROR R2
• Não existe ROL!
Operandos de Processamento de Dados <op1>
• Rotate Right Extended (RRX)• Permite rotação de 33 bits através da Carry
Flag.
Operandos de Acesso a memória <op2>
• 3 métodos para especificar o endereço de memória. – Offset Addressing– Pre-Index Addressing – Post Index Addressing
• Offset pode ser:– Valor constante– Registrador– Scaled (LSL, LSR, ASR, ROR, RRX)
Operandos acesso a memória <op2>
• Offset Addressing: adiciona o valor do registrador base a um offsetLDR R0, [R1] LDR R0, [R1, #4]LDR R0, [R1, R2]LDR R0, [R1, R2, LSL #2]
• Usado para acesso a vetores e tabelas: – R1 <- Endereço Base, R2 <- Indice, LSL #2 = R2 * 4
Operandos acesso a memória <op2>
• Pre-Index Addressing: mesmo comportamento que no offset, mas atualiza base register.
LDR R0, [R1, #4]!LDR R0, [R1, R2]!LDR R0, [R1, R2, LSL #2]!
• Usado em loops!