Interface entre as linguagens C e Assembly 8085

Slides:



Advertisements
Apresentações semelhantes
Microcontroladores Uma visão geral.
Advertisements

Parte 1: Organização de Computadores
Capitulo 6: Entrada e Saída
C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva /msn: Página:
1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza O programa é uma sequência de linhas numeradas Cada linha.
Arquitetura e organização de computadores
SOFTWARE BÁSICO.
Aula 4 – Sumário Linguagem assembly do MAC-1 A pilha
ARQUITETURAS RISC E CISC
Algoritmos e Estrutura de Dados I
CISC e RISC.
INTRODUÇÃO À PROGRAMAÇÃO
LPG - I: Alocação Dinâmica de Memória - Ponteiros
Professor: Carlos Roberto da Silva Filho, M. Eng.
Ferramentas Programação
Complexidade de Algoritmos
Arquitetura de Computadores
Linguagens de Programação
Linguagem C.
Threads.
Revisão da Linguagem C.
Paradigmas de programação
HARDWARE do CLP Os controladores lógicos programáveis são equipamentos com uma aplicação muito vasta dentro dos diversos processos de automação. Desta.
JAVA: Conceitos Iniciais
PROGRAMAÇÃO I UNIDADE 1.
Linguagem de Montagem.
INTELIGÊNCIA ARTIFICIAL
AJProença, Sistemas de Computação, UMinho, 2013/141 Análise do código de gestão de uma função –invocação e regresso instrução de salto, mas com salvaguarda.
Desenvolvimento de Jogos e Entretenimento Digital
Linguagem de Montagem PROVA 4 – 3/12.
PROGRAMAÇÃO ESTRUTURADA (MODULARIZAÇÃO/SUBPROGRAMAÇÃO)
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Arquitetura de computadores
Hugo Calazans André Ricardo
Processamento de dados na UCP e memória UCP
Ambiente de Execução - Rotinas
F UNÇÕES : PASSAGEM DE PARÂMETROS Aluno:Kaynã Vasconcelos Santos Matéria: Estrutura de dados e algoritmos I Turma: Professor: Danilo Silva dos Santos.
Estruturas de Dados Aula 2: Estruturas Estáticas 07/04/2014.
Geração de Código aula-12-geração-de-código.pdf.
Software Básico Nível ISA Capítulo 5 Mitsuo Takaki
Capítulo VIII Ambientes de Execução
Algoritmos - Profa. Alciléia1 Profa. Maria Alciléia Alves Rocha Funções em C 2011.
Modularização Dividir um problema em subproblemas Módulos menores facilita a depuração Dividir o desenvolvimento entre vários programadores “Reutilização”
Estruturas de Dados Aula 8: Tipos Abstratos de Dados 30/04/2014.
Regras de escopo Escopo: trecho de codificação no qual o identificador possui significado Escopo de função: identificador válido dentro do trecho de uma.
Programação de PIC em C Exposição das funções básicas para
Back-End Compilação aula-11-back-end.pdf.
A Linguagem de Máquina – Funções e recursividade Prof. André Luis M. Silva orgearq wordpress.com.
Microprocesadores x Microcontroladores
Registradores.
Procedimentos Registro de Ativação e Variáveis Locais 11 1.
IHS Aula Prática 4 Interrupções
Hugo Calazans André Ricardo
Ciro Ceissler / ASSEMBLY Ciro Ceissler /
Lucas Aranha ASSEMBLY Lucas Aranha
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Ponteiros.
Engenharia de Sistemas Embarcados Aula 5: Técnicas Especiais de Software.
Algoritmos e Programação MC102
Engenharia de Sistemas Embarcados Aula 5: Um Conjunto Básico de Ferramentas.
Existem 8 registos principais de 32 bits no processador (existem mais como %EIP): %EAX %EBX %ECX %EDX %ESI %EDI %EBP %ESP Os registos são armazenados em.
PROGRAMAÇÃO II – PARTE 1 Profa. Maria Augusta Constante Puget.
Arquitetura de computadores
ARQUITETURA DE COMPUTADORES Nível do Conjunto de Instruções
A linguagem de Máquina – Instruções Básicas
ASSEMBLY – aula 2 Hugo Calazans
Linguagem de Programação
COMPILADORES 07 Prof. Marcos.
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
Módulo I Capítulo 7: Funções e Procedimentos William Ivanski Curso de Programação C#
COMPILADORES 02 Prof. Marcos. COMPILADORES Do Programa à Execução Computadores das mais variadas arquiteturas têm funcionamento:
Transcrição da apresentação:

Interface entre as linguagens C e Assembly 8085 Software Básico – UnB 2/2011 Interface entre as linguagens C e Assembly 8085 André Augusto Geraldes Caio Angelo Djore Gouveia Ney César de Melo Filho

Sumário 1 – Introdução 2 – Métodos de interfaceamento 3 – Aplicações Interface entre C e Assembly – vantagens e desvantagens 2 – Métodos de interfaceamento Programa C chamando função em assembly Passagem de parâmetros e valor de retorno Variáveis globais Programa assembly chamando função em C Inline assembly Modelos de memória 3 – Aplicações 4 – Conclusão

Introdução

Diferenças entre C e Assembly A linguagem C está mais próxima da linha de pensamento do programador, é portanto mais intuitiva Assembly está mais próximo da linguagem de máquina, sendo mais fácil avaliar questões de desempenho ou mesmo tratamento de erros Quando se programa em C, não se tem tanto controle sobre posições de memória ou estado de registradores Existem várias linguagens e arquiteturas Assembly diferentes, exigindo do operador conhecimentos bastante específicos de cada uma delas.

