34
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 RISC (Reduced Instruction Set Computer) – Conjunto relativamente grande de registradores – Modelo “load/store “de processamento Operações

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”

Diagrama de Blocos do ARM

Modos do Processador

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 (ROR)

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!

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], #4LDR R0, [R1], R2LDR R0, [R1], R2, LSL #2

• Usado para ler o endereço corrente e apontar para o próximo endereço automaticamente.