Sei sulla pagina 1di 29

Introduo ao Processador ARM

MC404

Modos de Operao
O processador Arm tem vrios modos de operao:
Usurio (sem privilgios) Supervisor (quando inicia ou reset) System (para chamadas ao S.O.) IFQ (interrupo rpida) IRQ (interrupo normal) Abort (violaes de memria, como falta de pgina) Undef (instrues inexistentes)

Registradores
O Arm tem 37 registradores, mas cada modo enxerga 17 registradores:
16 registradores gerais
r0 a r15 r15 o apontador de instrues (chamado de PC, program counter) Qualquer registrador pode ser usado como apontador de pilha! No tem SP ou FP fixos, mas normalmente SP=r13 e FP=r11

1 registrador de estado (flags, chamado cpsr)

Registradores
Todas as instrues podem usar r0-r14 como operandos Maioria das instrues permitem uso de r15 (PC) como operando, mas algumas no podem usar PC. H instrues especficas para carregar e armazenar as flags (cpsr) em um registrador

Flags
Program status registers (basicamente, um para cada modo, como veremos) Bit 31: N, flag de sinal Bit 30: Z, flag de zero Bit 29: C, flag de carry Bit 28: V, flag e overflow Bit 7: ativa/inibe interrupes IRQ Bit 6: ativa/inibe interrupes IFT Bit 4-0: indicam modo do processador

Tipos de instrues
Data Processing
Aritmticas, lgicas, deslocamento, cpia de registradores, cpia de flags

Load/Store
Palavra, meia-palavra, bytes, mltiplas palavras

Branch
Desvio e chamadas de procedimento

Multiply Software interrupt


Chamadas a sistema

Instrues

Instrues

Instrues

Execuo condicional
Todas as instrues so executadas condicionalmente aos valores das flags do modo corrente (cpsr) Bits 31-28 de cada instruo contm cdigo da condio (ou seja, possvel codificar 16 condies, mas somente 15 so codificadas)

Execuo condicional

Shifter
No processador Arm, na maioria das instrues um dos operandos pode ser deslocado/rotacionado antes de ter o seu valor utilizado na instruo. Shifts possveis:
ASL (ou LSL), logical shift left LSR, logical shift right ASR, arithmetic shift right ROR, rotate right

Nmero de operandos
A maioria das instrues pode utilizar at trs registradores

Data Processing
Destino sempre um registrador
Mas tst,teq,cmp e cmn no usam destino

Operando1 sempre um registrador Operando2 pode ser um registrador shiftado/rotacionado ou um valor imediato shiftado/rotacionado. Cada instruo pode especificar se flags so atualizadas ou no

Data Processing

Juntando as peas
Instrues Data Processing MOV/MVN <opcode>{cond}{S} Op2 pode ser:
Rm Rm,#expression Rm, shift #expression Rm, shift Rn

Rd,<Op2>

Exemplos
mov mov mvn movs mov mov movne r1,r2!! ! ! @ r10,#0! ! ! @ r2,#0!! ! ! @ r2,r2,lsl #2 ! @ r3,r3,lsr r10 ! @ no no no no no faiska: faiska: faiska, faiska: faiska: mov set set shl shr r1,r2! r10,0! r2,-1! r2,2! r3,r10!

r4,r5,lsr r10 ! @ no faiska: no tem! r1,r2! ! ! ! @ no faiska: no tem! ! !

Data Processing
CMP,CMN,TEQ,TST <opcode>{cond} Rn,<Op2>

(no precisa de S, sempre atualiza flags) Op2 pode ser:


Rm Rm,#expression Rm, shift #expression Rm, shift Rn

Exemplos
cmp cmn tst teq cmpeq cmphi r1,r2!! ! ! r10,#4! ! ! r2,#0!! ! ! r2,r4,lsl #2 ! r1,r2! ! r1,r2! ! ! ! @ @ @ @ ! ! no no no no faiska: faiska: faiska, faiska: and r1,r2! no tem! test r2,0! no tem!

@ no faiska: no tem! @ no faiska: no tem!

Data Processing
AND,EOR,SUB,RSB,ADD,ADC,SBC,RSC,ORR,BIC

<opcode>{cond}{S} Op2 pode ser:


Rm Rm,#expression Rm, shift #expression Rm, shift Rn

Rd,Rn,<Op2>

Exemplos
add add adds sub r1,r1,r2!! ! @ r1 r1+r2! r1,r2,r3!! ! @ r1 r2+r3 ! r10,r2,#4! ! @ r10 r2+4, seta flags ! r4,r5,r7 lsl r0!

Branch, Branch and link


Desvios e chamada para procedimento (link) 24 bits para codificar deslocamento(relativo a PC)

Branch
B{L}{cond} <expression>

Se L presente, escreve valor do endereo da instruo seguinte ao (endereo de retorno) no registrador r14 (Link Register).
No escreve na pilha! Se procedimento chamado folha, no precisa guardar na pilha; caso contrrio procedimento guarda r14 na pilha

Exemplos
b beq perto!! ! longe!! ! @no faiska: jmp perto! @no faiska: jz perto! @chamada de procedimento condicional! @no faiska: no tem! @no faiska: no tem !

blcc rotina! ! ! !! ! ! ! ! blhi rotina2! !

moveq pc,lr!! !

@ retorno condicional de procedimento!!

Load/Store
<LDR|STR>{cond}{B} Rd,<Address>

Se B presente, transfere byte <Address> pode ser:


Uma expresso constante (endereo) Um endereo com registrador base prindexado Um endereo com registrador base psindexado

Load/Store
Um endereo com registrador base prindexado pode ser
[Rn] [Rn,<#expression>]{!} [Rn,{-}Rm,<shift> #expresso]{!}

Exemplos
ldr r1,[r2]! ! ! !! ! ! ! ! ! ! @ r1 mem[r2]! @ no faiska: ld r1,(r2)! @ r1 mem[r2+r4]! @ no faiska: no tem! @ r1 mem[r2+4], r2 r2+4! @ bom para percorrer vetor!! @ mem[r4+r5] r3 se carry set! ! @ mem[r4] r1!

ldr r1,[r2+r4]! ! ! !! ! ! ! ! ! ldr r1,[r2+4]!! ! ! !! ! ! ! ! ! strcs strb r3,[r4+r5]!! r1,[r4]!!

Load/Store
Um endereo com registrador base psindexado pode ser
[Rn],<#expression> [Rn],{-}Rm,<shift> #expresso]

Exemplos
ldr r1,[r2]! ! ! !! ! ! ! ! ! ! @ r1 mem[r2]! @ no faiska: ld r1,(r2)! @ r1 mem[r2]; r2 r2+r4! @ no faiska: no tem! @ r1 mem[r2], r2 r2+4! @ bom para percorrer cadeia de ! @ caracteres!!

ldr r1,[r2],r4! ! ! !! ! ! ! ! ! ldr r1,[r2],4! ! !! ! ! ! ! ! !! ! ! ! ! ! ! !

Potrebbero piacerti anche