Você está na página 1de 49

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas

Disciplina: Laboratrio de Programao MIPS

Prof. Darlan Nunes de Brito

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

SUMRIO
SUMRIO ................................................................................................................................................... 2 NDICE DE FIGURAS ................................................................................................................................. 4 NDICE DE TABELAS ................................................................................................................................. 4 NDICE DE PROGRAMAS .......................................................................................................................... 5 INTRODUO ............................................................................................................................................ 6 AULA PRTICA 01 Ambiente de programao ....................................................................................... 7 OBJETIVO: .............................................................................................................................................. 7 INTRODUO ........................................................................................................................................ 7 MARS ...................................................................................................................................................... 7 SIMULANDO O PROGRAMA................................................................................................................ 11 ATIVIDADE ........................................................................................................................................... 13 AULA PRTICA 02 Instues lgicas, aritmticas e transferncia de dados ........................................ 14 OBJETIVO: ............................................................................................................................................ 14 INTRODUO ...................................................................................................................................... 14 ATIVIDADES ......................................................................................................................................... 14 AULA PRTICA 03 Transferncia de controle ....................................................................................... 17 OBJETIVO: ............................................................................................................................................ 17 INTRODUO ...................................................................................................................................... 17 ATIDIDADES ......................................................................................................................................... 17 AULA PRTICA 04 Fluxograma e diretivas ........................................................................................... 20 OBJETIVO: ............................................................................................................................................ 20 INTRODUO ...................................................................................................................................... 20 FLUXOGRAMA ..................................................................................................................................... 20 Entrada de dados......................................................................................................................... 20 CHAMADAS DE SISTEMA SYSCALLS ................................................................................................ 23 DIRETIVAS DE PROGRAMAO ........................................................................................................ 25 ATIVIDADES ......................................................................................................................................... 27 AULA PRTICA 05 While e condies < e > ......................................................................................... 29 OBJETIVO: ............................................................................................................................................ 29 INTRODUO ...................................................................................................................................... 29 LOOP WHILE ........................................................................................................................................ 29 COMPARANDO < ............................................................................................................................... 30 ATIVIDADES ......................................................................................................................................... 33

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

AULA PRTICA 06 Nmeros de ponto flutuante ................................................................................... 34 OBJETIVO: ............................................................................................................................................ 34 INTRODUO ...................................................................................................................................... 34 ATIVIDADES ......................................................................................................................................... 35 Aula Prtica 07 Procedimentos .............................................................................................................. 41 OBJETIVO ............................................................................................................................................. 41 INTRODUO ...................................................................................................................................... 41 Usando outros registradores .............................................................................................................. 41 ATIVIDADES ......................................................................................................................................... 43 Aula Prtica 8 Procedimentos aninhados .............................................................................................. 45 OBJETIVO ............................................................................................................................................. 45 INTRODUO ...................................................................................................................................... 45 ATIVIDADE ........................................................................................................................................... 48 Bibliografia ................................................................................................................................................ 49

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

NDICE DE FIGURAS
Figura 1 - Janela de abertura do MARS...................................................................................................... 7 Figura 2 - Opes da aba Arquivo .............................................................................................................. 8 Figura 3 - Editor de texto do MARS ............................................................................................................ 8 Figura 4 - Janela para salvar o projeto........................................................................................................ 9 Figura 5 - Opes da aba Run .................................................................................................................... 9 Figura 6 Programa compilado ................................................................................................................ 10 Figura 7 - Janela de menssagens do MARS ............................................................................................. 10 Figura 8 - Depurao de programa ........................................................................................................... 11 Figura 9 - Botes de execuo do programa ............................................................................................ 11 Figura 10 - Barra de velocidade de execuo do programa ..................................................................... 12 Figura 11 - Janela do programa ................................................................................................................ 12 Figura 12 - Janela de segmento de dados ................................................................................................ 12 Figura 13 - Janela de registradores .......................................................................................................... 12 Figura 14 - Valores da memria no programa 2 ....................................................................................... 15 Figura 15 - Fluxograma para o exemplo do caminho .............................................................................. 22 Figura 16 - Janela Run I/O ........................................................................................................................ 25 Figura 17 - Fluxograma do programa exemplo syscall ............................................................................. 26 Figura 18 - Fluxograma exemplo slt e slti ................................................................................................. 31 Figura 19 - Fluxograma do clculo do valor da carga ............................................................................... 36

NDICE DE TABELAS
Tabela 1 Instrues lgicas e aritmticas MIPS .................................................................................... 15 Tabela 2 - Tabela Verdade do exemplo do caminho............................................................................... 21 Tabela 3 - Conjunto de comandos para syscall ........................................................................................ 24 Tabela 4 - Condies para o programa de ordenao de nmeros .......................................................... 28 Tabela 5 - Operaes bsica de ponto flutuante ...................................................................................... 34 Tabela 6 - Cdigos dos estados ............................................................................................................... 35 Tabela 7 - Cdigo da carga ....................................................................................................................... 35 Tabela 8 - Atividade 6.2 de preo da carga .............................................................................................. 36 Tabela 9 Porcentagem de imposto sobre salrio ................................................................................... 39 Tabela 10 - Aumento de salrio ................................................................................................................ 40 Tabela 11 - Classificao quanto ao salrio ............................................................................................. 40

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

NDICE DE PROGRAMAS
Programa 1 - Soma 3 nmeros ................................................................................................................... 8 Programa 2 - Carga e armazenamento de dados ..................................................................................... 14 Programa 3 - Instrues lgicas ............................................................................................................... 16 Programa 4 - Instrues de transferncia condicional .............................................................................. 18 Programa 5 - Implementao da funo for e if aninhados ....................................................................... 18 Programa 6 - Soluo do problema do silo ............................................................................................... 22 Programa 7 - Demonstrao de diretiva e syscall ..................................................................................... 27 Programa 8 - Compilao do loop while ................................................................................................... 29 Programa 9 - Soma nota de alunos e etapas ............................................................................................ 31 Programa 10 - Operaes de ponto flututante .......................................................................................... 37 Programa 11 Chamada de procedimento .............................................................................................. 42 Programa 12 Chamada de procedimento com armazenamento de registradores ................................. 43 Programa 13 Procedimento aninhado em C .......................................................................................... 45 Programa 14 Procedimento aninhado em assembly.............................................................................. 45 Programa 15 Procedimento recursivo em C .......................................................................................... 47 Programa 16 Procedimento recursivo em assembly .............................................................................. 47

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

INTRODUO
Este curso busca criar uma fundamentao mnima para aplicao da linguagem assembler em sistemas dedicados que tem como plataforma bsica os microprocessadores que utilizam a arquitetura MIPS. Existem dois pontos que justificam o estudo de linguagem assmbler. O primeiro e mais importante deles que o programador to melhor quanto ele conhece a mquina que est programando este motivo por si s justificaria o aprendizado dessa linguagem de programao. Mas no apenas isto mesmo que voc no ir programar computadores mesmo em linguagem de alto nvel, muitas vezes voc como engenheiro ou analista de sistema, ou grente de banco de dados ser chamado para especificar equipamentos para compra ou precisar indicar substituies de equipamentos com tecnologia ultrapassada para isto tambm ser necessrio um conhecimento profundo do que cada equipamento capaz de fazer, este conhecimento vem com conhecimento interno do computador e do processador. O segundo fator que tambm importante que muitos de voc podero trabalhar em empresas de desenvolvimento de equipamentos. Na ltima dcada vimos o Brasil se tornar atrativo para o capital externo com uma economia slida e um mercado com grande crescimento, isto tem atrado empresas de todo mundo e junto com estas empresas alguns centros de desenvolvimento. Ento com esta nova realidade possvel que alguns de vocs sejam chamados a trabalhar desenvolvendo novos produtos, estes muitas vezes utilizam microcontroladores e microprocessadores como unidade de processamento. Ento fundamental ter uma base slida na programao destes circuitos integrados. Ento vem a pergunta, existe um nmero extremamente grande de circuitos integrados como este no mercado, cada um com caractersticas diferentes ento possvel que se aprenda como funciona cada um destes circuitos integrados, microprocessadores e microcontroladores? A resposta para esta pregunta simples, no. Ento o que fazer? Escolheremos ento apenas uma destas tecnologias e estudaremo-las com base para todas as outras, fazendo comparativos entre as diferentes tecnologias. A tecnologia escolhida a dos microprocessadores com a filosofia MIPS, que um processador RISC e por isto com um conjunto de instrues simples e consequentemente um funcionamento interno tambm simples, o que facilita o aprendizado. Mesmo utilizando um processador com um conjunto de instrues simples e uma arquitetura interna igualmente simples, devemos observar que este estudo no uma tarefa simples. Aprender o funcionamento e a programao de microprocessadores e microcontroladores uma tarefa rdua que ir exigir uma dedicao muito grande de todos os alunos. Sabemos desta dificuldade, e caminharemos no sentido de tentar diminuir esta dificuldade, mas esta tarefa muito mais difcil do que o aprendizado de vocs, pois ela envolve uma mudana de paradigma na forma de estudar, pois exige uma capacidade de formulao lgica muito maior do que vocs esto normalmente acostumados. Queremos dizer ento que o trabalho rduo para todos, mas que tenho certeza de que todos somos capazes de conseguir um bom resultado, que o entendimento do funcionamento deste pequeno e maravilhoso pedao de silcio que so os chips programveis.

