Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS
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
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
A nova janela o Editor de texto do MARS, local onde voc dever digitar o seu programa. Veja Figura 3:
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).
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.
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
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
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
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
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.
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.
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
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
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)
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
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 ###############################################################################
UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS
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 ###############################################################################
############################################################################### 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
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
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
o 10 um 11 um 12
Tabela 3 - Conjunto de comandos para syscall
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
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
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
UNIVERSIDADE FEDERAL DE OURO PRETO Instituto de Cincias Exatas Departamento de Cincias Exatas
Disciplina: Laboratrio de Programao MIPS
.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
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 ###############################################################################
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
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
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
Sim
20 < Cdigo Carga 30 Leia: Cod_Estado No Escreva: Entre com o peso em toneladas
Sim
Cdigo estado = 1?
Sim
Cdigo estado = 2? No
Sim
Imposto = 0.0
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
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. ###############################################################################
#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. ###############################################################################
#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
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. ###############################################################################
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 ###############################################################################
.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.