• Nenhum resultado encontrado

Universidade de São Paulo

N/A
N/A
Protected

Academic year: 2021

Share "Universidade de São Paulo"

Copied!
5
0
0

Texto

(1)

Universidade de

São Paulo

Sistemas Embarcados

Jorge Luiz e Silva

Conjunto Instruções ARM

„

ARM versões.

„

ARM Linguagem Assembly.

„

ARM modelo de programação.

„

ARM organização de memória.

„

ARM operação com dados.

„

ARM fluxo de controle.

Versões ARM

Várias arquiteturas do ARM

Apresentação do ARM7.

Linguagem Assembly ARM

Modelo de comandos

LDR r0,[r8] ; a comment

label

ADD r4,r0,r1

Modelo de Programação

r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 (PC) CPSR 31 0 N Z C V

Modo de representação Endian

Relação entre bit/bytes/palavra define

endianness:

byte 3 byte 2 byte 1 byte 0 byte 0 byte 1 byte 2 byte 3 bit 31 bit 0 bit 0 bit 31

(2)

Tipos de Dados ARM

Palavras de 32 bits.

Palavra pode ser dividida em 4 bytes

Endereço do ARM pode ter 32 bits.

Endereço referenciado por bytes

Endereço 4 se inicia no byte 4.

No power-up pode-se configurar o modo

little- ou bit-endian.

Bit Status ARM

Cada operação aritimética, logica, ou de

deslocamento gera um flag CPSR:

N (negativo), Z (zero), C (carry), V (overflow).

Exemplos:

-1 + 1 = 0: NZCV = 0110.

2

32-1

+1 = -2

31

: NZCV = 1001.

Instruções de Dados ARM

Formato Básico:

ADD r0,r1,r2

Operando Imediato:

ADD r0,r1,#2

Instruções p/ dados no ARM

ADD, ADC : soma (w. carry)

SUB, SBC : subtrai (w. carry)

MUL, MLA : multiplica (and accumulate)

AND, ORR, EOR

BIC : clear bit

LSL, LSR : Deslocamento left/right

ASL, ASR : Deslocamento arithmetico left/right

ROR : rotate right

RRX : rotate right com C

Instruções de Comparação ARM

CMP : compara

CMN : compara negado

TST : bit-wise AND

TEQ : bit-wise XOR

Alteram apenas os bits NZCV do CPSR.

Instruções MOV no ARM

MOV, MVN : move (negado)

(3)

Instruções load/store ARM

LDR, LDRH, LDRB : load (half-word, byte)

STR, STRH, STRB : store (half-word, byte)

Modos de endereçamento:

register indirect : LDR r0,[r1]

com segundo registrador : LDR r0,[r1,-r2]