Atenciosamente Darlan Nunes de Brito

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

AULA PRTICA 01 Ambiente de programao


OBJETIVO: Introduzir o ambiente de programao MARS.

INTRODUO Para que possamos estudar uma nova linguagem de programao fundamental escolher um ambiente de programao onde possvel executar os programas que elaboramos. Para este curso escolhemos O MARS por ser uma ferramenta de software livre e de fcil utilizao j que no necessita instalo. Mas existem outros compiladores tais como o SPIM entre outros. O primeiro passo estudar o ambiente escolhido. MARS O programa ser aberto clicando 2 vezes sobre o arquivo. Voc observar como na Figura 1 a janela, MARS 4.1

Figura 1 - Janela de abertura do MARS

Observe a Barra de Ferramentas horizontal, nela temos vrios botes: File, Edit, Run, Settings, Tools e help. Clique no boto File e escolha a opo New, como mostrado na Figura 2 a seguir:

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

Figura 2 - Opes da aba Arquivo

A nova janela o Editor de texto do MARS, local onde voc dever digitar o seu programa. Veja Figura 3:

Figura 3 - Editor de texto do MARS

Voc pode inserir o seu programa que neste caso o cdigo apresentado a seguir:
################################################################### Programa 1 - Soma 3 nmeros # Este programa soma 3 nmeros que est nos registradores $s1, $s2 e $s3 ################################################################### .text Inicio: add $t0,$s1,$s2 add $t0,$t0,$s3

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

No se esquea de salvar o seu programa. Aparecer a janela Save as, Figura 4. Localize a sua pasta e na caixa denominada File Name digite o nome escolhido, exemplo: Exercicio01.asm ( importante a extenso .asm).

Figura 4 - Janela para salvar o projeto

O programa que acabamos de digitar e salvar um arquivo do tipo texto. Em outras palavras, ele no pode ser executado. Temos que compilar, montar e linkeditar para que possamos faz-lo: 1. Compilar o processo de verificao dos erros de sintaxe, ou seja, o compilador verificar se voc digitou alguma instruo incorretamente ou deixou de declarar alguma informao fundamental para a execuo do programa. Para compilar v Barra de Ferramentas Horizontal e clique sobre o boto Run, aparecer uma janela com vrias opes, escolha a opo Assemble e clique sobre ela, veja Figura 5.

Figura 5 - Opes da aba Run

A prxima tela o seu programa pronto para ser executado, caso no haja nenhum erro. Observe que nesta janela, mostrada na Figura 6, h uma janela chamada Mars Messages, nesta janela que aparece se as aes tomadas pelo compilador foram bem sucedidas ou no. Caso haja algum erro a janela Execute no aparece e na janela chamada Mars Messages que aparece onde esto e quais so os erros de compilao, conforme mostrado na Figura 7.

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

Figura 6 Programa compilado

Figura 7 - Janela de menssagens do MARS

O compilador informa o arquivo que deu o erro e qual a linha do arquivo texto apresentou o erro e qual foi este erro. No entanto ao clicar no erro o programa no ir diretamente para a linha que deu erro logo preciso identificar a linha de forma manual. 2. Montar traduzir o texto digitado em linguagem de mquina, gerando um arquivo objeto. Este passo realizado no momento que voc compila o seu programa. 3. A linkedio s pode ser executada se NO houver erros na montagem, caso contrrio eles tm que ser resolvidos. Linkeditar consiste em inserir no cdigo objeto informaes relativas ao sistema operacional. Alguns programas so construdos em mdulos distintos. Esses mdulos tm que ser ligados formando um nico projeto atravs da linkedio. A linkedio gera um arquivo executvel do programa. Como o prprio nome indica o arquivo que o computador executar. Este passo tambm realizado no momento que voc compila o seu programa. Ento depois de compilar corretamente o seu programa est pronto para ser simulado. A simulao feita executando cada linha do programa e verificando o estado dos registradores e/ou da memria a cada linha executada.

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

SIMULANDO O PROGRAMA As etapas anteriores foram executadas para criar um programa que pudesse ser executado pelo microprocessador. Apesar de haver uma etapa para verificao de erros, esta etapa no verifica erros de lgica de programao, apenas erros de sintaxe. Para encontrar erros de lgica preciso executar o programa e avaliar o estado dos registradores e da memria durante a execuo. Este recurso de executar parte do programa chamado de depurao ou debug. O MARS oferece uma ferramenta de depurao que apresentada na Figura 8

Figura 8 - Depurao de programa

Os campos desta ferramenta so: I. Programa que dever ser executado, e os comentrias. II. Espao de memria, segmento de dados. III. Espao de registradores. Na janela possvel observar ainda a barra de botes que possui os botes utilizados para executar o programa. Estes botes so mostrados na

Figura 9 - Botes de execuo do programa

Os botes acima so: I. Executa o programa inteiro ou at que seja encontrado um breakpoint. II. Executa apenas um passo uma linha de programa. III. Retorna um passo atrs no programa. IV. Quando o programa muito grande esta tecla pode ser utilizada para dar uma pausa no programa. V. Para a execuo do programa. VI. Reinicializa a execuo do programa. H uma barra para determinar a velocidade de execuo como mostrado na Figura 10

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

Figura 10 - Barra de velocidade de execuo do programa

A janela que contm o programa a janela de text segment.

Figura 11 - Janela do programa

A janela acima contem os seguintes campos: Bkpt um check-box. Quando marcado o programa para a execuo na linha que est marcada. Address o endereo de memria onde est armazenada a instruo. Code o cdigo em hexadecimal da instruo. Basic a converso do cdigo contendo os endereos dos registradores. Source So as linhas do texto que porduziram as linhas de cdigo. A janela que contm os dados a janela de data segment, apresentada na Figura 12.

Figura 12 - Janela de segmento de dados

Na janela acima possvel observar os campos: Address Endero base da memria de dados. Value(+X) Indica valor que est armazendo no endereo de memria que calculado pelo endereo base (que aparece no incio da linha) mais o valor de X. Estes valores podem ser alterados apenas clicando-se sobre eles. Setas verdes Avana ou retrocede os endereos da coluna address. A janela de registradores mostrada na Figura 13.

Figura 13 - Janela de registradores

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

Esta janela mostra os nomes dos registradores, o endereo e os valores que esto armazenados. Os valores dos registradores podem ser alterados apenas clicando sobre o campo de value.

ATIVIDADE 1.1 Para executar o Programa 1, coloque os valores nos registradores $s1 = 3 , $s2 = 458 e $s3 = 10496. a. Execute o programa passo a passo e anote o valor no registrador $t0 aps cada passo. b. Os valores esto corretos? 1.2 Faa as modificaes necessrias para que o programa some 4 nmeros. O quarto nmero est armazenado no registrador $s6. a. Execute o programa passo a passo e faa uma tabela contendo os valores dos registradores aps cada passo. b. Os valores no item a esto corretos? c. Coloque um break point na ltima linha do programa e execute utilizando a tecla de execuo do programa inteiro. O que voc observou? 1.3 Mude o Programa 1 para que sejam utilizados os registradores $t5, $s7, $s5 e $s4. 1.4 Kirk hamer um menino muito bonzinho ento sua me resolveu lhe dar 0xABh reais. Sua tia que tambm muito generosa e gosta muito dele resolveu lhe dar 0x1CFh reais. Faa um programa que determine a quantidade total de dinheiro que ele ficou. a. Como Kirk um menino muito generoso deu 0xBEh reais para o seu coleguinha Lars. Modifique o seu programa para determinar o novo valor que Kirk ficou. Obs.: Considere que o valor dado pela me est no registrador $s0. O valor dado pela tia no registrador $s1 e o valor dado ao coleguinha Lars no registrador $s2. b. Execute os dois programas passo a passo e verifique o seu funcionamento. 1.5 Hermenegildo tem uma microempresa de venda de microprocessadores Intel. Para abrir a empresa ele fez uma primeira compra de 3 processadores core i3 4 processadores core i5 e 6 core i7. Na primeira venda ele vendeu 2 core i3 1 core i5 e 5 core i7. Percebendo que as vendas estavam boas ele fez a segunda compra que de mais 10 processadores core i3, 15 core i5 e 30 core i7. Faa um programa que determine a quantidade de processadores de cada tipo que ficaram aps a primeira venda. A quantidade de processadores que ficaram de cada tipo aps a segunda compra de processadores. O programa dever somar tambm o nmero total de processadores. Considere que os valores da primeira compra esto nos registradore $s0 Core i3, $s1 Core i5 e $s2 Core i7. As quantidades de processadores comprados na segunda compra esto nos registradores $s3 Core i3, $s4 Core i5 e $s5 Core i7. a. Execute o programa e verifique o seu funcionamento. Para isto entre com os dados nos registradores manualmente.

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

AULA PRTICA 02 Instues lgicas, aritmticas e transferncia de dados


