Você está na página 1de 12

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 MIPS
Princpio 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 bits
3

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

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

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 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

Conceito do programa armazenado

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: ...

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 uso


Nome $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 instruo
R 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 podemos


19

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

Você também pode gostar