padrão atpcs - arm_se

Upload: rodrigo-espinoza

Post on 12-Jul-2015

72 views

Category:

Documents


0 download

TRANSCRIPT

RELATRIO DE ESTUDO PADRO ATPCS

SUMRIO 1. 1.1. 1.2. 1.3. 1.4. 2. 3. O PADRO ATPCS............ Registradores Chamada da sub-rotina Passagem de parmetros.. Valores de retorno EXEMPLO... REFERNCIAS... 3 3 4 4 4 5 9

3

1. O PADRO ATPCS ARM-THUMB Procedure Call Standard O padro ATPCS define como sub-rotinas podem ser escritas e compiladas separadamente para, quando unidas, funcionar adequadamente. O padro descreve obrigaes da funo chamadora e chamada. O uso de diferentes linguagens como C++ e Assembly por meio do padro ATPCS resulta em algumas vantagens: Tamanho do cdigo reduzido; Aumento de performance; Funcionalidade aprimorada (facilidade de depurao e utilizao de bibliotecas compartilhadas como apoio); e Modularidade de cdigo.

1.1. Registradores Os registradores tem funes diferentes no padro ATPCS, a Figura 1 exemplifica os registradores.

Figura 1 Registradores no padro ATPCS Fonte The ARM-THUMB Procedure Call Standard Manual

Os primeiros 4 registradores (r0 r3), rotulados de a1 a a4 so usados para a passagem de parmetros para dentro da rotina e tambm como valores de retorno da

4

rotina. Os registradores de r4 a r11 so usados como registradores locais. Estes so rotulados de v1 a v8, mas apenas v1 at v4 podem ser utilizados uniformemente pelas intrues Thumb. Os registradores r12 a r15 tm funes especiais. O r12 guarda o valor de IP (intra-procedure-call), o r13 o SP (stack pointer), o r14 o LR (link register) e o r15 o PC (program counter). 1.2. Chamada da sub-rotina A ao de chamar uma sub-rotina , basicamente, armazenar o endereo da prxima instruo que ser buscada pelo processador (PC r15) no registrador link register (r13) e depois mudar o valor de PC para o endereo da sub-rotina. O resultado um salto do programa, o controle transferido para o endereo da sub-rotina. O registrador LR serve como um parmetro adicional cujo contedo o endereo de retorno para o cdigo da funo chamadora. No padro, a rotina chamada no tem a necessidade de preservar os valores de r0 a r3, IP (R12) e LR (R14), mas preserva r4-r11 e SP. 1.3. Passagem de parmetros A lista de valores de parmetros convertida para valores inteiros de 32 bits (words) e os valores so armazenados em words consecutivas na memria. Esses valores so passados para a rotina carregando as 4 primeiras words em r0 a r3. Caso sejam passados mais parmetros, o excedente armazenado na pilha. 1.4. Valores de retorno A funo pode retornar um valor que ocupe um ou mais words. Pode retornar um valor de 1 word em a1. Pode retornar valores de 2-4 words em a1-a2, a1-a3, ou a1a4, respectivamente. Pode retornar um valor maior que 4 words, mas indiretamente pela memria, via um parmetro de endereo.

5

2. EXEMPLO O programa deste exemplo simples, tem como objetivo calcular uma progresso aritmtica de n termos, com razo r e termo inicial num. Funo c #define n 2 unsigned int num=5, r=2,a=0; unsigned int v[n]; void main(void) { progressao(&v,num,n,r); a=2; while(1) { a=1; } } Funo assembly progressao: STR R1, [r0] ADD R0, R0, #4 ADD R1, R1, R3 SUBS R2, R2, #1 BNE progressao MOV PC, R14 END

Quando entra na sub-rotina, os parmetros so passados da seguinte maneira : R0 - Endereo do primeiro elemento do vetor v R1 termo inicial R2 nmero de termos da progresso R3 razo

Para n=10, num=5 e r=2 espera-se a seguinte progresso: 5, 7, 9, 11, 13, 15, 17, 19, 21 e 23. As Figuras 2, 3 e 4 esclarecem o procedimento de execuo do programa. Na Figura 2 pode-se observar o momento em que se entra na sub-rotina, enquanto que a Figura 3 mostra o momento em que se sai da rotina e se realiza a=2; A Figura 4 mostra o programa executando o loop while(1).

6

Figura 2 Tela 1 do programa exemplo em execuo

7

Figura 3 Tela 2 do programa exemplo em execuo

8

Figura 4 Tela 3 do programa exemplo em execuo

9

3. REFERNCIAS The ARM-THUMB Procedure Call Standard. Development Systems Business Unit. 24 oct. 2000.