340 likes | 521 Views
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.
E N D
Arquitetura do ARM • RISC (ReducedInstruction 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 • Usermode – modo normal • Acesso limitado ao sistema • Não pode mudar o modo • PrivilegedMode - 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 • Programcounter – 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 exceptionmodes.
Registradores • Registradores de status: • CPSR : Current Processor Status Register • Informação de estado corrente do processador • SPSR: Saved Processor Status Register • Só disponivel nos modos privilegiados • Armazena informação de estado imediatamente antes do processador mudar para o estado privilégiado.
Registradores • Stack Pointer ou R13 • Cada exceptionmode 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 (Branchand Link) o endereço da próxima instrução é armazenado em R14. • No retorno da sub-rotina: • MOV PC, LR ou... • BAL LR
Registradores • Programcounter (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 (storeregister)
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 Userflags e Systems Controlflags • Pode ser usado para afetar a operação de um programa. • SBZ = Uso futuro • I = Interrupções são permitidas • F = FastInterrupts são permitidas • Mode = Modo corrente do processador • Salvo em SPSR nos modos de exceção
Registradores • Flags “conditioncode” 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. • UndefinedInstruction: instrução inválida • PrefetchAbort: Acesso a memória inexistente • Data abort: Acesso a dados fora do alinhamento (2 bits menos significativos <> 0) • Interrupt: interrupção de hardware • FastInterrupt: 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) • Greaterthan (GT) andLessthan (LT) são usados com inteiros com sinal. • Higherthan (HT) andLowerthan (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 flags MOVS R0,#0 – Move 0 para R0 e atualiza flags Flag Zero vai para 1 Flag Negative vai para 0 FlagsCarry e Overflow não serão afetadas
Considere o comando • MOV <cc> <S> Rd, <op1> • O que o código seguinte faz? MOVS R0, R1 MOVEQS R0, R2 MOVEQ 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 BarrelShifter Ex: MOV R0, #1234 MOV 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 0 EX: MOV R0, R1, LSL #2 MOV R0, R1, LSL R2 • Bit “perdido” vai para CarryFlag 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 0 EX: MOV R0, R1, LSR #2 MOV R0, R1, LSR R2 • Bit “perdido” vai para CarryFlag se modificador S é usado.
Operandos de Processamento de Dados <op1> • Arithmetic Shift Right (ASR) • Maneira prática de dividir por 2n para inteiros sinalizados. • Bits mais significativo é mantido EX: MOV R0, R1, ASR #2 MOV R0, R1, ASR R2 • Não existe ArithmeticShift Left!
Operandos de Processamento de Dados <op1> • RotateRight (ROR) • Bit menos significativo é copiado para CarryFlag (C) e CarryFlag é copiada para o bit mais significativo. EX: MOV R0, R1, ROR #2 MOV R0, R1, ROR R2 • Não existe ROL!
Operandos de Processamento de Dados <op1> • RotateRight (ROR)
Operandos de Processamento de Dados <op1> • RotateRightExtended (RRX) • Permite rotação de 33 bits através da CarryFlag.
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 offset LDR R0, [R1] LDR R0, [R1, #4] LDR R0, [R1, R2] LDR R0, [R1, R2, LSL #2] • Usado para acesso a vetores e tabelas
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
Operandos acesso a memória <op2> • Post-index Addressing: Usa o conteúdo do registrador base. Depois adiciona o offset e atualiza o registrador base. LDR R0, [R1], #4 LDR R0, [R1], R2 LDR R0, [R1], R2, LSL #2 • Usado para ler o endereço corrente e apontar para o próximo endereço automaticamente.