com constante: LDR r0,[r1,#4]

ARM ADR pseudo-op

Não se pode referenciar um endereço direto

em uma instrução

Valor gerados a partir de uma análise no

PC

ADR é pseudo-op que calcula endereço

ADR r1,FOO

Example: Atribuições em C

C: x = (a + b) - c; Assembler:

ADR r4,a ; endereço de a LDR r0,[r4] ; valor de a

ADR r4,b ; endereço de b, reusando r4 LDR r1,[r4] ; valor de b

ADD r3,r0,r1 ; computa a+b ADR r4,c ; endereço de c LDR r2,[r4] ; valor de c

SUB r3,r3,r2 ; completa calculo de x ADR r4,x ; endereço de x STR r3,[r4] ; valor de x

Example: Comandos C

C: y = a*(b+c); Assembler:

ADR r4,b ; get address for b LDR r0,[r4] ; get value of b ADR r4,c ; get address for c LDR r1,[r4] ; get value of c ADD r2,r0,r1 ; compute partial result ADR r4,a ; get address for a LDR r0,[r4] ; get value of a

MUL r2,r2,r0 ; compute final value for y ADR r4,y ; get address for y

STR r2,[r4] ; store y

Example: Comandos C

C: z = (a << 2) | (b & 15); Assembler:

ADR r4,a ; get address for a

LDR r0,[r4] ; get value of a

MOV r0,r0,LSL 2 ; perform shift

ADR r4,b ; get address for b

LDR r1,[r4] ; get value of b

AND r1,r1,#15 ; perform AND

ORR r1,r0,r1 ; perform OR

Modos de Endereçamento

Adicionais

Base + deslocamento:

LDR r0,[r1,#16]

Base + auto indexado com incremento

LDR r0,[r1,#16]!

Pós-indexado seguido de offset:

(4)

Comandos de fluxo ARM

Baseados em CPSR:

EQ, NE, CS, CC, MI, PL, VS, VC, HI,

LS, GE, LT, GT, LE

Operação de Desvio:

B #100

Pode ser executado condicionalmente

Exemplo: comando if

C:

if (a > b) { x = 5; y = c + d; } else x = c - d; Assembler:

; testar condição ADR r4,a ; endereço a LDR r0,[r4] ; valor de a ADR r4,b ; endereço b LDR r1,[r4] ; valor de b CMP r0,r1 ; compare a < b

BLE fblock ; if a ><= b, desvia para falso

Comando If…..

if (a > b) { x = 5; y = c + d; } else x = c - d;

; bloco true

MOV r0,#5 ; gera valor de x ADR r4,x ; endereço de x STR r0,[r4] ; store x ADR r4,c ; endereço de c LDR r0,[r4] ; valor de c ADR r4,d ; endereço de d LDR r1,[r4] ; valor de d ADD r0,r0,r1 ; gera y ADR r4,y ; endereço de y STR r0,[r4] ; store y B after ; desvia final

Comando If …..

if (a > b) { x = 5; y = c + d; } else x = c - d;

; bloco false

fblock ADR r4,c ; endereço de c LDR r0,[r4] ; valor de c ADR r4,d ; endereço de d LDR r1,[r4] ; valor de d SUB r0,r0,r1 ; gera a-b ADR r4,x ; endereço de x STR r0,[r4] ; store valor de x after ...

Exemplo: Implementação de

Condições

if (a > b) { x = 5; y = c + d; } else x = c - d; ; bloco true MOVLT r0,#5 ; valor de x ADRLT r4,x ; endereço de x STRLT r0,[r4] ; store x ADRLT r4,c ; endereço de c LDRLT r0,[r4] ; valor de c ADRLT r4,d ; endereço de d LDRLT r1,[r4] ; valor de d ADDLT r0,r0,r1 ; gera y ADRLT r4,y ; endereço de y STRLT r0,[r4] ; store y

; bloco true

MOV r0,#5 ; gera valor de x ADR r4,x ; endereço de x STR r0,[r4] ; store x ADR r4,c ; endereço de c LDR r0,[r4] ; valor de c ADR r4,d ; endereço de d LDR r1,[r4] ; valor de d ADD r0,r0,r1 ; gera y ADR r4,y ; endereço de y STR r0,[r4] ; store y B after ; desvia final

Exemplo: Implementação de

Condições…..

; bloco false ADRGE r4,c ; endereço de c LDRGE r0,[r4] ; valor de c ADRGE r4,d ; endereço de d LDRGE r1,[r4] ; valor de d SUBGE r0,r0,r1 ; gerar a-b ADRGE r4,x ; endereço de x STRGE r0,[r4] ; store valor de x

(5)

Exemplo: Filtro FIR

C:

for (i=0, f=0; i<N; i++) f = f + c[i]*x[i];

Assembler ; Inicio do loop

MOV r0,#0 ; use r0 para I

MOV r8,#0 ; usar índices separados para arrays ADR r2,N ; endereço de N

LDR r1,[r2] ; valor de N MOV r2,#0 ; use r2 para f

Filtro FIR …..

for (i=0, f=0; i<N; i++) f = f + c[i]*x[i]; ADR r3,c ; endereço de c ADR r5,x ; endereço de x ; corpo do loop

loop LDR r4,[r3,r8] ; valor de c[i] LDR r6,[r5,r8] ; valor de x[i] MUL r4,r4,r6 ; gerar c[i]*x[i] ADD r2,r2,r4 ; acumular

ADD r8,r8,#4 ; incrementa uma palavra offset ao índice ADD r0,r0,#1 ; soma 1 em i CMP r0,r1 ; final? BLT loop ; if i < N, continue

Subrotinas no ARM

Desvio e link:

BL foo

Copia PC atual em r14.

Para retornar :

MOV r15,r14

Chamadas aninhadas de

subrotinas

Requer conversão de código

f1

LDR r0,[r13] ; load arg into r0 from stack

; call f2()

STR r14,[r13]! ; store f1’s return adrs

STR r0,[r13]! ; store arg to f2 on stack

BL f2 ; branch and link to f2

; return from f1()

SUB r13,#4 ; pop f2’s arg off stack

LDR r13!,r15 ; restore register and return

Resumo

Arquitetura Load/store

Maioria das instruções são RISC, operam

em um único ciclo.

Algumas operações multi-registradores são

longas

Referências

Documentos relacionados

Pode-se usar até 16 módulos em um sistema MicroLogix 1500 ao utilizar uma Unidade Básica B (até 8 para a Série A) dependente das especificações de alimentação. Além disso,

De todos os net!oo+s que j&amp; %i/, este so!re os 3uminados %oi um dos mais tra!ahosos, pois se  De todos os net!oo+s que j&amp; %i/, este so!re os 3uminados %oi um dos

Basta entender que o Direito Penal é o instrumento mais opressivo e deve ter a resposta mais áspera de que os demais ramos de controle social, entendendo ainda que

O dulçor, detectado mais intensamente nas cervejas artesanais também está relacionado ao fato do maior uso de malte na formulação, sendo que, durante o processo de

• R: Atividade principal, conceitualmente, é a atividade de produção de bens ou serviços destinada a terceiros, que traz maior contribuição para a geração do

Inicialmente foi realizada a caracterização físico-química das polpas de caju e umbu- cajá - açúcares solúveis totais, umidade, proteína, vitamina C, pH e sólidos solúveis

A Escola Pernambucana de Circo (EPC) foi fundada em 1996 no Recife, com foco no aprendizado das artes circenses como fator de inclusão social de crianças,

Contudo, poderão ser ventiladas outras possibilidades, nomeadamente a força, peso ou influência exercida pelo “lobby” do Ministério do Ambiente e Ordenamento do