Buscar

Resumo de Organização de Computadores (Básico)

Prévia do material em texto

RESUMINHO DA MALDADE 
Multiplicação e Divisão 
Multiplicação 
- Para realizar a multiplicação são necessários dois operandos, um multiplicando e um multiplicador para gerar um 
operando produto. 
- Se o número de bits do multiplicando é (n) e do multiplicador é (m), o número de bits do produto final n+m 
(ignorando bits de sinal). Além disso, a multiplicação também precisa tratar a ocorrência de overflow. 
Arquitetura de um Multiplicador 
- Devido ao aumento de complexidade, nem todas as arquiteturas suportam, ao nível do hardware, a capacidade 
para efetuar operações aritméticas de multiplicação e divisão. 
- No caso do MIPS, essas operações são asseguradas pela arquitetura, através de uma unidade especial de 
multiplicação de inteiros. 
- Observamos que uma multiplicação que envolva dois operandos de n bits necessita de um espaço de 
armazenamento, para o resultado, de 2*n bits. 
- Logo, no caso do MIPS, o resultado deverá ser armazenado com 64 bits, o que determina a existência de 
registradores especiais para esse mesmo armazenamento. 
- Para o armazenamento do multiplicador e do resultado final, os arquitetos do MIPS incluíram um par de 
registradores especiais designados, respectivamente, por HI e LO (de uso específico da unidade de multiplicação de 
inteiros): 
 O HI armazena os 32 bits mais significativos do resultado. 
 O LO armazena, inicialmente, o multiplicador e, após a execução da operação, os 32 bits menos significativos 
do resultado. 
- A transferência do multiplicador para o registrador LO é efetuada automaticamente (por hardware) no início da 
execução da operação. 
- Esta arquitetura de multiplicação é útil apenas para a realização de operações de multiplicação unsigned. 
- A arquitetura que utiliza o algoritmo de Booth é adequada para a realização de operações de multiplicação signed 
em que os operandos estão codificados em complemento a dois. 
 
Divisão 
- No algoritmo da divisão são utilizados dois operandos, o dividendo e o divisor, e produzidos dois resultados o 
quociente e o resto. A relação entre os componentes da divisão pode ser expressa da seguinte forma: 
dividendo = quociente x divisor + resto, onde o resto é sempre menor que o divisor. 
- Às vezes, os programas usam a divisão simplesmente para obter o resto, ignorando o quociente. Além disso, é 
necessário que seja detectada a divisão por zero, que é matematicamente inválida. 
- Para o armazenamento do resto e do resultado final, também se usa os registradores especiais designados, 
respectivamente, por HI e LO. 
 O HI armazena o resto. 
 O LO armazena o quociente. 
Ponto Flutuante 
- A aritmética computacional que manipula os números binários em notação científica normalizada (apenas um 
dígito à esquerda da vírgula) é denominada de aritmética de ponto flutuante. 
 1000,0000001 = 1,0000000001 . 2³ 
- A normalização apresenta 3 vantagens: 
 Simplificação na entrega de dados que incluem números ponto flutuante (pf); 
 Simplificação dos algoritmos da aritmética em pf; 
 Aumento da precisão dos números que podem ser armazenados na word. 
- Números em pf no MIPS têm o formato abaixo: 
S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM 
- Sendo S(Sinal) = 1 bit, E(Expoente) = 8 bits e M(Mantissa) = 23 bits. 
- Tendo E 8 bits e M 23 bits, é possível representar frações (na base 10) tão pequenas como 2,0 * 10-38 e nº tão 
grandes como (na base 10) 2,0 x 1038. Ainda assim pode ocorrer overflow na aritmética em pf. 
- O overflow significa que o expoente é tão grande que não pode ser representado com 8 bits. 
- Se uma fração é pequena demais para ser representada, significa que um expoente negativo não pode ser 
representado em 8 bits. Essa situação denomina-se underflow. 
- Para reduzir a possibilidade de ocorrer underflow ou overflow, existe a aritmética em pf de dupla precisão, que 
permite representar números de 2,0 x 10-308 até 2,0 x 10308. 
- No MIPS nº em pf de dupla precisão ocupam 2 words e têm 1 bit para sinal, 11 bits para E, 52 bits para F. 
- A representação: 
S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM 
Busca facilitar operação realizadas pelo hardware. 
 Sinal no campo mais significativo: permite testes rápidos para ‘maior que’, ‘menor que’ e ‘igual a zero’. 
 Expoente antes da Mantissa: permite uma ordenação simples, pois números com expoentes maiores são 
maiores que números que tem expoente menor (números de mesmo sinal). 
- Números pf não utilizam complemento a dois. 
Expoentes negativos 
- Chamada Notação Desviada, onde o desvio é um número subtraído para se ter o número real. 
- IEEE 754 usa desvio de 127 (28/2, descontado o 0) para precisão simples. 
- Subtrair 127 do campo Expoente para se ter o valor real do expoente. 
- Exemplo: 
O expoente -1 no padrão IEEE 754 seria representado como: 
-1 + 127 = 126 = 01111110. 
E o expoente +1: 
+1 +127 = 128 = 10000000. 
 