OBJETIVO: Estudar o conjunto de instrues aritmticas, lgicas e de transferncia de dados do MIPS. INTRODUO Uma instruo simplesmente um conjunto de bits ao qual o processador responde executando uma tarefa especfica. A programao em assembly utilizando o cdigo binrio das instrues. Seria uma tarefa muito difcil programar em linguagem binria, considerando que processadores podem ter um conjunto de 500 ou mais instrues com prefixos e sufixos que alteram a forma como as instrues so executadas. Alm do mais, seria uma tarefa extremamente entediante e demorada o que no esta de acordo com as necessidades dos novos tempos. Na tentativa de facilitar a programao de microprocessadores no nvel mais baixo foi criada uma linguagem que se aproxima mais da linguagem humana, esta linguagem chamada de linguagem de mnemnicos. Os mnemnicos so instrues de 3 ou 4 letras que so traduzidas por um compilador para linguagem binria. O nome que se d ao conjunto de todas as instrues que o processador capaz de executar conjunto de instrues. A construo de um programa para um microprocessador conseguida utilizando apenas combinaes das instrues do conjunto de instrues especfico. As tecnologias de construo do conjunto de instrues so divididos em dois grandes grupos CISC e RISC. Processadores CISC (Complex Instruction Set Computer) possuem um conjunto complexo de instrues, sendo assim possui um nmero grande de mnemnicos disponveis para utilizao. Processadores RISC (Reduced Instruction Set Computer) ao contrrio possuem um conjunto reduzido de instrues, logo um pequeno nmero de mnemnicos. O processador que estudaremos um processador RISC, com uma arquitetura bastante conhecida chamada MIPS. O conjunto de instrues aritmticas, lgicas e de transferncia de dados que o processador MIPS capaz de executar pode ser visualizado na Tabela 1. ATIVIDADES 2.1
############################################################################### Programa 2 - Carga e armazenamento de dados # Este programa utilizado para carregar e salvar na memria os valores dos registradores ###############################################################################

.text Inicio: lw lw add sw

$s0,0($s3) $s1,4($s3) $s2,$s0,$s1 $s2,8($s3)

Preencha o registrador $s3 com o valor 0x10010000, na janela Data Segment preencha os endereos de memria 0x10010000 com o valor 0x0000000a e o endereo 0x10010004 com o valor 0x00000003 conforme mostra a Figura 14. Execute o programa passo a passo e verifique em cada passo o valor dos 4 registradores $s0, $s1, $s2 e $s3.

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

Figura 14 - Valores da memria no programa 2

Categoria

Instruo Soma

Exemplo add $s0, $s1, $s2 sub $s0, $s1, $s2 addi $s0,$s1,$s2 or $s0,$s1,$s2 and $s0,$s1,$s2 xor $s0,$s1,$s2 nor $s0,$s1,$s2 lw $s0,200($s1) sw $s0,512($s1)

Significado $s0 = $s1 + $s2

Comentrio Utiliza sempre 3 operandos

Aritmtica

Subtrao Soma imediata Lgica or bit a bit Lgica and bit a bit Lgica xor bit a bit Lgica nor bit a bit Carga Armazena mento

$s0 = $s1 - $s2 $s0 = $s0 + 45 $s0 = $s1 | $s2 $s0 = $s1 & $s2 Utiliza sempre 3 operandos $s0 = $s1^$s2 $s0 = !($s1 | $s2) $s0 = Mem[200+$s1] Mem[512+$s1]=$s0 Transfere dados da memria Transfere dados para a memria Usado para somar uma constante

Lgica

Transferncia de dados

Tabela 1 Instrues lgicas e aritmticas MIPS

2.2 Faa uma alterao no Programa 2 para que o endereo base dos dados esteja no registrador $t0. 2.3 Faa a alterao do Programa 2 para que os registradores de destino dos dados carregados sejam os registradores $s7, $s6 e $s5. 2.4 Utilizando o programa acima carregue os valores 34 e 25 a partir do endereo 0x10010048 e armazene a resposta no endereo 0x10010060 2.5 Faa a decodificao manual das instrues do Programa 2. Confira a sua decodificao verificando os endereos de memria a partir do 0x00400000. 2.6 Faa a alterao no programa da atividade 1.5 para que os valores de compra e venda dos processadores estejam armazenados na memria a partir do endereno 0x10010000. 2.7 Para cada linha do Programa 2 diga quais so os tipos de endereamento existente.

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

2.8 Faa programas que realize as operaes lgicas abaixo, as variveis A, B e C so valores inteiros: A) () B) 2.9 Faa uma tabela com o valor previsto e observado para os registradores $s3, $s4, $s5, $s6 e $s7. Os valores de A e B devero ser lidos da memria e so 12 e 23 respectivamente.
############################################################################### Programa 3 - Instrues lgicas # Programa utilizado para realizar operaes lgicas ###############################################################################

.text Inicio: lw lw ori andi xori nor and nor sll

$s1,0($s0) $s2,4($s0) $s3,$s1,8 $s4,$s1,8 $s5,$s1,8 $s6,$s1,$zero $s7,$s1,$s2 $s7,$s7,$zero $s2,$s2,8

#Y = A + 8 #Y = A + 8 #Y = A #Y = #Y = A . B #Esta instruo junto com a anterior forma lgica nand. Y = #Y = B << 8

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

AULA PRTICA 03 Transferncia de controle


OBJETIVO: Estudar instrues de transferncia de controle. INTRODUO Na grande maioria dos programas necessrio tomar alguma deciso que mude a sequncia lgica de execuo, por exemplo, se A == B faa a soma de A + B seno faa A B. Estas instrues que realizam estes testes tambm so utilizadas para mudar a prxima instruo que o processador ir executar por isto estas instrues so chamadas de transferncia de controle. Instrues de transferncia de controle so divididas em 2 grandes grupos instrues de transferncia condicionais e incondicionais. Nas transferncias incondicionais nenhuma condio de nenhum registrador avaliada antes do salto, o que implica que quanto a instruo executada o salto tomado. Nas transferncias de controle condicionais os estados dos registradores so avaliados para decidir ser ocorrer ou no o desvio. As duas instrues mais bsicas de transferncia de controle condicionais so bne e beq. A instruo bne compara dois registradores e desvia caso estes registradores sejam diferentes, beq desvia caso os registradores sejam iguais. Os prottipos destas funes so: beq $<registrador 1>,$<registrador 2>,<Rtulo destino do salto> Exemplo beq $s1,$s2,Incio bne $<registrador 1>,$<registrador 2>,<Rtulo destino do salto> Exemplo bne $s1,$s2,Incio A instruo que muda a sequncia de execuo mesmo no havendo nenhuma condio, a instruo j (jump), esta instruo responsvel por desviar o programa quando executada independente de qualquer condio. O prottipo desta funo : j <Rtulo destino do salto>

Exemplo j Fim ATIDIDADES 7.1 Carregue o endereo de memria 0x10010000 com o valor 8 e o endereo 0x10010004 com o valor 4. Estes dados devem ser lidos para os registradores $s1 e $s2. Defina quantas vezes o Loop ser executado. Execute o Loop passo a passo e anote os valores dos registradores $s1 e $s2 aps cada iterao.

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

############################################################################### Programa 4 - Instrues de transferncia condicional # Programa utilizado visualizar instrues de transferncia de controle condicional ###############################################################################

.text Inicio: lw lw Loop: addi bne 7.2

$s1,0($s0) $s2,4($s0) $s2,$s2,1 $s1,$s2,Loop

############################################################################### Programa 5 - Implementao da funo for e if aninhados # Programa utilizado visualizar instrues de transferncia de controle condicional ###############################################################################

.text Incio: lw $s1,0($s0) lw $s2,-4($s0) Incializar_Para: addi $s3,$zero,10 Loop_Para: beq $s3,$zero,Fim bne $s1,$s2,seno addi $s1,$s1,1 j Fim_se senao: add $s1,$s1,$s2 Fim_se: addi $s3,$s3,-1 j Loop_Para Fim: O programa acima executa a funo que pode ser representada em C da seguinte forma: for(i = 10;i > 0;i = i 1){ if(A == B){ A = A + 1; } else{ A=A +B } }

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

Carregue o endereo de memria 0x10010000 com o valor 65535 e o endereo 0x10010004 com o valor 65535. Estes dados devem ser lidos para os registradores $s1 e $s2. Execute o Loop passo a passo e anote em uma tabela os valores dos registradores e a deciso tomada em cada instruo de desvio. 7.3

A figura acima representa uma esteira com sensor policromtico este sensor capaz de detectar as cores e as misturas de cores mostradas nos crculos ao lado e ainda a falta de todas elas, o preto. No sistema acima aps a caixa passar pelo sensor a esteira para a qual este sensor direcionado escolhido de acordo com a cor da caixa seguindo o padro descrito abaixo. 1. Preta E2 2. Azul E1 3. Verde E1 4. Ciano E1 5. Vermelho E2 6. Magenta E2 7. Amarela E3 8. Branca E3 Sabendo que este sensor ir indicar apenas a ausncia ou presena de cada cor ou mistura de cores encontre o circuito simplificado que resolva o problema descrio acima e faa um programa para MIPS que execute a soluo simplificada.

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

AULA PRTICA 04 Fluxograma e diretivas


OBJETIVO: Construo de programas atravs de fluxograma. Chamadas de sistema e diretivas de programao utilizando o MARS.