Quando usar Utiliza-se Assembly quando se procura ter mais controle sobre desempenho e alocação de memória Também utiliza-se Assembly para programação de microcontroladores em geral Utiliza-se C para programas mais complexos

Programas mistos Faz-se uma solução híbrida quando deseja- se vantagens de ambas as partes. Programas complexos que necessitam uma alocação de memória bastante controlada: Linguagem C com chamada em Assembly Programas simples no qual linguagens de baixo nível não seriam capaz de prover determinada rotina: Linguagem Assembly com chamada em C

Métodos de interfaceamento

Interface por ligação

Chamando função em Assembly a partir do C Desta forma é permitido fazer com que haja trocas em qualquer sentido entre os códigos, dado que eles só vão ser conectados e formato “.o”; Formato “.o” não cria diferenças entre programas desde que não seja em OS’s diferentes.

Chamando Assembly em C Para chamar do C uma função assembly sem parâmetros e sem retorno, basta colocar seu nome no .ASM, em qualquer lugar, como externa: extern nome_funcao_ASM A chamada em C é a usual: nome_funcao_ASM(); e deve-se colocar seu protótipo no início do programa A maneira mais simples de trocar valores entre eles é usar variáveis globais. Declare-as normalmente em C e no assembly as declare como externas: extern data(var1) extern data(var2)

Programa C chamando função em Assembly (No exemplo IA-32) #include <stdio.h> extern int soma(int a, int b);   int main(){ int x; x = soma(3,79); printf("o resultado da soma eh: %d",x); return 0; } global soma soma: mov eax,[esp+4] mov ebx,[esp+8] add eax,ebx ret

Chamando C em Assembly Para chamar do assembly uma função C sem parâmetros e sem retorno, basta declará-la no .ASM antes como externa e fazer um LCALL normalmente: extrn code(nome_funcao_C)

Chamando um função C a partir de um Código em Assembly Boa alternativa quando se quer ter bom desempenho misturado a praticidade Depende do Assembly ou da biblioteca utilizada Para chamar do assembly uma função C sem parâmetros e sem retorno, basta declará-la no .ASM antes como externa e fazer um LCALL normalmente: extrn code(nome_funcao_C)

Chamando um função C a partir de um Código em Assembly

Chamando um função C a partir de um Código em Assembly

Chamada de procedimentos de C para Assembly Em x86 existem duas convenções de chamada de procedimentos: cdecl e stdcall (também onhecida por pascal) São setados para ambos os casos: ESP (topo da pilha), EBP (parâmetros da função) e EIP (endereço da instrução de volta) Stdcall é bastante utilizada pelo Windows API e é mais compacta do que o cdecl

Chamada de procedimentos de C para Assembly Empilhar os parâmetros da chamada Chamar a função Salvar e atualizar o registrador ebp Salvar os registradores tidos como temporários Alocar variáveis locais Realizar a função Liberar a pilha Restaurar os registradores Restaurar o ponteiro base Retornar da função Limpar os parâmetros empilhados

Chamada de procedimentos de C para Assembly

Inline assembly Introdução Codificação básica para GCC Extensão Sintaxe: AT&T Exemplo: __asm__ ("movl %eax, %ebx\n\t" "movl $56, %esi\n\t“ "movl %ecx, $label(%edx,%ebx,$4)\n\t” "movb %ah, (%ebx)"); Extensão Como definir as variáveis de entrada e saída (interface com C) Como indicar como essas variáveis serão usadas em assembly

Inline assembly Extensão (continuação) Campos: assembly template, saída, entrada e registradores utilizados Operandos: associados a variáveis em C Restrições: r, =r, a,b,c,...,m, ..., número Exemplo: int a=10, b; asm (“movl %1, %%eax; movl %%eax, %0;” :"=r"(b) /* saida */ :"r"(a) /* entrada */ :"%eax" /* registradores utilizados */ );

Modelos de memória Misturar modelos de memória – cláusulas tiny, small, medium, compact, large, huge Podem ser usadas para especificar o modelo para cada função Exemplo: void foo(void) small { for (i=8;i>0;i--) { P1.2 = ~P1.2; } } Intel Memory Models

Aplicações

Tempo de execução Programas onde a maior parte do tempo de execução é gasto na CPU: Algoritmos de ordenamento Instrução XCHG Cálculos matriciais Processamento de imagens, vídeos, áudio

Sistemas Tempo Real O tempo máximo de execução de uma função deve ser conhecido (ciclos de clock) O número de ciclos de clock de um programa escrito em C depende do compilador utilizado Exemplo de projeto: desenvolver o núcleo tempo real em assembly e a interface utilizador em C

Uso de memória Sistemas com memória disponível limitada Sistemas embarcados MSP430G2001 – 128B de RAM, 512B de Flash PIC10F200 – 16B de RAM, 256B de Flash Reduzir a memória necessária do programa pode reduzir as exigências de hardware e reduzir o custo do projeto instrução xchg EAX,EDX

Consumo de energia Sistemas alimentados por bateria ou energia solar Sistemas em que velocidade de execução seja menos crítica que o consumo de energia Exemplo: estação de medição autônoma

Exemplo: transmissão serial (JTAG) TDI 1 TDO 1

Exemplo: transmissão serial (JTAG) TDI: 3.5 instruções TDO: 2 instruções TDI: 4.5 instruções TDO: 3.5 instruções -30%

Conclusão

Utilização de assembly e C O uso de funções em assembly pode otimizar o código Reduzir o tempo de execução Reduzir quantidade de memória utilizada Reduzir consumo de energia Depende da aplicação Programas pequenos em computadores de alto desempenho Sistemas tempo real Sistemas com limitação de memória

Perguntas