GBC36Arq. e Org. de Computadores I 29/8/26 Na Aula Anterior... Operações Aritméticas e Lógicas A linguagem Assembly; Montadores; Ligadores; Ligação Estática; Ligação Dinâmica; Universidade Federal de Uberlândia Faculdade de Computação Prof. Dr. rer. nat. Daniel D. Abdala Carregadores; Algumas palavras sobre Compiladores; Otimização de código; Programas executáveis; 2 Instruções Aritméticas (ℕ e ℤ) Nesta Aula Instruções aritméticas em ℤ; Formato e Codificação de Instruções; Overflow e underflow; Instruções aritméticas em ℝ; Instruções lógicas; add Adição com trap no overflow (não suportado pelo C) add $rd, $rs, $rt addi Adição com trap no overflow segundo operando cte. addi $rt, $rs, cte addiu Adição sem trap no overflow segundo operando cte. addi $rt, $rs, cte addu Adição sem trap no overflow addu $rd, $rs, $rt aui Adiciona a cte. Aos bits mais significativos aui $rt, $rs, cte clo Conta # de zeros até achar um clo $rd, $rs clz Conta # de uns até achar um clz $rd, $rs div Divisão com overflow (LO quociente HI resto) div $rs, $rt divu Divisão Natural sem overflow divu $rs, $rt madd Multiplica e adiciona madd $rs, $rt maddu Multiplica e adiciona (Naturais) maddu $rs, $rt 3 Instruções Aritméticas (ℕ e ℤ) mfhi Move o dado contido no registrador HI mfhi $rs mflo Move o dado contido no registrador LO mflo $rs msub Multiplica e subtrai msub $rs, $rt msubu Multiplica e subtrai (Naturais) msubu $rs, $rt mtlo Move o dado contido em $rs para o registrador LO mtlo $rs mthi Move o dado contido em r$ para o registrador HI mthi $rs mul Multiplicação s/ overflow mul $rd, $rs, $rt mult Multiplicação (hi 32bitsMSB lo 32bitsLSB ) mult $rs, $rt multu Multiplicação Natural (hi 32bitsMSB lo 32bitsLSB ) multu $rs, $rt sub Subtração com overflow sub $rd, $rs, $rt subu Subtração sem overflow sub u $rd, $rs, $rt 4 long a,b,c,d = 42; d = (ab) (ac); a $s b $s c $s2 d $s3 add $t, $s, $s add $t, $s, $s2 sub $s3, $t, $t 5 6
29/8/26 7 8 Formato das Instruções Aritméticas e Lógicas No MIPS todas as Instruções possuem 32 bits, sempre! Faz-se necessário utilizar um código binário para codificar as instruções em 32 bits; A maioria das instruções aritméticas e lógicas são codificadas usando o formato R, as remanescentes utilizando o formato I; Para interpretar o padrão de bits, o hardware utiliza as seguintes máscaras de bits: R 3 3 29 28 27 26 25 24 2 2 9 8 7 6 5 4 3 2 9 8 7 6 5 4 3 2 opcode rs rt rd shamt function I 3 3 29 28 27 26 25 24 2 2 9 8 7 6 5 4 3 2 9 8 7 6 5 4 3 2 9 opcode rs rt deslocamento ou constante Codificação Cada campo de uma instrução é codificado como uma sequência de bits; A maioria das instruções é do tipo R, pois todos os operadores são registradores; Para codificar qual dos 32 registradores são necessário 5 bits (2 5 = 32) (campos rs, rt e rd); Opcode codifica qual instrução. O campo function é usado para aumentar o número de instruções codificáveis; Por fim o campo shamt (shift ammount) é usado apenas nas instruções de deslocamento, e zerado nas demais; R add $t, $s, $s 3 3 29 28 27 26 25 24 2 2 9 8 7 6 5 4 3 2 9 8 7 6 5 4 3 2 mul $t, $s, $s2 mul $t, $s3, $s4 add $t2, $s4, $s5 sub $t3, $s4, $s5 div $t, $t mflo $t4 mul $t5, $t2, $t3 sub $s, $t4, $t5 long a,b,c,d,e,f = 42; a = ((b*c) / (d*e)) ((ef)*(e-f)) mul $t, $s, $s2 mul $t, $s3, $s4 div $t, $t mflo $t add $t, $s4, $s5 sub $t2, $s4, $s5 mul $t, $t, $t2 sub $s, $t, $t a $s b $s c $s2 d $s3 e $s4 f $s5 opcode rs rt rd shamt function 2 2
29/8/26 Outros usos para o ADD/ADDI A família do ADD Inicializar o valor de um registrador; addi $s,$zero,42 add Adição com overflow add $rd,$rs,$rt Zerar um registrador addi Adição com overflow segundo operando constante addi $rt,$rs,cte addu Adição sem overflow de números não sinalizados addu $rd,$rs,$rt addiu Adição sem overflow de números não sinalizados segundo operando constante addiu $rt,$rs,cte add $s,$zero,$zero addi $s,$zero,$zero Mover dados de um registrador para outro; add $s,$zero,$s Qual a diferença entre com overflow e sem overflow? Incremento; addi $s,$s, Problema com a nomenclatura Simplesmente significa que o sinal de overflow, quando ocorrer não lançará uma exceção. Decremento; addi $s,$s,- 3 Complemento de 2 O complemento de 2 é calculado pela inversão de cada um dos bits do número. Subsequentemente somase ao valor dos bits invertidos; 2-2 Decimal Comp. 2 7 6 5 4 3 2 - -2-3 -4-5 -6-7 -8 4 Overflow Qual a diferença entre uma instrução com e sem overflow? 27-5 Underflow Multiplicação de Números Binários Qual a diferença entre uma instrução com e sem overflow? - 28 - - 28-27 6 9 9 x 7 caso resp x x x x 8 3
29/8/26 Multiplicação de Palavras x a b c d e f g h Somas com deslocamento para a Esquerda a b ab c ic d jd 9 i j k 8 8 9 9 9 Considerações acerca do MULT 2 A multiplicação de dois números de 32 bits pode gerar potencialmente um número de 64 bits significativos; Todos os registradores possuem 32 bits; Utilizamos dois registradores especiais para armazenar o resultado de 32 bits de uma multiplicação; Dois registradores especiais: long a,b,c = 42; c = a*b; mult $s,$s mflo $s2 a $s b $s c $s2 mul $s2,$s,$s HI 32 bits mais significativos da palavra; LO 32 bits menos significativos da palavra. 2 22 Instruções Aritméticas (ℝ) Instruções Aritméticas (ℝ) abs.d $f2 $f4 valor absoluto (precisão dupla) abs.d $f2, $f4 ceil.w.s Aproxima para cima para o inteiro (word) ceil.w.s $f, $f abs.s $f $f valor absoluto (precisão simples) abs.d $f, $f cvt.d.s Converte de precisão simples para dupla cvt.d.s $f2, $f add.d $f2 $f4 $f6 Soma em precisão dupla add.d $f2, $f4, $f6 cvt.d.w Converte de inteiro 32 bits para precisão dupla cvt.d.w $f2, $f add.s $f $f $f2 Soma em precisão simples add.d $f, $f, $f2 cvt.s.d Converte de precisão dupla para simples cvt.s.d $f, $f2 c.eq.d $f2 == $f4? CF : CF c.eq.d $f2, $f4 cvt.s.w Converte inteiro 32bits para single cvt.s.w $f, $f c.eq.s $f == $f? CF : CF c.eq.s $f, $f cvt.w.d Converte de precisão dupla para inteiro 32 bits cvt.w.d $f, $f2 c.le.d $f2 <= $f4? CF : CF c.le.d $f2, $f4 cvt.w.s Converte de precisão simples para inteiro 32 bits cvt.w.s $f, $f c.le.s $f <= $f? CF : CF c.le.s $f, $f div.d Divisão em ponto flutuante precisão dupla div.d $f2, $f4, $f6 c.lt.d $f2 < $f4? CF : CF c.lt.d $f2, $f4 div.s Divisão em ponto flutuante precisão simples div.s $f, $f, $f3 c.lt.s $f < $f? CF : CF c.lt.s $f, $f floor.w.d Arredonda para o inteiro 32 bits para baixo (double) floor.w.d $f, $f2 ceil.w.d Aproxima para cima para o inteiro (word) ceil.w.d $f, $f2 floor.w.s Arredonda para o inteiro 32 bits para baixo (single) floor.w.s $f, $f 23 24 4
29/8/26 Instruções Aritméticas (R) mov.d Move o double em f4-f3 para f2-f3 mov.d $f2, $f4 mov.s Move o single em f para f mov.s $f, $f movf Move t2 para t se CF = movf $t, $t2 movt Move t2 para t se CF = movt $t,$t2 mul.d Multiplicação em precisão dupla mul.d $f2,$f4,$f6 mul.s Multiplicação em precisão simples mul.s $f,$f,$f3 neg.d Negação double neg.d $f2,$f4 neg.s Negação single neg.s $f,$f sub.d Subtração double sub.d $f2,$f4,$f6 sub.s Subtração single sub.s $f,$f,$f3 Notação em Ponto Flutuante Fundamentada na notação numérica científica; 42,42 = 42,42x = 4,242x =,4242x 2 Utilização otimizada do espaço de representação; Note que o sinal fracionário flutua dependendo do expoente associado a base; exp oente, mantissa base A mantissa está contida no intervalo [,[ É importante notar que a notação em ponto flutuante pode induzir à erros de arredondamento. 25 26 Padrões de Representação Precisão Simples s expoente mantissa Precisão Dupla IEEE Standard for Floating-Point Arithmetic, IEEE 754 28 3 3 63 62 52 5 s expoente mantissa Conversão (Precisão simples) Expoente possui um bias de 27 ( 2 ); Ao contrário da notação científica tradicional, que coloca todos os dígitos significativos a direita da vírgula, em ponto flutuante deixamos um a esquerda da vírgula. Equação para conversão binário decimal: s n ( ) 23 i b i e27 23i 2 2 27 28,25, 2,x2 3 sinal expoente 273 = 3 () = mantissa 3 3 3DCCCCCD H 3 3 sinal expoente 23-27= -4 mantissa, 2 2-2 -4 2-5 2-8 2-9 2-2 2-3 2-6 2-7 2-2 2-2 2-23 =.623848579.623848579 expoente valor 2 -,5 2-2,25 2-3,25 2-4,625 2-5,325 2-6,5625 2-7,7825 2-8,39625 2-9,95325 2 -,9765625 2 -,4882825 2-2,2444625 2-3,227325 2-4 6,355625e-5 2-5 3,5757825e-5 2-6,5258789625e-5 2-7 7,6293945325e-6 2-8 3,84697265625e-6 2-9,97348632825e-6 2-2 9,53674364625e-7 2-2 4,76837582325e-7 2-22 2,3848579563e-7 2-23,9292895578e-7 2-24 5,964644775396e-8 2-25 2,9823223876953e-8 29 3 5
29/8/26 Casos Especiais Números Representáveis Números (não normalizados) 3 3 zero x 3 3 infinito x x 3 3 NaN Em matemática, o conjunto dos números reais é infinito; Entre dois números reais quaisquer, há infinitos números reais; Para tal, infinitos dígitos devem ser potencialmente utilizados; A representação de números reais utilizando a notação de ponto flutuante, utiliza um número finito de bits; Por definição, apenas números racionais podem ser representados em ponto flutuante; Pelo menos bit da mantissa diferente de zero 3 Números Representáveis 32 s..... s = m =.... e = -4 3 3 Convertendo de volta para decimal... m =,4969384765625 erro =,4969384765625 33 34 Instruções Lógicas Testar se um número é par ou impar and E bit a bit and $rd,$rs,$rt or OU bit a bit or nor NÃO OU bit a bit nor $rd,$rs,$rt xor OU EXCLUSIVO bit a bit xor $rd,$rs,$rt andi E bit a bit segundo operando cte andi $rt,$rs,cte ori OU bit a bit segundo operando cte ori $rt,$rs,cte nori NÃO OU bit a bit segundo operando cte nori $rt,$rs,cte xori OU EXCLUSIVO bit a bit segundo operando cte xori $rt,$rs,cte ssl Deslocamento para a esquerda (multiplicação base 2) ssl $rt,$rs,[:3] slr Deslocamento para a direita (divisão base 2) slr $rt,$rs,[:3] sslv Deslocamento para a esquerda (multiplicação base 2) sslv $rd,$rs,$rt slrv Deslocamento para a direita (divisão base 2) slrv $rd,$rs,$rt addi $s,$zero, 43 addi $s,$zero, and $t,$s,$s $rd,$rs,$rt #coloca em s o num. a ser testado #máscara todos os bits exceto o lsb #zera todos os bits exceto o lsb #se t for igual a o número é par, se for igual a é impar Operações lógicas também são utilizadas em diversos outros contextos: 35 Testes lógicos; Computação gráfica; Parsing de arquivos binários; etc. 36 6
29/8/26 Multiplicação e Divisão via Deslocamento (Base 2) 3 ssl $s, 6 Deslocar um número para a esquerda equivale a multiplica-lo por uma potência de 2; Deslocar um número para a direita equivale a dividi-lo por uma potência de 2 Bibliografia Comentada PATTERSON, D. A. e HENNESSY, J. L. 24. Organização e Projeto de Computadores A Interface Hardware/Software. Elsevier/ Campus 4ª edição. HENNESSY, J. L. e PATTERSON, D. A. 22. Arquitetura de Computadores Uma Abordagem Quantitativa. Elsevier/ Campus 5ª edição. 37 38 Bibliografia Comentada MONTEIRO, M. A. 2. Introdução à Organização de Computadores. s.l. : LTC, 2. Bibliografia Comentada STALLINGS, W. 22. Arquitetura e Organização de Computadores. 22. MURDOCCA, M. J. e HEURING, V. P. 2. Introdução à Introdução de Computadores. 2. 85-352-684-. TANENBAUM, A. S. 27. Organização Estruturada de Computadores. 27. 39 4 7