INTRODUO A construo de programas uma tarefa de grande complexidade principalmente para quem iniciante. Existem ferramentas que auxiliam nesta rdua de tarefa de programar. As ferramentas que existem so pseudo-cdigo e linguagem de fluxograma. O primeiro mais utilizado para programao em alto nvel, pois a forma de construo do pseudo-cdigo est mais prximo dos comandos da linguagem de programao de alto nvel. J para linguagens de mais baixo nvel, como a linguagem de mnemnicos a ferramenta mais apropriada para construo de algoritmos a de fluxograma. FLUXOGRAMA A linguagem de fluxograma consiste em uma srie de smbolos que servem na orientao do fluxo que o programa deve seguir, da o nome. Por ser uma linguagem grfica que facilita consideravelmente a tarefa de transformar um problema em um programa em linguagem de mnemnicos. Os smbolos utilizados na linguagem de fluxograma so: Incio e termino de um programa Operao de atribuio e chamada ou retorno de subalgoritmo Entrada de dados Sada de dados Deciso

A seguir vemos um exemplo de utilizao dos fluxogramas Exemplo 4.1 Uma fazenda possui um silo de carregamento de soja. Esta empresa tem a inteno de automatiz-lo. O objetivo que ocorra o carregamento automtico de caminhes. Considere que quando o sensor est acionado ou a vlvula aberta assumem nvel lgico 1, e quando no acionado e a vlvula fechada nvel lgico 0. Para este problema ser desconsiderado o sensor S4. Para fazer este carregamento necessrio fazer um programa que que tenha as seguintes caractersticas

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

A) Em qualquer condio onde nenhum sensor indique soja a vlvula V2 deve ser fechada, aberta a vlvula V1 e no dever ter alarme. B) Se S3 indicar soja S1 e S2 no indicar dever ser fechado V2, aberto V1 e desligado o alarme. C) Em qualquer condio que S2 indique soja e S3 no dever soar um alarme de falha e as vlvulas fechadas. D) Em qualquer condio que S2 no indique soja e S1 indique, dever ser tambm acionado um alarme de falha e as vlvulas fechadas. E) Caso S2 no indique soja e S3 indique, a vlvula V2 dever ser fechada e V1 aberta e no dever soar alarme. F) Caso o nvel do silo estiver acima de S2, e no houver condio de falha V2 dever ser aberta. G) Caso S1, S2 e S3 indique soja a vlvula V1 dever ser fechada e V2 dever ser aberta. H) Qualquer condio que no aparea aqui o alarme dever ser desligado e as vlvulas fechadas Resposta Na Tabela 2 vemos como fica a tabela verdade para o problema acima S3 0 0 0 0 1 1 1 1 S2 0 0 1 1 0 0 1 1 S1 0 1 0 1 0 1 0 1 V1 1 0 0 0 1 0 0 0 V2 0 0 0 0 0 0 1 1 AL 0 1 1 1 0 1 0 0

Tabela 2 - Tabela Verdade do exemplo do caminho

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

Construo do fluxograma
Inicio

SIM
s3 == 0 s2 == 0 V1 = 0 V2 = 0 AL = 1 V1 = 0 V2 = 0 AL = 1 V1 = 1 V2 = 0 AL = 0

SIM NO

s1 == 0

SIM NO

NO
NO
V1 = 0 V2 = 1 s2 == 0

V1 = 0 V2 = 0 AL = 1

V1 = 1 V2 = 0 AL = 0

SIM
s1 == 0

SIM

NO
AL = 0

Fim
Figura 15 - Fluxograma para o exemplo do caminho

Construo do programa utilizando o fluxograma da Figura 15. Como podemos observar a soluo do Exemplo 4.1 o problema facilmente transformado em um programa quando se tem o fluxograma. Esta tarefa se tornar to mais fcil quanto melhor for seu fluxograma.
############################################################################### Programa 6 - Soluo do problema do silo # Programa utilizado para soluo do problema do caminho utilizando fluxograma ###############################################################################

.text Inicio: beq $s3,$zero,S3_0 S3_1: beq $s2,$zero,S3_1_S2_0 S3_1_S2_1: addi $t1,$zero,0 addi $t2,$zero,1 addi $t3,$zero,0

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

j Fim S3_1_S2_0: beq $s1,$zero,S3_1_S2_0_S1_0 S3_1_S2_0_S1_1: addi $t1,$zero,0 addi $t2,$zero,0 addi $t3,$zero,1 j Fim S3_1_S2_0_S1_0: addi $t1,$zero,1 addi $t2,$zero,0 addi $t3,$zero,0 j Fim S3_0: beq $s2,$zero,S3_0_S2_0 S3_0_S2_1: addi $t1,$zero,0 addi $t2,$zero,0 addi $t3,$zero,1 j Fim S3_0_S2_0: beq $s1,$zero,S3_0_S2_0_S1_0 S3_0_S2_0_S1_1: addi $t1,$zero,0 addi $t2,$zero,0 addi $t3,$zero,1 j Fim S3_0_S2_0_S1_0: addi $t1,$zero,1 addi $t2,$zero,0 addi $t3,$zero,0 Fim: CHAMADAS DE SISTEMA SYSCALLS O simulador de MIPS, MARS oferece uma srie de chamadas de sistema que so responsveis por realizar tarefas de responsabilidade do sistema operacional. So exemplos destas tarefas entrada de dados a partir do teclado e escrita de mensagens na tela. Existem uma srie de outras tarefas, a lista completa de chamadas de sistema (Syscalls) com a descrio de cada uma destas chamadas pode ser encontrada na ajuda (help) do programa MARS. Uma chamada de sistema nada mais do que o processador passando o controle para o sistema operacional e a partir da executada uma subrotina do sistema operacional responsvel por realizar a tarefa especificada.

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

Entrada e Sada de dados As chamadas de sistema mais utilizadas so para entrada e sada de dados. Atravs da descrio destas chamadas tentaremos entender como funcionam as chamadas de sistema. Como usar uma chamada de sistema? Os passos so:

1. Carrega o nmero do servio no registrador $v0, alguns cdigos de servio so mostrados na Tabela 3. 2. Carregue os argumentos necessrios nos registradores $a0, $a1, $a2 ou $f12. 3. Chame a instruo syscall. 4. Aps o passo 3 o valor de retorno, se houver, estar no registrador especificado pela chamda.

Servio

Imprima inteiro Imprima PF Imprima double Imprima string Leia inteiro Leia float Leia double Leia string

Cdigo em Argumentos $v0 um 1 $a0 = Inteiro para imprimir 2 3 4 5 6 7 8 $a0 = endereo do buffer de entrada $a1 = nmero mximo de caracteres para serem lidos $f12 = ponto flutuante para imprimir $f12 = double para imprimir

Resultado

O inteiro lido estar no registrador $v0 O nmero de PF lido estar no registrador $f0 O double lido estar no registrador $f0

Termina programa Imprima caractere Leia caractere

o 10 um 11 um 12
Tabela 3 - Conjunto de comandos para syscall

$a0 = caracter para imprimir O caractere registrador $v0 lido no

A interface de entrada e sada do usurio no programa MARS a janela Run I/O, mostrada na Figura 16. atravs desta janela que so mostradas as mensagens, caracteres e valores inteiros e nesta janela que o usrio entra com os dados.

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

Figura 16 - Janela Run I/O

DIRETIVAS DE PROGRAMAO As Diretivas so instrues assembler que so escritas no cdigo-fonte, mas no so transformadas em cdigos operacionais. O compilador orientado atravs das diretivas quando monta o arquivo executvel. Portanto, as diretivas no so gravadas na memria de programa do controlador. A partir das Diretivas, o programador descreve as correlaes existentes entre os nomes empregados no cdigo-fonte com os bits, registros e constantes previstos para uso no programa. Cada compilador possui um conjunto de diretivas diferentes, com funes diferentes. Todas as diretivas do compilador MARS iniciam com ponto, so elas: .align Alinha o prximo item de dadoe em uma fronteira especfica (0=byte, 1=half, 2=word, 3=double) .ascii Armazena a string no segmento de dados mas no adiciona o caractere terminador nulo. .asciiz Armazena a string no segmento de dados e adiciona o caractere terminador nulo. .byte Armazena uma lista de valores de 8 bits, um byte. .data Itens subsequentes so armazenados a partir do endereo 0x10010000 (Segmento de dados), no prximo endereo disponvel. .double Armazena os valores listados como ponto flutuante de preciso dupla. .extern Declara os rtulos listados e bytes serem campos de dados globais que podem ser lidos de outros arquivos do mesmo projeto. .float Armazena os valores listados como um ponto flutuante de preciso simples. .globl Declara os rtulos listados como global habilitando eles para serem referenciados em outros arquivos. .half Armazena os valroes listados como meia palavra 16 bits em um alinhamento de 16 bits. .kdata Itens subsequentes so armazenados no segmento de dados do kernel no prximo endereo disponvel .set Incializa variveis assembler. Ignorado mas includo para manter compatibilidade com SPIM. .space Reserva os prximos n bytes no segmento de dados. .text O itens subsequentes (instrues) so armazenados no segmentos de Text no prximo endereo disponvel .word Armazena os valores listados como palavras de 32 bits com um alinhamento de word. As diretivas mais importantes das descritas acima so .text e .data, sendo que a primeira define o espao onde ser armazenado o programa e a segunda o espao onde ficar os dados. A diretiva .data informa que os dados logo abaixo dela sero armazenados na memria a partir do endereo 0x10010000. J a diretiva .text informa que as instrues abaixo dela sero armazenadas a partir do endereo 0x04000000.

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

