arm programação em linguagem de montagem. por que aprender linguagem de montagem (assembly...

27
ARM Programação em Linguagem de Montagem

Upload: livia-amarante-brezinski

Post on 07-Apr-2016

254 views

Category:

Documents


22 download

TRANSCRIPT

Page 1: ARM Programação em Linguagem de Montagem. Por que aprender linguagem de montagem (Assembly Language)? Tipos de dados – Aprender a manipular com eficiência

ARM

Programação em Linguagem de Montagem

Page 2: ARM Programação em Linguagem de Montagem. Por que aprender linguagem de montagem (Assembly Language)? Tipos de dados – Aprender a manipular com eficiência

Por que aprender linguagem de montagem (Assembly Language)?

• Tipos de dados – Aprender a manipular com eficiência tipos como bit,

byte, word, long e a necessidade para “strong typing”.• Modos de Endereçamento – Entender o uso de ponteiros e modos de endereçamento

complexos.• Pilhas, subrotinas, código reentrante e recursão • Operações em modo protegido• Entrada e Saída direta– Entender o uso de portas, drivers e interfaces de

controle.

Page 3: ARM Programação em Linguagem de Montagem. Por que aprender linguagem de montagem (Assembly Language)? Tipos de dados – Aprender a manipular com eficiência

Programa de Computador

• Séries de instruções que fazem com que o computador execute uma determinada tarefa, mais dados e endereços de memória.

• Simplesmente um conjunto de números binários.– Ex: Somar posição de memória 8092 com 8098 e

armazenar resultado em 809C (hexadecimal)11100101100111110001000000010000111001011001111100010000000010001110000010000001010100000000000011100101100011110101000000001000

Page 4: ARM Programação em Linguagem de Montagem. Por que aprender linguagem de montagem (Assembly Language)? Tipos de dados – Aprender a manipular com eficiência

Usando Octal ou Hexadecimal

Ex: Somar posição de memória 8092 com 8098 e armazenar resultado em 809C

E59F1010E59f0008E0815000E58F5008

Page 5: ARM Programação em Linguagem de Montagem. Por que aprender linguagem de montagem (Assembly Language)? Tipos de dados – Aprender a manipular com eficiência

Usando Mnemônicos

Ex: Somar posição de memória 8092 com 8098 e armazenar resultado em 809C, usando mnemônicos padrão ARM (assembly language)

LDR R1, num1LDR R0, num2ADD R5, R1, R0STR R5, num3

Page 6: ARM Programação em Linguagem de Montagem. Por que aprender linguagem de montagem (Assembly Language)? Tipos de dados – Aprender a manipular com eficiência

Programa Montador (Assembler)

Traduz linguagem de montagem para binário:

Mnemônico Registrador/Local de memóriaHexadecimalLDR R1, num1 E59F1010LDR R0, num2 E59F0008ADD R5, R1, R0 E0815000STR R5, num3 E58F5008

Page 7: ARM Programação em Linguagem de Montagem. Por que aprender linguagem de montagem (Assembly Language)? Tipos de dados – Aprender a manipular com eficiência

Montador (Assembler)

• Traduz um programa fonte (mnemônico) para um programa objeto (binário).

• Permite associar nomes a locais de memória, dispositivos de E/S, e sequências de instruções.

• Converte dados e endereços entre vários sistemas de numeração (binário, decimal, hexa, ASCII, EBCDIC...).

• Executar cálculos aritméticos como parte do processo de montagem.

Page 8: ARM Programação em Linguagem de Montagem. Por que aprender linguagem de montagem (Assembly Language)? Tipos de dados – Aprender a manipular com eficiência

Montador (Assembler) (cont.)

• Instruir o carregador (loader) onde carregar dados e programas na memória.

• Incluir bibliotecas padrão (“libraries”) ao programa do usuário.

Page 9: ARM Programação em Linguagem de Montagem. Por que aprender linguagem de montagem (Assembly Language)? Tipos de dados – Aprender a manipular com eficiência

Aplicações da “Assembly Language”

• Processamento de dados limitado (lógica)• Aplicações de alto-volume (muitos dados a serem

manipulados)• Aplicações Real-Time.• Programas de tamanho pequeno a moderado.• Aplicações onde o (pouco) uso de memória é critico.• Aplicações envolvendo mais E/S do que controle e

computação.

Page 10: ARM Programação em Linguagem de Montagem. Por que aprender linguagem de montagem (Assembly Language)? Tipos de dados – Aprender a manipular com eficiência

Porque aprender “Assembly”?

• Uso em sistemas microcomputadores industriais.• Obter o maior nível de controle sobre o computador.• Requerimentos de eficiência do código gerado.• Ajuda o entendimento de linguagens de alto nível,

depuração (debug), otimização, melhor utilização do S.O., entendimento de código de terceiros, etc.

Page 11: ARM Programação em Linguagem de Montagem. Por que aprender linguagem de montagem (Assembly Language)? Tipos de dados – Aprender a manipular com eficiência

Assemblers - Campos

• Instruções divididas em campos (fields).• Pelo menos o campo de operação deve existir– Mnemônico OU...– Pseudo instrução (pseudo-op)

• Pode conter campos de endereço ou operandos.• Campo de rótulo (label) opcional.• Campo de comentário também opcional.

Page 12: ARM Programação em Linguagem de Montagem. Por que aprender linguagem de montagem (Assembly Language)? Tipos de dados – Aprender a manipular com eficiência

Assemblers - Delimitadores

• Padrão ARMRótulo<espaço> instrução <espaço>;comentário

• Ex:

Page 13: ARM Programação em Linguagem de Montagem. Por que aprender linguagem de montagem (Assembly Language)? Tipos de dados – Aprender a manipular com eficiência

Assemblers - Labels• Opcional no campo. • Representa o endereço do primeiro byte da instrução.• Mais comumente usados em Branch e SWI • Torna os locais mais fáceis de achar e serem lembradas.• Pode ser facilmente movido para mudar ou corrigir um

programa.• Evita o cálculo manual de endereços.

Page 14: ARM Programação em Linguagem de Montagem. Por que aprender linguagem de montagem (Assembly Language)? Tipos de dados – Aprender a manipular com eficiência

Assemblers - Labels• Ex:

Page 15: ARM Programação em Linguagem de Montagem. Por que aprender linguagem de montagem (Assembly Language)? Tipos de dados – Aprender a manipular com eficiência

Assemblers - Labels

• Recomendações:– Rotule todas as instruções que forem ser referidas

posteriormente.– Limite a 5 caracteres maiúsculos, começando por

uma letra (regra geral).– Use nomes sugestivos da finalidade do rótulo.– Não use nomes que sejamos os mesmos que os

mnemônicos ARM (ex. MOV, BAL, SWI, etc.)

Page 16: ARM Programação em Linguagem de Montagem. Por que aprender linguagem de montagem (Assembly Language)? Tipos de dados – Aprender a manipular com eficiência

Diretivas do Montador

• Também chamadas de pseudo-operações.• Não são traduzidas para código de máquina.• Instruem o montador assembler quanto:– Definir áreas de memória.– Definir símbolos.– Alocar tabelas e outras estruturas de dados estáticas.– Fazer referências a outros programas.

• Exemplos: DEFINE CONSTANT, EQUATE, AREA, DEFINE STORAGE

Page 17: ARM Programação em Linguagem de Montagem. Por que aprender linguagem de montagem (Assembly Language)? Tipos de dados – Aprender a manipular com eficiência

Diretivas – DEFINE CONSTANT• Permite ao programador entrar dados estáticos na memória• Exemplos:

Value: .word 0x0000C123Result: .word 0Message2: .ascii "Fim..."NL: .asciz "\n " @ new lineMessage1: .asciz "Copiando meia-palavra (16 bits)... \n“Buffer: .skip 512 @ Buffer de 512 bytesLetraA: .byte 'A‘LetraB: .byte 65

.hword 0xAA55

Page 18: ARM Programação em Linguagem de Montagem. Por que aprender linguagem de montagem (Assembly Language)? Tipos de dados – Aprender a manipular com eficiência

Diretivas - EQUATE• Permite atribuir nomes a endereços ou dados

.equ SWI_Open, 0x66 @open a file

.equ SWI_Close,0x68 @close a file

.equ SWI_PrChr,0x00 @ Write an ASCII char to Stdout

.equ SWI_PrStr, 0x69 @ Write a null-ending string

.equ SWI_PrInt,0x6b @ Write an Integer

.equ SWI_RdInt,0x6c @ Read an Integer from a file

.equ Stdout, 1 @ Set output target to be Stdout

.equ SWI_Exit, 0x11 @ Stop execution

• Não faz com que o assembler aloque nada na memória. • Sempre atribua rótulos• Usado para constantes, endereços de dispositivos, máscaras, fatores de

conversão, etc.– Ex. DELAY, TTY, KBD, OPEN

Page 19: ARM Programação em Linguagem de Montagem. Por que aprender linguagem de montagem (Assembly Language)? Tipos de dados – Aprender a manipular com eficiência

Diretivas - AREA• Permite ao programador especificar regiões de

memória onde programas, subrotinas e dados irão residir, como:

• Início do programa .global _start• Início do código .text• Início da área de dados .data• Fim do programa .end• Alinha com múltiplo de 4 Bytes .align

Page 20: ARM Programação em Linguagem de Montagem. Por que aprender linguagem de montagem (Assembly Language)? Tipos de dados – Aprender a manipular com eficiência

Diretivas - outras

• .end : Fim do programa fonte

• . include : Inclui o conteúdo de um arquivo no arquivo corrente

EX: .include “math.s"

Page 21: ARM Programação em Linguagem de Montagem. Por que aprender linguagem de montagem (Assembly Language)? Tipos de dados – Aprender a manipular com eficiência

Operandos e Endereços• O default é o sistema decimal

ADD R0, R0, #100 Significa adicione o valor 100 (decimal) ao conteúdo do registrador R0, armazenando o resultado no próprio registrador R0

• Outros sistemas de numeração frequentemente usados:0Bnnn Binary Base 20nnn Octal Base 8nnn Decimal Base 100xnnn Hexadecimal Base 16

Page 22: ARM Programação em Linguagem de Montagem. Por que aprender linguagem de montagem (Assembly Language)? Tipos de dados – Aprender a manipular com eficiência

Operandos e Endereços

• Cadeia de caracteres: Sempre separadas por aspas duplas. Ex: “Valor Invalido”, “Smartphone”, “Lúcia Carvalho”, etc.Ex: .asciz "JNZ"

• Caractere único: Use aspas simples. Ex. ‘c’, ‘A’, ‘T’, ‘0’ ,’1’.Ex: MOV R0 , #'J'

Page 23: ARM Programação em Linguagem de Montagem. Por que aprender linguagem de montagem (Assembly Language)? Tipos de dados – Aprender a manipular com eficiência

Recomendações Gerais

– Sempre buscar clareza e simplicidade (não há ganhos em complicar)

– Use o sistema numérico ou código de caracteres mais claro para a finalidade

– Mantenha as expressões simples e óbvias.

Page 24: ARM Programação em Linguagem de Montagem. Por que aprender linguagem de montagem (Assembly Language)? Tipos de dados – Aprender a manipular com eficiência

Comentários• Explique a tarefa a ser executada e não o que o comando faz.

– Correto: “a temperatura está acima do limite?”, “salta a linha da impressora”, “verifica se chave está ligada”.

– Errado: “Soma 1 ao acumulador”, “salte para o começo”, “verifica se houve carry”

• Comentários devem ser curtos e diretos.• Comente todos os pontos chave do código.• Não use abreviações obscuras• Comente todas as definições, descrevendo suas finalidades.• Seja consistente em sua terminologia.

Page 25: ARM Programação em Linguagem de Montagem. Por que aprender linguagem de montagem (Assembly Language)? Tipos de dados – Aprender a manipular com eficiência

Tipos de Montadores

• Cross-assembler• Resident assembler• Macro assembler• Micro assembler• Meta-assembler• One-pass assembler• Two-pass assembler

Page 26: ARM Programação em Linguagem de Montagem. Por que aprender linguagem de montagem (Assembly Language)? Tipos de dados – Aprender a manipular com eficiência

Erros típicos

Undefined name Often a misspelling or an omitted definitionIllegal character Such as a 2 in a binary numberIllegal format A wrong delimiter or incorrect operandsInvalid expression For example, two operators in a rowIllegal value Usually the value is too largeMissing operand Pretty self explanatoryDouble definition Two different values assigned to one nameIllegal label Such as a label on a pseudo-operation that cannot have oneMissing label Probably a misspelled label nameUndefined operation code

• Sempre procure o primeiro erro!

Page 27: ARM Programação em Linguagem de Montagem. Por que aprender linguagem de montagem (Assembly Language)? Tipos de dados – Aprender a manipular com eficiência

Loaders

• Pega a saída do assembler (codigo objeto) e carrega na memória.

• Tipos:– Relocating loader– Absolute Loader– Linking loader (link editor + loader)