LABORG Parte 4 – Programação em Linguagem de Montagem do MIPS

Slides:



Advertisements
Apresentações semelhantes
Pseudo-código: sintaxe
Advertisements

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.
Estruturas de Controle
Estruturas de Repetição
Entrada e Saída Introdução.
Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica e Informática – CEEI Departamento de Sistemas e Computação – DSC Máquina de.
Fernando Gehm Moraes Ney Laert Vilar Calazans
Fernando Gehm Moraes César Marcon Ney Laert Vilar Calazans
Lógica de Programação Módulo II
Recursividade Conceitos e Aplicações.
Estruturas de Controle
Linguagem C Estruturas de Controle de Fluxos
THOBER CORADI DETOFENO, MSC. Aula 07
Rodrigo de Toledo (original: Claudio Esperança)
Lógica de Programação Módulo II
Prof. Msc. Raul Paradeda Aula 2 Introdução
Estrutura de decisão e repetição em JAVA
O Portal do Estudante de Computação
Aula prática 8 Ponteiros Monitoria de Introdução à Programação
Aula prática 7 Strings Monitoria de Introdução à Programação
Ameliara Freire O comando de entrada de dados é utilizado quando desejamos fornecer um valor para um nosso programa. Os dispositivos.
Introdução à Programação
Linguagem de Montagem.
Comunicação Inclusiva Acessibilidade e Programação Web
FTIN Formação Técnica em Informática
CADEIA DE CARACTERES (Strings)
LINGUAGENS DE PROGRAMAÇÃO PROF. DANIELA PIRES
Fábio de Oliveira Borges
Estruturas de Dados Módulo 3 – Controle de Fluxo
Introdução à Programação de Computadores
DESIGN E COMUNICAÇÃO MULTIMÉDIA 2011 / 2012 DESIGN E COMUNICAÇÃO MULTIMÉDIA 2011 / 2012 FORMADOR Gonçalo Miguel MÓDULO 25. Introdução ao ActionScript 3.0.
Aula 6 - Estruturas de Controle
Algoritmo e Programação
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014
Linguagem de Programação JAVA
Geração de Código aula-12-geração-de-código.pdf.
Conceitos Básicos Luis Antonio Tavares
ALGORITMOS Intensivo Janeiro e Fevereiro de 2011
Algoritmos e Estrutura de Dados I
Introdução à Linguagem C
Aula prática 2 Operadores e Expressões Comandos de Decisão Comentários
18/19 de Maio de 2004Registos em Ficheiros1 Pedro Barahona DI/FCT/UNL Maio 2004.
Aula Prática 1 Monitoria IP/CC (~if669) (A partir do slide elaborado por Luís Gabriel)
Linguagens de Programação
Introdução aos algoritmos de programação
Fundamentos de linguagens de programação
CES-10 INTRODUÇÃO À COMPUTAÇÃO
Algoritmos.
A maior parte dos programas de computador gera uma saída resultante de um processamento que é executado sobre dados que ele recebe como entrada. Em geral.
Programação de Computadores - 1
Introdução a Programação
Programação em C Aula 4.
Arquitetura de Computadores
Programação Computacional Aula 9: Meu primeiro programa em C
Algoritmos e Programação I
Tipos de Dados Todo o trabalho realizado por um computador é baseado na manipulação das informações contidas em sua memória. Estas informações podem.
Aula prática 7 Strings Monitoria de Introdução à Programação.
Linguagem de Programação I PARTE i
Linguagem de Programação I Parte IV
Linguagens de Programação
Linguagens de Programação
Comandos de Repetição (While, Do..While e For)
11 Revisão da Linguagem C Prof. Kariston Pereira Adaptado de Material gentilmente fornecido pelo Prof. Rui Tramontin (DCC/UDESC)
CONDICIONAL IF Desenvolvido pelo Mestrando Rodrigo Moreira Barreto – VHLab (Virtual Humans Simulation Laboratory – PUCRS) 1 Desenvolvido por: Rodrigo Moreira.
Aula prática 7 Strings Monitoria de Introdução à Programação.
Linguagem de Programação
1 Estruturas de Controle Algoritmos Algoritmos –Série de ações em uma ordem específica As ações executadas Ordem na qual as ações são executadas.
DESENVOLVIMENTO Prof: Marcelo West Disciplina: Lógica de Programação.
Complete:                                                                                               a) 9 b) 36 c) 42 d) 48 e) 64.
Conteúdo de Laços de Repetição para os alunos do 7º ano EVL.
Transcrição da apresentação:

LABORG Parte 4 – Programação em Linguagem de Montagem do MIPS Fernando Gehm Moraes Matheus Trevisan Moreira 08/Abril/2015

Introdução MIPS – Um processador RISC de 32 bits Conjunto de Instruções – Usa-se o Instruction Set Architecture (ISA) do MIPS R2000, primeira geração do MIPS (década de 80) Todas as instruções ocupam 32 bits Dados mais naturalmente tratados são de 32 bits ISA do MIPS R2000 “dá suporte direto a”*: Números naturais de 32, 16 ou 8 bits Números inteiros de 32, 16 ou 8 bits Números racionais de 32 ou 64 bits Manipulação de caracteres ASCII compactados em palavras de 32 bits ou descompactados Suporte limitado a dados quaisquer de 64, 32, 16 e 8 bits “Dá suporte direto a” significa  “possui instruções específicas para manipular tais tipos de dados”