O Exemplo 4.2 mostra um programa simples que l um caracter do usurio e escreve uma mensagem na tela de acordo com o caracter lido. Exemplo 4.2 Faa um programa que leia um nmero entrado pelo usurio, se este nmero for igual a 6 escreva Cruzeiro 6 x 1 Atletico, seno escreva Cruzeiro campeao mineiro 2011. Resposta

Incio Escreva: Entre com um valor [6 para placar brasileiro 2011]

Leia opo usurio Valor == 6? No Escreva: Cruzeiro campeo mineiro 2011 Sim Escreva: Cruzeiro 6 x Atltico 1

Fim
Figura 17 - Fluxograma do programa exemplo syscall

A Figura 17 mostra o fluxograma simplificado do programa exemplo da utilizao do syscall. No Programa 7 temos a transformao deste fluxograma em um programa.

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

############################################################################### Programa 7 - Demonstrao de diretiva e syscall # Programa utilizado para soluo do problema do caminho utilizando fluxograma ###############################################################################

.data .asciiz Msg1: "Cruzeiro 6 x 1 Atletico" Msg2: "Cruzeiro campeao mineiro 2011" Msg3: "Entre com um valor [6 para placar brasileiro 2011]: " .text la $a0,Msg3 #A instruo la l o primeiro endereo da varivel Msg3 e armazena no registrador $a0. addi $v0,$zero,4 syscall addi $v0,$zero,5 syscall addi $t0,$zero,6 beq $v0,$t0,MsgPlacar la $a0,Msg2 #A instruo la l o primeiro endereo da varivel Msg2 e armazena no registrador $a0. addi $v0,$zero,4 syscall j Fim MsgPlacar: la $a0,Msg1 addi $v0,$zero,4 syscall Fim: ATIVIDADES 4.1 Execute o Programa 7 e diga apenas se ele funcionou ou no como esperado. 4.2 Acresecente mais uma varivel Msg4, com a mensagem O campeonato 2012 ainda nao acabou e mostre esta mensagem logo antes de terminar o programa. 4.3 possvel alterar o contedo da mensagem j que os dados esto armazenados na memria. Para isto pode-se utilizar o endereo lido atravs da instruo la. Acrescente a linha de programa mostrada abaixo no incio do cdigo do Programa 7. Este trecho ir trocar o caractere 6 da mensagem. la $t0,Msg1 addi $t1,$zero,5 sb $t1,9($t0) #Pseudo instruo que armazena um byte na memria 4.4 Modifique o Programa 7 para que seja mostrada a mensagem O campeonato ainda no acabou logo antes de terminar o programa.

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

4.5 Faa um programa que receba trs nmeros obrigatoriamente em ordem crescente e um quarto nmero que no siga essa regra. Mostre, em seguida, os quatro nmeros em ordem decrescente. Suponha que o usurio digitar quatro nmeros diferentes. Devero ser mostrada as mensagens para o usurio Entre com trs nmeros em ordem crescente: , Entre com um quarto nmero qualquer: e Os nmeros em ordem crescente so: .

4.6 Faa um programa que leia quatro valores entrado pelo usurio I, A, B e C. Todos os valores so inteiros. E mostre os valores de A, B e C na memria obedecendo Tabela 4. Suponha que o valor digitado para I seja um valor vlido, ou seja, 1, 2 ou 3, e que os nmeros digitados sejam diferentes um do outro. Valor de I 1 2 3 Forma de salvar A, B e C em ordem crescente A, B e C em ordem decrescente O segundo menor esquerda o maior no meio o menor na direita

Tabela 4 - Condies para o programa de ordenao de nmeros

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

AULA PRTICA 05 While e condies < e >


OBJETIVO: Compilao da estrutura de repetio while. Verificando as condies < e >. INTRODUO Existem muitas estruturas em linguagem de alto nvel que so baseadas em loops que executam enquanto alguma condio no satisfeita. Para estas estruturas pode ser utilizado um o comando em alto nvel while. Este comando pode ser facilmente convertido para linguagem de mnemnicos como veremos abaixo. At agora vimos apenas uma estrutura de testes que verificar se dois registradores so iguais ou diferentes, mas muitos testes no so desta forma e precisam verificar condies como menor ou maior ou igual, uma instruo ento que faa este tipo de teste muito til na programao em linguagem de mnemnico. LOOP WHILE A utilizao de estruturas de repetio muito comum em programas. Uma destas estruturas que aparecem em linguagens de alto nvel o loop while. interessante ento ver como este loop ser transformado em linguagem de mnemnicos. O Exemplo 5.1mostra como poder ser transformado em linguagem de mnemnico um loop while. Exemplo 5.1 Faa um programa que leia uma sequncia de nmeros armazenados em um vetor na memria. Se encontrar o valor 6 dever ser trocado por 5. Quando o valor 0 encontrador o programa termina. while(Vetor[c] != 0) if(Vetor[c] == 6) Vetor[c] = 6;
############################################################################### Programa 8 - Compilao do loop while # Programa utilizado para demonstrar a compilao do loop while ###############################################################################

.data .word Vetor: 14,35,65355,128,6,0 .text addi $t3,$zero,6 addi $t4,$zero,5 lui $t0,0x1001 addi $t0,$t0,0x0000 #Carrega $t0 com o endereo 0x1001 0000 addi $s3,$s3,0 #Inicializa o registrador $s3 com zero $s3 = c Loop:

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

sll $t1,$s3,2 #Multiplica o valor do registrador ndice $s3 por 4 por alinhamento dos dados add $t1,$t0,$t1 #Atualiza o endereo base lw $t2,0($t1) #Utiliza $t1 como endereo base do vetor bne $t2,$t3,Senao #if(Vetor[c] == 6) sw $t4,0($t1) #Vetor[c] = 5 j Loop Senao: beq $t2,$zero,Sair #Se Vetor[c] == 0 termina o loop while add $s3,$s3,1 #Increnta o ndice do vetor j Loop Sair: O detalhe importante do programa acima o fato de que o ndice deve ser multiplicado por 4, devido ao alinhamento de dados que 32 bits para o MIPS. Para este loop possvel diminuir a quantidade de instrues de salto o que tornaria o loop mais eficiente. COMPARANDO < At agora vimos apenas instrues utilizadas para testar a condio de igual. No entanto muitos programas necessitam de verificar outras condies como, maior que, menor ou igual, maior ou igual ou maior que. Duas instrues utis para fazer esta verificao so: slt (Set Less Then) Armazena no registrador de destino 1, caso o registrador fonte 1 seja maior do que o registrador fonte 2. Slti (Set Less Then Imediate) Manda o registrador de destino para 1 caso o registrador fonte 1 seja menor do que o valor constante. Exemplo 5.2 Faa um programa que some as notas de 10 alunos em trs etapas diferentes. O usurio dever entrar com a nota da primeira etapa entre 0 e 3, a segunda 0 e 3 e a terceira 0 e 3 (Nota mxima 9). Para cada aluno, caso a nota seja menor ou igual a 5,0 escreva a mensagem Aluno reprovado caso seja maior escreva Aluno aprovado. Considere que o usurio entrar com os valores das corretamente. Resposta A Figura 18 mostra o fluxograma simplificado para soluo do problema da nota dos alunos.

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

Incio

Cont_Aluno = 0

Fim

Sim

Cont_Aluno = 10?

Escreva: Aluno aprovado No Nota_Total = 0 Etapa = 3? No Escreva: Entre com a nota X do aluno Y Sim Nota_Total < 6 Sim Escreva: Aluno reprovado

No

Etapa = 1

Leia: Nota_Etapa Nota_Total = Nota_Etapa + Nota_Total

Figura 18 - Fluxograma exemplo slt e slti

O Programa 9 a transformao do fluxograma da Figura 18 em linguagem de mnemnico. Neste processo de transformao importante observar que preciso adaptar o fluxograma para os cdigos assembler existentes. No Programa 9 a instruo slti utilizada para testar se a nota do aluno menor do que 6. As instrues slti e slt apenas trocam o estado do registrador para que depois possa ser tomada alguma deciso baseada no estado do registrador que foi alterado. Como no exemplo do programa interior onde armazenado no registrador $t6 e depois a instruo de beq utilizada para verificar a condio de $t6 e saltar caso a nota seja maior do que 5. Estas instrues podem ser utilizadas para maior basta inverter a condio do teste. Para o programa acima caso a instruo beq for trocada por bne invertemos a condio do salto. E o aluno passa ser aprovado caso a nota seja menor ou igual a 5.
############################################################################### Programa 9 - Soma nota de alunos e etapas # Programa utilizado para demonstrar as instrues slt e slti ###############################################################################

.data .asciiz Msg_Entre_Nota: "\nEntre com a nota do aluno : "

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

