• 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

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

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

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,

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