Objetivos Esta aula tem como objetivos: Dar noções de como estruturar programas em linguagem de montagem do MIPS Dar noções de como criar estruturas de dados simples no MIPS Treinar conceitos básicos de programação no MIPS Forma de realizar este treino – escrever e testar três programas: Detector de números palíndromos (60% da nota) Gerador de números palíndromos (20% da nota) Detector de overflow (20% da nota) Notar que números racionais não serão abordados aqui, pois sua representação será estudada apenas em disciplina posterior

Descrição dos Programas Detector de números palíndromos (1/2) Um palíndromo é uma palavra, frase ou qualquer sequência de símbolos que tenha a propriedade de poder ser lida tanto da direita para a esquerda como da esquerda para a direita. Ou seja, uma frase palíndroma é aquela que lida da esquerda para a direita ou da direita para a esquerda tem o mesmo sentido. Por exemplo: Oto come mocotó Socorram-me subi no onibus em marrocos Números, assim como letras, também são compostos por símbolos. Dessa forma um número palíndromo é aquele é igual quando lido em qualquer sentido. 1852581 101

Descrição dos Programas Detector de números palíndromos (2/2) Usando as instruções divu, mfhi e mflo, escreva um programa que detecte se um número é um palíndromo. O programa deve imprimir “e palindromo” quando detectar que o número é um palíndromo e “nao e palindromo” quando detectar que o número não é palíndromo. Use o pseudo-código abaixo como referência para escrever o código assembly: num=numero_a_ser_testado aux=0 while(num>0){ // Esse trecho escreve num invertido em aux aux = (aux * 10) + (num % 10) num = num / 10 } teste_palindromo = numero_a_ser_testado – aux if (teste_palindromo == 0) print(“e palindromo”) // Se num - aux for igual a 0, // o numero é palíndromo else print(“nao e palindromo”)

Descrição dos Programas Gerador de números palíndromos (1/2) A conjectura palíndroma é uma questão matemática interessante. Ela diz que: “Assumindo um número inteiro positivo qualquer, escreva o número em ordem inversa e some os dois números. Repita o processo com a soma, obtendo-se então uma segunda soma e prossiga os mesmos passos até encontrar um palíndromo.” Por exemplo: Assuma a inicialização com o número 68; Primeiro passo: 68 + 86 = 154 Segundo passo: 154 + 451 = 605 Terceiro passo: 605 + 506 = 1111 Palíndromo detectado!

Descrição dos Programas Gerador de números palíndromos (2/2) Essa conjectura afirma que é possível encontrar um palíndromo num ciclo finito de adições para qualquer número inicial escolhido. Porém, ninguém conseguiu provar até hoje se ela é verdadeira ou falsa. Modifique o programa detector de números palíndromos, de forma que, caso o número testado não seja um palíndromo, o programa gere um palíndromo a partir desse número. O programa deve imprimir o número gerado para cada passo realizado e, ao final da execução, apresentar o palíndromo gerado e informar o número de passos executados.

Descrição dos Programas Detector de overflow Até hoje ninguém conseguiu provar se a conjectura dos números palíndromos é verdadeira ou falsa e não sabemos se, de fato, é possível gerar um número palíndromo a partir de qualquer valor inteiro. Por exemplo, nenhum computador conseguiu computar até hoje um palíndromo partindo do número 196, apesar de computadores já haverem calculado centenas de milhares de passos. Essa incerteza pode ser problemática para nosso programa, pois nossa capacidade de representar valores inteiros está limitada ao tamanho do barramento do processador (32 bits). Dessa forma, para garantir a consistência dos palíndromos gerados pelo programa escrito na atividade anterior, devemos detectar condições de overflow. Modifique o gerador de palíndromos para que caso aconteça um overflow, o programa finalize sua execução e escreva um alerta de overflow para o usuário.

TRABALHO A FAZER Familiarizar-se com o ambiente de desenvolvimento MARS para o MIPS R2000 Compreender o processo de edição, montagem e simulação, incluindo operações de entrada e saída no ambiente MARS Programar as duas aplicações mencionadas aqui e mostrar que os programas funcionam usando o ambiente MARS: detecta_palindromo.asm – Dicas: Usem um label para definir um laço de repetição que implemente o while do pseudo-código. O maior problema é ler o quociente e o resto da divisão do número a cada iteração. Use a instrução divu para dividir o número por 10 e as instruções mfhi e mflo para ler os valores do resto e do quociente da divisão, respectivamente. gera_palindromo.asm – Dicas: Usem a rotina implementada para o detector de palíndromos. No caso de o número não ser um palíndromo, atualizem os valores de entrada e repitam a rotina. detector_overflow.asm

A ENTREGAR – T4 Um arquivo compactado (.zip, .rar, etc.) contendo: Os códigos dos três programas em 3 arquivos distintos (.asm) Relatório incluindo telas do MARS, mostrando a operação correta de cada um dos programas Data Final de Entrega: Ver Homepage, até antes 15min antes do horário de início da aula via sala do Moodle ou por e-mail (em caso de inacessibilildade do Moodle)

Apoio Área de dado paras mensagens que devem ser impressas e o n#: .data num: .word 1234567 ok : .asciiz "E palindromo" nok : .asciiz "NAO e palindromo" iter : .asciiz "numero de iteracoes " ovfl : .asciiz "OVERFLOW " .text … Exemplo de impressão de mensagem: ... li $v0, 4 la $a0, ok Syscall Imprime “E palindromo”

Apoio Obtenção do resto $t2 = $s1 % $t0: Divisão $s1 = $s1 / $t0 divu $s1, $t0 mfhi $t2 Divisão $s1 = $s1 / $t0 mflo $s1 Impressão do valor de $s0 (formato inteiro) no console li $v0, 36 move $a0, $s0 syscall Impressão de um espaço em branco no console li $v0, 11 ## imprime espaço em branco li $a0, 32