Msg_Nota_Aluno: "\nA nota do aluno e: " Msg_Aprovado: "\nAluno aprovado" Msg_Reprovado: "\nAluno reprovado" .text # Variveis: # $t0 => Nmero total de alunos # $t1 => Contador de alunos # $s0 => Soma das notas de um aluno # $t2 => Nmero de notas de um aluno # $t3 => Contador de notas de um aluno addi $t0,$zero,10 #$t0 recebe o nmero mximo de alunos addi $t2,$zero,4 #Como a contagem no nmero de notas comea do 1 $t2 recebe o nmero de notas de cada aluno addi $s3,$zero,0 addi $t1,$zero,0 Loop_Aluno: addi $t3,$zero,1 addi $s3,$zero,0 addi $t4,$t1,0x30 #Converte o nmero do aluno para ASCII la $a0,Msg_Entre_Nota sb $t4,29($a0) #Insere nmero do aluno na Msg_Entre_Nota Loop_Nota: addi $t5,$t3,0x30 #Converte a etapa em ASCII sb $t5,18($a0) #Insere a etapa da nota do aluno na Msg_Entre_Nota addi $v0,$zero,4 syscall addi $v0,$zero,5 syscall add $s3,$s3,$v0 #Soma a nota do aluno para obter nota total addi $t3,$t3,1 bne $t3,$t2,Loop_Nota la $a0,Msg_Nota_Aluno sb $t4,17($a0) #Insere o nmero do aluno em Msg_Nota_Aluno addi $s4,$s3,0x30 #Converte a nota total do aluno para ASCII sb $s4,22($a0) #Insere a nota total do aluno em Msg_Nota_Aluno addi $v0,$zero,4 syscall addi $t6,$zero,0 slti $t6,$s3,6 #Armazena 1 em $t6 caso nota menor do que 6 beq $t6,$zero,Aprovado Reprovado: la $a0,Msg_Reprovado j Mostra_Msg_Result Aprovado: la $a0,Msg_Aprovado

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

Mostra_Msg_Result: addi $v0,$zero,4 syscall addi $t1,$t1,1 bne $t0,$t1,Loop_Aluno Sair: ATIVIDADES 5.1 Digite e execute o Programa 8 passo-a-passo e diga se o programa funciona corretamente. 5.2 Modifique o Programa 8 para que o nmero de vezes que o loop executado seja igual a 10 e o nmero de valores trocados igual a 3. 5.3 Modifique o Programa 8 para que o loop termine quando o valor encontrado no vetor seja igual a 0xFFFFFFFF. 5.4 Modifique o Programa 8 conforme decrito abaixo. while(Vetor[c] >= 0) if(Vetor[c] == 6) Vetor[c] = 6; 5.5 Faa um programa que leia um nmero no determinado de pares de valores [m,n], todos inteiros e positivos, um par de cada vez, e que calcule e mosre a soma de todos os nmeros inteiros entre m e n (inclusive). A digitao de pares terminar quando m for igual a n. 5.6 Digite e execute o Programa 9 passo-a-passo e diga se o programa funciona corretamente. 5.7 Altere o Programa 9 para que seja mostrada a mensagem de reprovado para o aluno com nota menor ou igual a 4,0. 5.8 Modifique o Programa 9 para que seja mostrada a mensagem Aluno em recuperacao caso a nota do aluno seja igual a 5,0. 5.9 Faa um provrama que leia um conjunto no determinado de valores, um de cada vez, e escreva uma tabela com cabealho, que deve ser respetido a cada vinte linhas. A tabela dever conter o valor lido, seu quadrado e seu cubo. Finalize a entrada de dados com um valor negativo.

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

AULA PRTICA 06 Nmeros de ponto flutuante


OBJETIVO: Nmeros de ponto flutuante no MIPS. Operaes com nmeros de ponto flutuante.

INTRODUO As operaes de ponto flutuante so fundamentais em qualquer sistema microprocessado. Existe um nmero impensvel de tarefas que so executadas utilizando instruo que operam sobre este tipo de dados. fundamental lembrar que o que muda de um nmero inteiro para um nmero de ponto flutuante a forma como estes dados so interpretados pelo processador, mas temos que enfatizar que qualquer dado que o computador utilize nada mais do que um cdigo binrio armazenado em um espao de memria, que pode ser um registrador ou um espao na memria RAM. As principais intrues para operao com este tipo de dados podem ser vistas na Tabela 5. Categoria Instruo Exemplo Significado Comentrio l.s $f1,0($t1) $f1 = Mem[0+$t1] Carrega um nmero de ponto flutuante com l.s $f1 = Mem[End. preciso simples que est l.s $f1,rtulo($t1) Rtulo + $t1] armazenado na memria ($f2,$f3) = Carrega um nmero de Carga de ponto l.d $f2,0($t1) Mem[0+$t1] ponto flutuante com flutuante preciso dupla que est l.d armazenado na memria ($f2,$f3) = Mem[End. nos registradores $f2 e $f3 l.d $f2,rtulo($t1) Rtulo + $t1] que se tornam um nmero apenas. Soma de ponto add.s add.s $f1,$f2,$f3 $f1 = $f2+$f3 flutuante Utiliza sempre 3 registradores Subtrao de sub.s sub.s $f1,$f2,$f3 $f1 = $f2-$f3 ponto flutuante O resultado da multiplicao mul.s mul.s $f0,$f1,$f2 $f0 = $f1 x $f2 um nmero de preciso simples Multiplicao de O resultado armazenado ponto flutuante nos registradores $f2 e $f3 mul.d mul.d $f2,$f4,$f5 ($f2,$f3) = $f4 x $f5 que se tornam um nmero apenas. O resultado da diviso um div.s div.s $f0,$f1,$f2 $f0 = $f1 / $f2 nmero de preciso simples Multiplicao de O resultado armazenado ponto flutuante nos registradores $f2 e $f3 mul.d mul.d $f2,$f4,$f5 ($f2,$f3) = $f4 / $f5 que se tornam um nmero apenas.
Tabela 5 - Operaes bsica de ponto flutuante

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

Existem uma srie de outras operaes de ponto flutuante que podem ser facilmente entendidas apenas lendo o conjunto de instrues do MIPS. O Exemplo 6.1 mostra a utilizao das instrues mostradas na Tabela 5 Exemplo 6.1 Faa um programa que receba: a) O cdigo do estado de origem da carga de um caminho, supondo que a digitao do cdigo do estado seja sempre vlida, ou seja, um nmero inteiro entre 1 e 15. b) O peso da carga do caminho em toneladas. c) O cdigo da carga, supondo que a digitao do cdigo da carga seja sempre vlida, ou seja, um nmero inteiro entre 10 e 40. Cdigo do estado Imposto 1 35% 2 Isento
Tabela 6 - Cdigos dos estados

Cdigo da carga Preo por quilo 10 a 20 100 21 a 30 250


Tabela 7 - Cdigo da carga

Calcule e mostre a) O peso da carga do caminho convertido em quilos. b) O preo da carga do caminho. c) O valor do imposto, sabendo-se que o imposto cobrado sobre o preo da carga do caminho e depende do estado de origem. d) O valor total transportado pelo caminho, preo da carga mais imposto. Resposta A Figura 19 apresenta o fluxograma simplificado para a soluo do Exemplo 6.1. O Programa 10 apresenta a transformao deste fluxograma em um programa. Foram necessrias a utilizao de algumas instrues que ainda no foram diretamente ensinadas em sala de aula, mas como j foi dito antes no possvel vermos cada uma das instrues do processador, ento as instrues que no foram estudadas poderam ser consultadas seu funcionamento no help do MARS. ATIVIDADES 6.1 Digite e execute o Programa 10 e diga se o programa est funcionando corretamente. Se no faa as correes necessrias.

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

6.2 Faa uma modificao no Programa 10 para que a tabela fique como a Tabela 8. Cdigo do estado Imposto 1 35% 2 20% 3 15% 4 Isento Cdigo da carga Preo por quilo 10 a 20 100 21 a 30 250 31 a 40 300 41 a 50 350

Tabela 8 - Atividade 6.2 de preo da carga

Incio Escreva: Entre com o cdigo do estado

10 < Cdigo Carga 20

Sim

Preo = Peso_Quilos x 100

No Escreva: O preo da carga : X

20 < Cdigo Carga 30 Leia: Cod_Estado No Escreva: Entre com o peso em toneladas

Sim

Preo = Peso_Quilos x 250

Cdigo estado = 1?

Sim

Imposto = Preo x 35/100

Leia: Peso_Tonelada Escreva: Entre com o cdigo da carga

No Escreva: O valor do imposto : X

Cdigo estado = 2? No

Sim

Imposto = 0.0

Peso_Quilos = Peso_Ton x 1000 Escreva: O peso em quilos <Peso_Quilos>

Preo Total = Preo + Imposto

Escreva: O valor da carga mais imposto: X

Fim
Figura 19 - Fluxograma do clculo do valor da carga

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

############################################################################### Programa 10 - Operaes de ponto flututante # Programa utilizado para demonstrar as instrues de ponto flutuante ###############################################################################

