Computadores de Programação (MAB353) Aula 6: 27 de abril de 2010
1 Recaptulando operações já estudadas Operações lógicas 2 3 Exercícios Referências bibliográficas
Recaptulando operações já estudadas Operações lógicas Operações aritméticas e de transferência de dados no MIPS Instruções aritméticas add R1, R2, R3: instrui o computador a somar os valores em R2 e R3 e colocar o resultado em R1 sub R1, R2, R3: instrui o computador a subtrair os valores em R2 e R3 e colocar o resultado em R1 addi R1, R2, K: add imediato (o segundo operando é uma constante) Intruções de transferência de dados lw R1, K(R2) : instrução de transferência de dados que copia dados da memória para um registrador sw R1, K(R2): instrução de transferência de dados que copia dados de um registrador para a memória
Operações lógicas Recaptulando operações já estudadas Operações lógicas Usadas para operar sobre bits individuais ou sobre campos de bits dentro de uma palavra Operações de shift Movem bits de uma palavra à esquerda ou à direita, preenchendo os bits vazios com 0s shift binário à esquerda: multiplica o valor por 2 i (onde i = tamanho do deslocamento) shift binário à direita: divide o valor por 2 i (onde i = tamanho do deslocamento)
Operações lógicas Recaptulando operações já estudadas Operações lógicas Operações booleanas and: operação bit-a-bit que retorna 1 apenas se ambos os operandos são 1 or: operação bit-a-bit que retorna 1 se um dos operandos for 1 not: inverte os valores dos bits do operando
Recaptulando operações já estudadas Operações lógicas Operadores lógicos em C e Java e instruções correspondentes em MIPS Logical operations C operators Java operators MIPS instructions Shift left << << sll Shift right >> >>> srl Bit-by-bit AND & & and, andi Bit-by-bit OR or, ori Bit-by-bit NOT ~ ~ nor FIGURE 2.8 C and Java logical operators and their corresponding MIPS instructions. MIPS implements NOT using a NOR with one operand being zero. Copyright 2009 Elsevier, Inc. All rights reserved.
Intruções lógicas no MIPS Recaptulando operações já estudadas Operações lógicas Instruções de shift sll (shift left logical): ex., sll $t2, $s0, 4 t2 = s0 << 4 srl (shift right logical): ex., srl $t2, $s0, 4 t2 = s0 >> 4 Instruções booleanas and (AND booleano): ex., and $t0, $t1, $t2 t0 = t1&t2 or (OR booleano): ex., or $t0, $t1, $t2 t0 = t1 t2 nor (NOT OR booleano): ex., nor $t0, $t1, $zero t0 = (t1 zero)
Aplicação das instruções booleanas Recaptulando operações já estudadas Operações lógicas and: permite aplicar um padrão de bits sobre um conjunto de bits para forçar o resultado em 0 nas posições 0 do padrão (chamado normalmente operação de máscara) or: permite aplicar um padrão de bits sobre um conjunto de bits para forçar o resultado em 1 nas posições 1 do padrão nor: se um dos operandos for zero, então NOR é equivalente a NOT A NOR 0 = NOT(A OR 0) = NOT(A)
Extensões de and (andi) e or (ori) Recaptulando operações já estudadas Operações lógicas Assim como nas operações aritméticas, valores constantes são comuns também nas operações lógicas and e or O MIPS provê as instruções: and imediato (andi) e or imediato (ori)
Operações de tomada de decisão O que distingue um computador de uma calculadora simples é a capacidade de tomar decisões Baseado nos valores de entrada o nos valores computados durante a execução do programa, diferentes instruções são executadas Nas linguagens de programação de alto nível, tomadas de decisão são normalmente representadas pela sentença if-else, algumas vezes combinadas com sentenças go to e rótulos de desvio
Intruções de desvio Desvio condicional 1 beq (branch if equal): beq R1, R2, L1 vá para a sentença rotulada L1 se os valores dos registradores R1 e R2 forem iguais 2 bne (branch if not equal):beq R1, R2, L1 vá para a sentença rotulada L1 se os valores dos registradores R1 e R2 forem diferentes Desvio incondicional 1 j (jump): j FIM vá para a sentença rotulada FIM
Exemplo de implementação de if-then-else em MIPS Considere a sentença em C: if (i == j) f = g + h; else f = g h i=j i= =j? i j Else: f=g+h f=g h Exit: FIGURE2.9 Illustra tion of the options in the if state ment above. The left box corresponds to the then part of the if statement, and the right box corresponds to the else part. Copyright 2009 Elsevier, Inc. All rights reserved.
Exemplo de implementação de if-then-else em MIPS Considere que os valores de f,g,h,i,j estão nos registradores $s0 a $s4
Tarefas do Montador e do Compilador Rótulos (labels) O Montador libera o programador de linguagem de montagem e o Compilador da tarefa de calcular endereços de desvio, permitindo o uso de rótulos Go to e rótulos Quando go to (desvios) e labels (rótulos) não aparecem na Linguagem de Programação de nível mais alto, é o Compilador quem os constrõe (evitar os problemas de escrever rótulos e desvios é um dos benefícios das LPs)
Sumário As instruções de tomada de decisão são importante para escolher entre duas alternativas (uso de if) e para computações iterativas (uso de uma sequência de instruções repetidamente, ex., sentenças while, for, repeat) As mesmas instruções de linguagem de montagem são usadas como blocos fundamentais nos dois casos
Exemplo de implementação de while em MIPS Considere a sentença em C: while (save[i] == k) i += 1; Considere que os valores de i, k estão nos registradores $s3 e $s5 e a base do vetor save está em $s6 Como essa sentença pode ser traduzida para MIPS?
Exemplo de implementação de while em MIPS
slt e slti Avaliam se um valor é menor que outro: slt (set on less than): slt $t0, $s3, $s4 $t0 = 1, se $s3 < $s4 $t0 = 0, se $s3 > $s4 slti (slt imediato): slti $t0, $s3, 10
Dicotomia entre números com e sem sinal devem lidar com a dicotomia entre números com e sem sinal: Em números com sinal (complemento a 2), uma padrão de bits com o bit mais significativo igual a 1 representa um número negativo e é sempre MENOR que um padrão de bits com bit mais significativo igual a 0 Com números sem sinal é o contrário, um padrão que inicia com 1 é sempre maior que um padrão que inicia com 0...essas características podem ser exploradas para reduzir o custo da comparação!
sltu e sltiu O MIPS oferece duas versões da comparação slt para explorar as alternativas de comparação: 1 slt e slti: trabalham com números com sinal 2 sltu e sltiu: trabalham com números sem sinal Exemplo
Comparação dupla Otimização da sentença 0 x < y Tratando números com sinal como se eles fossem sem sinal, nos dá uma maneira de implementar uma sentença do tipo 0 x < y (usada normalmente para checar os limites de um vetor) com baixo custo A idéia básica é que inteiros negativos em C2 são números grandes na notação sem sinal...então uma comparação sem sinal de 0 x < y checa, ao mesmo tempo, x < y e x 0
Comparação dupla Exemplo Considere a sentença de comparação dupla 0 x < y e x em $s1 e y em $t2:
Implementação de condições relativas Os Compiladores MIPS usam as instruções beq, bne, slt, slti e o registrador $zero para criar as condições relativas: >, <,, =,,
Sentença case/switch Muitas LPs oferecem sentenças case ou switch que permitem selecionar uma de várias alternativas, dependendo de um único valor A maneira mais simples de implementar essa sentença é usando uma sequência se testes condicionais, transformando a sentença case/switch em sentenças if-then-else Algumas vezes pode ser mais eficiente codificar a sentença como uma tabela de endereços sequenciais de instruções alternativas, chamada tabela de endereços de desvio (vetor de endereços)... e o programa precisa apenas indexar essa tabela
Sentença case/switch e a instrução jr... o programa carrega a entrada apropriada da tabela (endereço para o desvio) em um registrador e faz o desvio usando o valor desse registrador Para dar suporte a essas situações, o MIPS inclui a instrução jr (jump register) ex., jr $t0 desvio incondicional para o endereço contido em $t0
Exercícios Sumário Exercícios Referências bibliográficas Primeira lista de exercícios Disponível em www.dcc.ufrj.br/ silvana/compprog/lista1.pdf
Exercícios Referências bibliográficas O produto do pensamento é superior ao produto da intuição. Aristophanes
Referências bibliográficas Exercícios Referências bibliográficas 1 Organização e projeto de computadores: a interface hardware/software, D. A. Patterson e J. L. Hennessy, Elsevier, 2005. 2 Simulador SPIM (http://pages.cs.wisc.edu/ larus/spim.html)