Operações Aritméticas em Ponto Flutuante 
Adição em ponto flutuante (análogo para a subtração) 
N = 1,11 x 20 + 1,00 x 2-2 
1) Iguale os expoentes com o maior. 
N = 1,11 x 20 + 0,01 x 20 
2) Some as mantissas mantendo os expoentes. 
N = (1,11 + 0,01) x 20= 10,00 x 20 
3) Normalize o resultado. 
N = 10,00 x 20 = 1,000 x 2¹ 
Multiplicação em ponto flutuante 
N = (1.11 x 20) x (1.01 x 2-2) 
1) Somar os expoentes com bias dos dois números. 
Expr = 0+(-2)[0+127] + [-2+127][127+125] - 127 = [125] (= -2) 
2) Multiplicar as mantissas. 
Mr = 1.11 x 1.01 = 10.0011 
3) Normalizar o produto se necessário, deslocando à direita e incrementando o expoente. 
N = 10.0011 x 2125 = 1.00011x 2126 
 
Divisão em ponto flutuante 
N = (1.001 x 20) / (1.1 x 2-2) 
1) Subtrair os expoentes (com o bias). 
Expr = 0-(-2)[0+127] - [-2+127][127-125] + 127 = [129] (= 2) 
2) Dividir as mantissas. 
Mr = 1.001 / 1.1 = 0.11 
3) Normalizar o produto se necessário. 
N = 0.11 x 2129 = 1.1 x 2128 
 
Arredondamento 
As técnicas mais comuns no processo de arredondamento do resultado (o qual introduz um erro) são: 
 Truncar 
 Arredondar 
 Arredondar para o par (ímpar) mais próximo 
 
 
Linguagem de Máquina (MIPS) 
- Instruções e classes de instruções 
 Instruções de processamento (aritméticas e lógicas) 
 Instruções de transferência de informação (carga) 
 Instruções de controle de fluxo de execução (desvio) 
Representação das Instruções 
- Soma: 
add $t0, $s0, $s1 # Soma $s0 com $s1 e armazena em $t0 
addu # Instrução add unsigned (sem sinal) 
- Subtração: 
Sub $t0, $s0, $s1 # Subtrai $s1 de $s0 e armazena em $t0 
subu # Instrução sub unsigned (sem sinal) 
- Multiplicação e Divisão: 
mult $2, $3 # Multiplicador $3, multiplicando $2 
multu $2, $3 # Multiplicação unsigned 
div $2, $3 # Dividendo $3, divisor $2 
divu $2, $3 # Divisão unsigned 
◦ mfhi $reg # move from hi - Copia HI para $reg 
◦ mflo $reg # move from lo - Copia LO para $reg 
◦ mthi $reg # move to hi - Copia $reg para HI 
◦ mtlo $reg # move to lo - Copia $reg para LO 
Instruções de controle do fluxo da execução 
- branch equal: desvia o fluxo para o label se Rsrc1 == Rsrc2 (beq): 
beq Rsrc1, Rsrc2, label 
- branch not equal: desvia o fluxo para o label se Rsrc1 != Rsrc2 (bne): 
bne Rsrc1, Rsrc2, label 
- jump: permite um salto na seqüência de instruções independente de nenhuma condição 
j label # vai para label 
Instruções lógicas 
- A instrução set less then (slt) compara 2 registradores e armazena em um terceiro registrador: 
 1 (se < que) 
 0 (se > ou igual) 
slt $8, $19, $20 # armazena 1 em $8 se $19 < $20 
 
Instruções lógicas (bit a bit) 
sll Rdst, Rsrc, k # Rdst = Rsrc << k 
srl Rdst, Rsrc, k # Rdst = Rsrc >> k 
 
Endereçamento imediato 
lw $5, 0 ($6)# Ler constante p/ o registo $5 
addi $3, $5, 4 # $3 = $5 + 4 
addiu (add immediate unsigned) 
slti $2, $12, 16 # $2 = 1 se $12 < 16 & $2 = 0 se $12  16 
sltiu (slt immediate unsigned) 
 
Instruções 
 Podemos agrupar as diversas instruções em três grandes grupos definidos pela sua funcionalidade: 
◦ Instruções R-type: Instruções que representam somente registradores 
◦ Instruções I-type: Instruções que representam registradores e uma constante 
◦ Instruções J-type: Instruções que representam somente a constante 
 
Instruções R-type. 
 Os campos das instruções R-Type recebem os seguintes nomes e quantidades de bits: 
op rs rt rd shamt funct 
6 bits 5 bits 5 bits 5 bits 5 bits 6 bits 
onde: 
op: operação; 
rs: 1º registrador contendo o primeiro operando fonte; 
rt: 2º registrador contendo o segundo operando fonte; 
rd: registrador destino; 
shamt: quantidade de bits a serem deslocados (shift amount – para instruções sll / srl); 
funct: função, seleciona uma variação especifica da operação apontada no campo op. 
 
Instruções I-type. 
 Para instruções I-Type os campos rd, shamt e funct ficam fundidos em um único campo de 16 bits (campo 
endereço – address) que representará a constante envolvida - imediato. 
 Representação: 
op rs rt address 
6 bits 5 bits 5 bits 16 bits 
Onde: 
op: operação; 
rs: 1º registrador contendo o primeiro operando fonte; 
rt: 2º registrador contendo o segundo operando fonte; 
address: constante; 
 
Instruções J-type. 
 As intruções J-type usam um formato diferente dos dois anteriores. 
op endereço 
6 bits 26 bits 
onde: 
op: código da operação; 
endereço: usado para o cálculo do endereço.

Continue navegando

Outros materiais