#$s0 => Cdigo do estado #$s1 => Cdigo da carga #$f1 => Peso em toneladas #$f2 => Peso em quilos #$f3 => Preo da carga #$f4 => Imposto #$f5 => Valor total transportado pelo caminho .data .asciiz Estado: "\nEntre com o codigo do estado: " Peso_Ton: "\nEntre com o peso em toneladas: " Cd_Carga: "\nEntre com o codigo da carga: " Peso_Quilos: "\nO peso do caminho em quilos e: " Preco_Carga: "\nO preco da carga e: " Vl_Imposto: "\nO valor do imposto e: " Vl_Carga_Imposto: "\nO valor da carga mais imposto e: " .float Imposto: 35.0,25.0,15.0,5.0 Quilos_p_Tonelada: 1000.0 Preco_p_Quilo: 100.0,250.0,340.0 Por_Cento: 100.0 Zero_PF: 0.0 .text Inicio: # L o cdigo do estado la $a0,Estado addi $v0,$zero,4 syscall addi $v0,$zero,5 syscall move $s0,$v0 #L o peso em toneladas la $a0,Peso_Ton addi $v0,$zero,4 syscall addi $v0,$zero,6 syscall mov.s $f1,$f0

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

#L o cdigo da carga la $a0,Cd_Carga addi $v0,$zero,4 syscall addi $v0,$zero,5 syscall move $s1,$v0 l.s $f6,Quilos_p_Tonelada mul.s $f2,$f1,$f6 #Determina o peso em quilos # Escreve o peso em quilos la $a0,Peso_Quilos addi $v0,$zero,4 syscall mov.s $f12,$f2 addi $v0,$zero,2 syscall #SE $s1 >= 10 E $s1 <= 20 slti $t0,$s1,10 #$t0 = 0 se $s1 >= 10 slti $t1,$s1,21 #$t1 = 1 se $s1 <= 20 nor $t0,$t0,$zero #Inverte o estado de $t0 and $t0,$t0,$t1 #Executa lgica AND das duas condies beq $t0,$zero,Cd_Carga_20_30 #Salta se condio no foi satisfeita Cd_Carga_10_20: addi $t2,$zero,0 l.s $f3,Preco_p_Quilo($t2) mul.s $f3,$f3,$f2 #preo da carga = 100 * peso em quilos j Escreve_Pr_Carga Cd_Carga_20_30: slti $t0,$s1,20 #$t0 = 0 se $s1 >= 10 slti $t1,$s1,31 #$t1 = 1 se $s1 <= 20 nor $t0,$t0,$zero #Inverte o estado de $t0 and $t0,$t0,$t1 #Executa lgica AND das duas condies beq $t0,$zero,Cd_Carga_30_40 #Salta se condio no foi satisfeita addi $t2,$zero,4 l.s $f3,Preco_p_Quilo($t2) mul.s $f3,$f3,$f2 #preo da carga = 100 * peso em quilos Escreve_Pr_Carga: la $a0,Preco_Carga addi $v0,$zero,4 syscall mov.s $f12,$f3 addi $v0,$zero,2 syscall l.s $f6,Por_Cento #Carrega o valor 100 no registrador $f6 beq $s0,1,Estado_1 beq $s0,2,Estado_2

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

j Fim_Erro Estado_1: addi $t2,$zero,0 l.s $f4,Imposto($t2) div.s $f4,$f4,$f6 #Determina porcentagem do imposto mul.s $f4,$f4,$f3 #Resultado da operao Imposto = 35/100 * preo da carga j Escreve_Imposto Estado_2: l.s $f4,Zero_PF #Resultado da operao Imposto = 35/100 * preo da carga Escreve_Imposto: la $a0,Vl_Imposto addi $v0,$zero,4 syscall mov.s $f12,$f4 addi $v0,$zero,2 syscall add.s $f5,$f4,$f3 # Soma o valor do imposto com o valor da carga Total = imposto + valor da carga la $a0,Vl_Carga_Imposto addi $v0,$zero,4 syscall mov.s $f12,$f5 addi $v0,$zero,2 syscall Fim_Erro: 6.3 Faa um programa que apresente o menu de opes a seguir, permita ao usurio escolher a opo desejada, receba os dados necessrios para executar a operao e mostre o resultado. Verifique a possibilidade de opo invlida e no se preocupe com restries do tipo salrio invlido. Menu de opes: 1. Imposto 2. Novo Slrio 3. Classificao 4. Finalizar o programa. Digite a opo desejada: Na opo 1: receber o salrio de um funcionrio, calcular e mostrar o valor do imposto usando as regras mostradas na Tabela 9. Salrios % de imposto Menor que R$500,00 5 De R$500,00 a R$850,00 10 Acima de R$800,00 15 Tabela 9 Porcentagem de imposto sobre salrio Na opo 2: receber o salrio de um funcionrio, calcular e mostrar o valor do novo salrio usando as regras da

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

Salrios Aumento Maiores que R$1500,00 R$25,00 De R$750,00 (inclusive) a R$1500,00 (inclusive) R$50,00 De R$450,00(inclusive) a R$750,00 R$75,00 Menores que R$450,00 R$100,00 Tabela 10 - Aumento de salrio Na opo 3: receber o salrio de um funcionrio e mostrar sua classificao usando a Salrios Classificao At R$750,00 Mal remunerado Maiores que R$700,00 Menos mal remunerado Tabela 11 - Classificao quanto ao salrio

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

Aula Prtica 07 Procedimentos


OBJETIVO Construo de procedimentos utilizando registradores padres INTRODUO Procedimentos so muito utilizados em linguagens de alto-nvel como C e java. Um procedimento nada mais do que um trecho de programa que executado quando chamado pelo programa principal. Um procedimento pode receber parmetros de entrada, que so como o programa principal transfere dados para o procedimento, e parmetros de sada que so como o procedimento retorna dados para o programa principal. importante que o procedimento no altere a sequncia de execuo do programa principal. Quando o procedimento chamado, executado e aps esta execuo retorna ao endereo posterior ao que foi chamado no programa principal. Ento conseguimos ento determinar a forma como deve funcionar um procedimento: 1. O programa principal salva os dados em um lugar que o procedimento pode acess-los. 2. O programa principal faz a chamada do procedimento. 3. O procedimento executa a ao que lhe determinada. 4. O procedimento salva o resultado em um lugar que o programa principal possa acess-los. 5. O procedimento faz com que a execuo do programa principal retorne ao ponto onde parou. Ento para que esta sequncia funcione de forma correta preciso que tenham locais onde transferir os dados para o programa principal, receber os dados do procedimento e o procedimento precisa saber para onde retornar aps o seu trmino, estes lugares so os registradores. Os registradores envolvidos na tarefa de chamada de procedimento so: $ra recebe o endereo de retorno para o programa principal. $a0 - $a3 utilizados para passar parmetros para o procedimento $v0 - $v1 recebem os parmetros de retorno do procedimento Para que o procedimento opere de forma fcil h ainda duas instrues que devem ser utilizadas com este fim: jal(Jump And Link) Esta instruo faz um salto para um endereo determinado por um rtulo e armazena o endereo da prxima instruo no registrador $ra. Para isto ela copia o PC para o registrador $ra. jr (Jump Register) Executa um salto onde o endereo de destino do salto est armazenado em um registrador. No Programa 11vemos um exemplo de sequncia de execuo de um procedimento. Usando outros registradores Em um procedimento pode ser necessrio utilizar mais registradores do que os de entrada como no exemplo do Programa 11 Chamada de procedimento. Neste caso necessrio armazenar o contexto do programa principal que est em execuo. Para ser preciso transferir para a memria os registradores que esto sendo utilizados no programa principal. Para salvar os registradores necessrios ao procedimento, na memria, utilizado a pilha (stack). A pilha nada mais do que a reserva de um espao na memria. O registrador $sp utilizado para enderear o ltimo dado que foi armazenado na pilha. O fato de se colocar um dado na pilha chamado de push e de retirar chamado de pop.

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

############################################################################### Programa 11 Chamada de procedimento # Programa utilizado para demonstrar a sequncia de execuo de um procedimento. # O procedimento far simplesmente a soma de dois nmeros que recebeu do programa # principal e retornar o resultado. ###############################################################################

.text Inicio: addi $a0,$zero,10 addi $a1,$zero,30 jal ProcSoma

#Faz a chamada do procedimento colocando o endereo da prxima instruo #no registrador $ra. add $a0,$v0,$zero #Transfere o resultado do procedimento para o registrador $a0. addi $v0,$zero,1 syscall #Imprime o resultado do procedimento. addi $v0,$zero,10 syscall #Termina o programa. ProcSoma: add $v0,$a0,$a1 #Faz a soma e armazena o resultado no registrador de retorno. jr $ra #Retorna para o programa principal utilizando o endereo da prxima instru#o que foi armazenada no registrador $ra quando o procedimento foi cha#mado pela instruo ProcSoma. Por conveno o procedimento dever salvar os registradores que ele utiliza, ser utilizada a pilha para isto. Por conveno toda vez que um dado colocado na pilha o registrador $sp dever ser subtrado de 4 para apontar para prxima palavra, quando um dado for retirado dever ser somado 4. Para que no seja necessrio salvar um grande nmero de registradores obedece-se a seguinte conveno de registradores: $t0 - $t9 So registradores temporrios ento no precisam ser salvos. $s0 - $s7 Registradores que representam variveis de programa ento estes registradores se utilizados durante o procedimento devero ser salvos na pilha no incio do procedimento e retirado no final do procedimento. O Programa 12 apresenta um procedimento que a converso em assembly do procedimento em C mostrado abaixo int ProcSoma(int a,int b){ int c; int d; return((c+a)+(b-d)); }

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

