TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

Microprocessadores e microcontroladores

Tese: Microprocessadores e microcontroladores. Pesquise 862.000+ trabalhos acadêmicos

Por:   •  13/11/2014  •  Tese  •  1.883 Palavras (8 Páginas)  •  382 Visualizações

Página 1 de 8

Experimento 2 – linguagem C

Microprocessadores e Microcontroladores

Daniely Amorim das Neves – 110113705

Lucas Viana Jorge – 110146654

Objetivos

Elaborar e apresentar um programa em linguagem C e transcreve-lo para linguagem de MIPS-light.

Introdução

A área de desenvolvimento de sistemas embutidos enfrenta problemas específicos, geralmente relacionadas com as limitações de hardware, de modo que para se otimizar busca-se a utilização de um software adequado, bem como uma linguagem de programação apropriada. Nesse contexto surge duas linguagens muito utilizadas: C e assembly. A linguagem C é muito utilizada nessa área por causa do seu fácil acesso ao hardware, baixa complexidade na sua implementação e também por possuir alto desempenho. Entretanto, a sua principal desvantagem é quanto a demora na sua execução. Deste modo, para agilizar a velocidade na execução dos códigos surge a linguagem assembly. Onde a sua principal vantagem é na alta velocidade de processamento da execução dos códigos e ocupam menos espaço na memoria. Porém o assembly possui desvantagens quanto a sua implementação, pois este não é estruturado como o C, implicando-se assim em uma alta dificuldade na sua implementação (mesmo para códigos simples).1

Com essas distinções entre essas duas linguagens, C e assembly, o experimento mostrado a seguir busca justamente a comparação entre elas bem como ver como se transcreve um código de uma linguagem para outra.

Desenvolvimento

Parte I: C

O experimento consiste em criar um algoritmo capaz de calcular a média, mediana, valor máximo e mínimo de dois vetores desordenados. Deste modo, a estratégia escolhida foi primeiramente começar ordenando os vetores. A ordenação do vetor consiste no “método da bolha”, ou seja, vai ser comparado a primeira posição do vetor com a segunda. Se a primeira for maior que a segunda, elas serão trocadas. Entretanto, caso a primeira e a segunda posição do vetor já estejam ordenados, o algoritmo segue e compara a próxima posição do vetor, ou seja, a segunda com a terceira posição do vetor ( e assim por diante). A função em C que ordena o vetor está descrita na figura1.

Figura 1: Função que ordena o vetor

De posse do vetor ordenado é possível ver qual é o valor máximo e mínimo do vetor. Para isso foi utilizado os seguintes comandos para escrever esses resultados direto na tela:

Depois para o calculo das medianas dos vetores, foram utilizados os seguintes comandos:

Onde o resultado sai direto para o vetor b, pois este possui tamanho ímpar e portanto possui apenas um elemento central. Já para o vetor a, como o seu comprimento é par, ele possui dois elementos centrais e com isso é preciso fazer a média aritmética entre eles.

Por fim, para o calculo da média foi utilizado a função descrita na figura2. Onde esta função consiste em percorrer o vetor posição a posição somando elas e guardando em uma variável, no qual o valor que será retornado vai ser a soma/(tamanho do vetor), ou seja, a será retornado a média dos vetores.

Figura2: Função que calcula a média do vetor

O código completo consta no ANEXO A.

Parte II : MIPS – light

A lógica para implementação em assembly foi a mesma utilizada para implementação em C. Para implementação do código em assembly é necessário se ter varias sub-rotinas, neste código será preciso das seguintes, cujo elas serão descritas a seguir.

Ordenamento do Vetor:

Esta subrotina, juntamente com a subrotina de troca de posições, são responsáveis pelo ordenamento do vetor de forma crescente. A subrotina está representada na figura3.

Figura2: Subrotina de ordenamento do vetor

Essa subrotina consiste de dois loops, onde o for2 é responsável por percorrer o vetor e o for1 é responsável por quantas vezes o vetor será percorrido. O tamanho do vetor está armazenado no registrador $t1, de modo que quando o contador $s0 for igual ao tamanho do vetor, a subrotina irá acabar e será retornado o vetor ordenado de onde ela foi chamada. Caso a restrição do for1 não seja satisfeita, será carregado 1 no contador do foor2 (registrador $s1) e o endereço que está contido no registrador $a0 será passado para o registrador $t5. Com isso, a restrição do for2 será testada: se $s1 for igual a $t1 (tamanho do vetor) o loop1 irá para exit1, de modo que será incrementado o contador do for1 e zerado o contador do for2, para que assim se possa percorrer o vetor novamente ordenando-o. Em seguida, será carregado a primeira posição do endereço $t5 no registrador $t2 e a segunda posição em $t3. Caso $t2 < $t3, $t4 receberá 1. Caso $t4=1, as posições $t1 e $t2 estão desordenadas, então o código irá para subrotina de troca de posição (cujo será explicada mais a frente). Caso $t4=0, as respectivas posições estão ordenadas então o código irá para exit2, de modo que o contador do foo2 ($s1) será incrementado e o endereço será deslocado de 4 posições para a direta para que assim na próxima “iteração” se possa comparar a segunda posição do vetor com a terceira, e assim por diante.

Vale salientar que para que as informações não se percam durante o processamento do código, foi utilizado a pilha para guardar informações que seriam importantes em funções posteriores.

Troca de posições:

Essa subrotina é responsável pela troca de posições do vetor na memória. Esta está descrita na figura4.

Figura4: Subrotina de troca de posições

Na figura4, percebe-se que será carregado a primeira posição a ser ordenado no registrador $t6 e a segunda no registrador $t7.

...

Baixar como (para membros premium)  txt (12.3 Kb)  
Continuar por mais 7 páginas »
Disponível apenas no TrabalhosGratuitos.com