A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "LABORG Parte 4 – Programação em Linguagem de Montagem do MIPS"— Transcrição da apresentação:

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

2 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”

3 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

4 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. 101

5 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”)

6 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: = 154 Segundo passo: = 605 Terceiro passo: = 1111 Palíndromo detectado!

7 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.

8 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.

9 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

10 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 (em caso de inacessibilildade do Moodle)

11 Apoio Área de dado paras mensagens que devem ser impressas e o n#:
.data num: .word 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”

12 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, ## imprime espaço em branco li $a0, 32


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

Apresentações semelhantes


Anúncios Google