############################################################################### Programa 12 Chamada de procedimento com armazenamento de registradores # Programa utilizado para demonstrar a sequncia de execuo de um procedimento. # Utilizando a pilha para salvar os registradores utilizados no procedimento. ###############################################################################

.text Inicio: addi $a0,$zero,10 addi $a1,$zero,30 jal ProcSoma

#Faz a chamada do procedimento colocando o endereo da prxima instruo #no registrador $ra. add $a0,$v0,$zero #Transfere o resultado do procedimento para o registrador $a0. addi $v0,$zero,1 syscall #Imprime o resultado do procedimento. addi $v0,$zero,10 syscall #Termina o programa. ProcSoma: addi $sp,$sp,-8 sw $s0,4($sp) sw $s1,0($sp) #Salvou os registradores que sero utilizado pelo procedimento na pilha add $t0,$a0,$zero #Faz a soma e armazena o resultado no registrador de retorno. add $t1,$a1,$zero add $t0,$s0,$t0 #(c+a) sub $t1,$s1,$t1 #(b-d) add $v0,$t0,$t1 #(c+a)+(b-d) lw $s1,0($sp) lw $s0,4($sp) addi $sp,$sp,8 #Retorna os valores salvos na pilha para os registradores jr $ra #Retorna para o programa principal utilizando o endereo da prxima instru#o que foi armazenada no registrador $ra quando o procedimento foi cha#mado pela instruo ProcSoma. ATIVIDADES 7.1. Faa uma alterao no Programa 11 para que o procedimento receba como parmetro 4 nmeros inteiros, faa a soma dos 4 e retorne o resultado da soma. 7.2. Faa uma alterao no Programa 12 para que o procedimento fique como a rotina C mostrada abaixo: int ProcSom(int a,int b,int c){ int d,e,f,g; return(((a+d)-e)+b)-(f-c)+g); }

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

7.3. Foi realizada uma pesquisa sobre algumas caractersticas fsicas de quatro habitantes de uma regio. Foram coletados os seguintes dados de cada habitante: sexo, cor dos olhos (A azuis ou C castanhos), cor dos cabelos (L Louros, P pretos ou C castanhos) e idade. A) Faa uma funo que determine e devolva ao programa principal a mdia de idade das pessoas (a mdia dever ser arrendondada para um valor inteiro). B) Faa uma funo que devolva quantas pessoas tm olhos azuis e quantas tm olhos castanhos. Faa outra funo para cabelos. C) Faa uma funo que determine e devolva ao programa principal a maior idade entre os habitantes.

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

Aula Prtica 8 Procedimentos aninhados


OBJETIVO Utilizar procedimentos aninhados para economia de espao e computao. INTRODUO Os procedimentos seriam muito simples se fossem chamados apenas atravs do programa principal, mas no isto que ocorre. Os procedimentos podem chamar outros procedimentos quando isto ocorre chamamos o procedimento de no-folha, porque quando um procedimento no chama outro chamamolos de procedimento folha. preciso um grande cuidado com procedimento que no so folha com os registradores. Por isto adotada a seguinte conveno, o procidemento que chama outro deve armazenar os registradores temporrios que ir utilizar no retorno do procedimento e os registradores que recebeu como parmetro. O procedimento que foi chamado dever salvar os registradores $s0-$s7 e o registrador $ra. O Programa 14 mostra a soluo de um exemplo que traduz o Programa 13 em para assembly.
############################################################################### Programa 13 Procedimento aninhado em C # Programa em C de procedimentos aninhado que ser traduzido para assembly. ###############################################################################

int multiplica(int e,int f){ int g = 2; return (e+g)*(f+g); } int CalcNumero(int c){ int d = 5; return c*multiplica(d,4); } int main(){ int a,b; scanf(%i,&b); a = CalcNumero(b); printf(%i,a); return 0; }
############################################################################### Programa 14 Procedimento aninhado em assembly # Programa em C de procedimentos aninhado que ser traduzido para assembly. ###############################################################################

.text main: ############################################################### # Procedimento principal # Parmetros de entrada:

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

# Nenhum # Parmteros de sada: # Nenhum # Registradores utilizados # $s0 -> int a # $s1 -> int b ############################################################### addi $v0,$zero,5 #scanf(%i,&g) syscall add $a0,$v0,$zero #Transfere recebido para passa-lo como parmetro para o prximo procedimento. jal CalcNumero add $a0,$v0,$zero addi $v0,$zero,1 syscall #printf("%i",a) addi $v0,$zero,10 #Termina o programa sem erro syscall CalcNumero: ############################################################### # Parmetros de entrada: # Nmero inteiro c # Parmetros de sada: # Resultado da operao -> c+e*multiplica(d,4); # Registradores utilizados: # $s0 -> int d # $s1 -> int c ################################################################ addi $sp,$sp,-12 sw $s0,8($sp) sw $a0,4($sp) sw $ra,0($sp) add $s0,$zero,5 #int d = 5 add $a0,$s0,$zero addi $a1,$zero,4 jal multiplica #multiplica(d,4); lw $a0,4($sp) mul $v0,$a0,$v0 #c*multiplica(d,4) lw $ra,0($sp) lw $a0,4($sp) lw $s0,8($sp) addi $sp,$sp,12 jr $ra ############################################################### # Parmetros de entrada: # Nmeros inteiros "e" e "f" # Parmetros de sada: # Resultado da operao -> (e+g)*(f+g);

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

# Registradores utilizados: # $s0 -> int g ################################################################ multiplica: addi $sp,$sp,-4 sw $s0,0($sp) addi $s0,$zero,2 #int d = 5 add $t0,$a0,$s0 #$t0 <- e+g add $t1,$a1,$s0 #$t1 <- f+g mul $v0,$t0,$t1 #Parmetro de retorno <- (e+g)*(f+g) lw $s0,0($sp) addi $sp,$sp,4 jr $ra #return (e+g)*(f=g) Quando o procedimento chama ele mesmo, chamado recursivo. O Programa 15mostra o exemplo de um procedimento recursivo para o calculo do fatorial de um nmero. O Programa 16 mostra a converso deste procedimento em assembly.
############################################################################### Programa 15 Procedimento recursivo em C # O procedimento recebe como entrada um nmero inteiro e retorna o fatorial deste nmero ###############################################################################

int fatorial(int n){ if(n < 1) return (1); else return(n*fatorial(n-1)); }


############################################################################### Programa 16 Procedimento recursivo em assembly # O procedimento recebe como entrada um nmero inteiro e retorna o fatorial deste nmero ###############################################################################

.text fatorial: addi sw sw slti addi addi jr L1: addi jal lw lw addi mul jr

$sp,$sp,-8 $ra,4($sp) $a0,0($sp) $t0,$zero,L1 $v0,$zero,1 $sp,$sp,8 $ra $a0,$a0,-1 fatorial $a0,0($sp) $ra,4($sp) $sp,$sp,8 $v0,$a0,$v0 $ra

#ajusta pilha para dois itens #salva endereo de retorno #salva argumento n #Se n>1, v para L1 #retorna 1 #retira 2 itens da pilha #retorna aps jal # n>=1: argumento <- n-1 #chama f com (n-1) #retorna de jal restaurando argumento n #restaura o endereo de retorno #ajusta pilha para retirada de 2 itens #retorna n * fatorial(n-1) #retorna para quem chamou o procedimento

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

ATIVIDADE 8.1 Execute o Programa 14 e diga se ele funciona corretamente, caso no funcione faa as correes necessrias. 8.2 Execute o Programa 16 que procedimento recursivo utilizado para obter o fatorial de um nmero. A cada iterao anote os valores dos registradores $ra,$sp,$a0,$t0 e $v0 na entrada e no retorno de cada iterao. O procedimento dever calcular o fatorial de 3. 8.3 Construa um procedimento recursivo rec05() que imprima de 0 a um nmero inteiro N passado como parmetro. Crie um programa de teste e imprima os valores de rec05(5), rec05(10) e rec05(20). (Knop, 2010) 8.4 Construa um programa que monte um vetor de inteiros com 10 posies e inicie cada elemento com um valor aleatrio entre 1 e 10. Construa uma funo recursiva rec12() que retorne a soma dos elementos do vetor. Dica: use um segundo parmetro inteiro para servir de "contador" para o ndice do vetor. (Knop, 2010)

UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS

Bibliografia
Ascncio, A. G., & de Campos, E. V. (2007). Fundamento de programao de computadores: Algoritmos, Pascal, C/C++ e Java (2 ed.). So Paulo: Pearson Prentice Hall. Hennessy, J. L., & Patterson, D. (2003). Arquitetura de Computadores: uma abordagem quantitativa. Rio de Janeiro, RJ, Brasil: Elsevier. Hennessy, J. L., & Patterson, D. (2005). Organizao e projeto de computadores: a interface hardware/software (3 ed.). Rio de Janeiro, RJ, Brasil: Elsevier. Knop, I. (2010). igorknop.com.br. Fonte: http://igorknop.com.br/wp/disciplinas/ifsudeste/algoritmos/recursividade/exercicios-recursividade/. Monteiro, M. (2007). Introduo Organizao de Computadores. So Paulo, SP, Brasil: LTC.

Você também pode gostar