Escolar Documentos
Profissional Documentos
Cultura Documentos
MIPS
Aritmtica MIPS
Todas as instrues possuem trs operandos A ordem do operando fixa (destino primeiro)
a=b+c add a, b, c
O nmero natural de operandos para uma operao como adio trs... Exigir que cada instruo tenha exatamente trs operandos, nem mais nem menos, est de acordo com a filosofia de manter o hardware simples.
2
Aritmtica MIPS
Princpio de projeto: A simplicidade favorece a regularidade. claro que isso complica algumas coisas...
a = b + c + d; add a, b, c add a, a, d Os operandos precisam ser registradores, apenas 32 registradores fornecidos Cada registrador contm 32 bits
3
Os operandos das instrues aritmticas precisam ser registradores apenas 32 registradores fornecidos O compilador associa variveis com registradores E quanto aos programas com muitas variveis?
Controle Memria Entrada
Caminho de dados
Sada
Processador
E/S
Organizao da memria
Vista como um array grande e unidimensional, com um endereo. Um endereo de memria um ndice para o array. Endereamento de byte significa que o ndice aponta para um byte da memria.
8 bits de dados 8 bits de dados 8 bits de dados 8 bits de dados 8 bits de dados 8 bits de dados 8 bits de dados
Organizao da memria
Os bytes so bons, mas a maioria dos itens de dados usam words maiores Para o MIPS, uma word possui 32 bits ou 4 bytes.
32 bits de dados 32 bits de dados 32 bits de dados 32 bits de dados
232 bytes com endereos de byte de 0 a 232-1 230 words com endereos de byte 0, 4, 8, ... 232-4 As words so alinhadas
6
Instrues
Instrues load e store Exemplo: Cdigo C: A[12] = h + A[8]; Cdigo MIPS: lw $t0, 32($s3) add $t0, $s2, $t0 sw $t0, 48($s3) Pode se referir aos registradores por nome (por exemplo, $s2, $t2) em vez do nmero A instruo store word tem o destino por ltimo Lembre-se de que os operandos so registradores, no memria! No podemos escrever: add 48($s3), $s2, 32($s3)
7
Linguagem de mquina
Instrues, como registradores e words de dados, tambm possuem 32 bits de tamanho - Exemplo: add $t1, $s1, $s2 - Registradores tm nmeros, $t1=9, $s1=17, $s2=18 Formato da instruo:
Hennessy Patterson
Linguagem de mquina
Pense nas instrues load-word e store-word - O que o princpio da regularidade nos levaria a fazer? - Novo princpio: Um bom projeto exige comprometimento Introduza um novo tipo de formato de instruo - Tipo I para instrues de transferncia de dados - Outro formato era o tipo R para o registrador Exemplo: lw $t0, 32($s2)
23 op
18 rs
9 rt
32 nmero de 16 bits
Qual o compromisso?
9
Instrues so bits
Programas so armazenados na memria para serem lidos ou escritos exatamente como os dados
Memria para dados, programas, compiladores, editores etc.
Processador
Memria
Ciclo de execuo e busca - As instrues so buscadas e colocadas em um registrador especial - Os bits no registrador controlam as aes subseqentes - Busca a prxima instruo e continua
10
Controle
Instrues de tomada de deciso - altera o fluxo de controle - por exemplo, mudar a prxima instruo a ser executada Instrues de desvio condicionais do MIPS: bne $t0, $t1, Label beq $t0, $t1, Label Exemplo: if (i==j) h = i + j; bne $s0, $s1, Label add $s3, $s0, $s1 Label: ....
11
Controle
Instrues de desvio incondicionais do MIPS: j label Exemplo: if (i!=j) h=i+j; else h=i-j;
beq $s4, $s5, Lab1 add $s3, $s4, $s5 j Lab2 Lab1: sub $s3, $s4, $s5 Lab2: ...
At agora:
Instruo add $s1,$s2,$s3 sub $s1,$s2,$s3 lw $s1,100($s2) sw $s1,100($s2) bne $s4,$s5,L beq $s4,$s5,L j Label
Significado $s1 = $s2 + $s3 $s1 = $s2 $s3 $s1 = Memory[$s2+100] Memory[$s2+100] = $s1 Next instr. is at Label if $s4 $s5 Next instr. is at Label if $s4 = $s5 Next instr. is at Label
Formatos:
R I J op op op rs rs rt rt rd shamt funct endereo de 16 bits
endereo de 26 bits
13
$v0-$v1
02-03
Valores para resultados e avaliao de expresses Argumentos Temporrios Valores salvos Mais temporrios Ponteiro global Ponteiro de pilha Pointeiro de quadro Endereo de retorno
Constantes
Constantes pequenas so usadas muito freqentemente (50% dos operandos) Por exemplo: A = A + 5; B = B + 1; C = C - 18; Solues? Por que no? - coloque constantes tpicas na memria e carregue-as. - crie registradores hard-wired (como $zero) para constantes comuns. Instrues MIPS:
Gostaramos de ser capazes de carregar uma constante de 32 bits em um registrador Precisamos usar duas instrues; nova instruo load upper immediate:
preenchido com zeros
16
Gostaramos de ser capazes de carregar uma constante de 32 bits em um registrador Precisamos usar duas instrues; nova instruo load upper immediate: lui $t0, 1010101010101010 preenchido com zeros
1010101010101010
0000000000000000
O assembly fornece uma representao simblica conveniente - muito mais fcil do que escrever nmeros - por exemplo, destino primeiro A linguagem de mquina realidade subjacente - por exemplo, o destino no mais o primeiro O assembly pode fornecer pseudo-instrues - por exemplo, move $t0, $t1 existe apenas no assembly - seria mais bem implementada usando add $t0,$t1,$zero Ao considerar o desempenho, voc deve contar as instrues reais
18
instrues simples, todas com 32 bits muito estruturado, nenhuma bagagem desnecessria apenas trs formatos de instruo
R I J op op op rs rs rt rt rd shamt funct endereo de 16 bits endereo de 26 bits
Instrues:
bne $t4,$t5,Label beq $t4,$t5,Label j Label A prxima instruo est em Label se $t4 dif $t5 A prxima instruo est em Label se $t4 = $t5 A prxima instruo est em Label
Formatos:
I J op op rs rt endereo de 16 bits endereo de 26 bits
Endereos em desvios
Instrues:
bne $t4,$t5,Label beq $t4,$t5,Label A prxima instruo est em Label se $t4 $t5 A prxima instruo est em Label se $t4 = $t5
Formatos:
I op rs rt endereo de 16 bits
Poderamos especificar um registrador (como lw e sw) e acrescent-lo ao endereo - use o registrador de endereo de instruo (PC = contador do programa) - a maioria dos desvios local (princpio da localidade) As instrues jump usam apenas bits de ordem superior do PC - limites de endereo de 256 MB:
Resumindo:
Operandos MIPS
Nome
Exemplo
Comentrios
32 registradores
$s0-$s7, $t0-$t9, $zero, $a0-$a3, $v0-$v1, $gp, $fp, $sp, $ra, $at
Locais rpidos para dados. No MIPS, os dados precisam estar em registradores para a realizao De operaes aritmticas. O registrador MIPS $zero sempre igual a 0. O registrador $at reservado para o assembler tratar de constantes grandes.
22
Resumindo: (Cont.)
Assembly do MIPS Categoria Aritmtica Instruo add subtract add immediate Exemplo add $s1,$s2,$s3 sub $s1,$s2,$s3 addi $s1,$s2,100 Significado $s1 = $s2 + $s3 $s1 = $s2- $s3 $s1=$s2 + 100 Comentrios Trs operandos; dados nos registradores Trs operandos; dados nos registradores Usada para somar constantes
Transferncia de dados
Dados da memria para o registrador Dados do registrador para a memria Byte da memria para registrador
store byte
sb $s1,100($s2)
Memria[$s2+100] = $s1
load upper immed. Desvio condicional branch on equal branch on not equal set on less than set less than immediate Desvio incondicional jump jump register jump and link
$s1 = 100 * 216 if ($s1 == $s2) go to PC + 4 + 100 if ($s1 != $s2) go to PC + 4 + 100 if ($s2 < $s3) $s1 = 1; else $s1 = 0 if ($s2 < 100) $s1 = 1; else $s1 = 0
Carrega constante nos 16 bits mais altos Testa igualdade; desvio relativo ao PC Testa desigualdade; relativo ao PC Compara menor que; usado com beq, bne Compara menor que constante
Desvia para endereo de destino Para switch e retorno de procedimento Para chamada de procedimento
23
Modos de endereamento