aula-MIPS
Transcript of aula-MIPS
RESUMO
MIPS
Fonte: Hennessy Patterson
Aritmtica MIPS
Todas as instrues possuem trs operandos A ordem do operando fixa (destino primeiro)
Exemplo: Cdigo C: Cdigo MIPS:
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 MIPSPrincpio de projeto: A simplicidade favorece a regularidade. claro que isso complica algumas coisas...
Cdigo C: Cdigo MIPS:
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 bits3
Registradores versus memria
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
4
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
5
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
Os registradores armazenam 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 alinhadas6
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 mquinaInstrues, 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
8
Linguagem de mquinaPense 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
Conceito do programa armazenado
Instrues so bits
Programas so armazenados na memria para serem lidos ou escritos exatamente como os dadosMemria 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 continua10
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: ...
Voc pode construir um loop for simples?12
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
Poltica das convenes de usoNome $zero Nmero do registrador 0 Uso O valor constante 0
$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
$a0-$a3 $t0-$t7 $s0-$s7 $t8-$t9 $gp $sp $fp $ra
04-07 08-15 16-23 24-25 28 29 30 31
Registrador 1 ($at) reservado para o assembler, 26-27 para o sistema operacional 14
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:
Princpio de projeto: agilizar o caso comum. Que formato?15
E quanto s constantes maiores?
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
Depois, precisamos acertar os bits de ordem inferior, por exemplo:
16
E quanto s constantes maiores?
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
Depois, precisamos acertar os bits de ordem inferior, por exemplo:
Linguagem assembly versus linguagem de mquina
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
Viso geral do MIPS
instrues simples, todas com 32 bits muito estruturado, nenhuma bagagem desnecessria apenas trs formatos de instruoR I J op op op rs rs rt rt rd shamt funct endereo de 16 bits endereo de 26 bits
nos baseamos no compilador para obter desempenho
quais so os objetivos do compilador? ajudamos o compilador onde podemos19
Endereos em desvios e jumps
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
Os endereos no so de 32 bits Como manipular isso com instrues load e store?20
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
load word store word load byte
lw $s1,100($s2) sw $s1,100($s2) lb $s1,100($s2)
$s1 = Memria[$s2 + 100] Memria[$s2 + 100] = $s1 $s1 = Memria[$s2 + 100]
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
Byte de um registrador para memria
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
lui $s1,100 beq $s1,$s2,25 bne $s1,$s2,25 slt $s1,$s2,$s3 Slti$s1,$s2,100
$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
j 2500 jr $ra jal 2500
go to 10000 go to $ra $ra = PC + 4. go to 10000
Desvia para endereo de destino Para switch e retorno de procedimento Para chamada de procedimento
23
Modos de endereamento