Armazenando um valor em Array no MIPS

instrução MIPS LW e SW IF Simples no MIPS

Oi pessoal! No artigo passado aprendemos a usar a instrução MIPS LW (Load Word), para carregar um operando da memória para um registrador. Hoje aprenderemos a usar a instrução SW – Store Word – para fazer o processo inverso, armazenando um valor em Array no MIPS.

STORE WORD – SW

A instrução Store Word tem como objetivo armazenar um valor, que está em um registrador, na memória. Store Word significa Armazenar Palavra, ao pé da letra, assim como Load Word significa Carregar Palavra.

Essas duas instruções, LW e SW, são idênticas em seu formato, o que muda de fato é o objetivo de cada uma, de forma que devemos tomar cuidado ao passá-las para a Representação, pois os campos têm de receber os valores corretos, cuidado para não se confundir. Veja a Tabela 1:

Tabela 1: Representação de Instruções do Formato Tipo I

opcodersrtendereço
6 bits5 bits5 bits16 bits
código de operaçãoregistrador destinoregistrador fonteendereço de memória

É exatamente igual à instrução LW, mas a SW inverte RS (fonte) e RT (destino)! Agora vamos ver a sintaxe da instrução:

SW registrador_fonte, valor (registrador_destino)

Exemplo:

SW $t0, 30 ( $s0 )     # memória [ $s0 + 30 ] = $t0

Exatamente a mesma forma, MAS, observe que agora a memória é quem está recebendo o valor do registrador; o registrador destino está depois e o registrador fonte está antes, isto é, estão invertidos em relação à instrução LW. Portanto, $t0 é o valor que deve ser armazenado no endereço de memória determinado por ($s0 + 30).

Compilação de instruções SW

Agora que já fomos apresentados à instrução SW, vamos ver como fica a conversão da seguinte instrução:

a[15] = b + c

Vamos usar $s0 para a, $s1 para b e $s2 para c. O primeiro passo é converter b + c, que ficará assim:

ADD $t0, $s1, $s2         # $t0 = $s1 + $s2

A instrução acima realiza a soma de b com c, armazenando o resultado em $t0. Agora, vamos armazenar $t0 no endereço de memória, que é o nosso array a[15]:

SW $t0, 15 ( $s0)      # memória [ 15 + $s0 ] =  $t0

a[15] é correspondente ao código 15 ( $s0 ) e $t0 é o valor da soma. Portanto, o código final é:

ADD $t0, $s1, $2

SW $t0, 15 ( $s0 )

Linguagem de Máquina

A Linguagem de Máquina para a[15] = b + c ficará da seguinte forma: (lembre-se de consultar as tabelas que foram apresentadas no artigo PRIMEIRA INSTRUÇÃO MIPS)

ADD $8, $17, $18

SW $8, 15 ( $16 )

Representação da Linguagem de Máquina

A representação da linguagem de máquina para a[15] = b + c ficará da seguinte forma. RS e RT são os registradores fonte e RD o registrador destino, para as instruções do tipo R. Para as instruções STORE WORD, RS é o registrador fonte e RT é o registrador destino. Finalizando, para as instruções LOAD WORD, RS é o registrador destino e RT é o registrador fonte. Não se esqueça de consultar as tabelas para fazer a Representação.

opcodersrtrdshamtfunct
017188032
4381615

Código de Máquina

O código de máquina para a[15] = b + c ficará da seguinte forma:

opcodersrtrdshamtfunct
000 00010001100100100000000100 000
101 01101000100000000 0000 0000 1111

00000010001100100100000000100000

10101101000100000000000000001111

Resumo

Formato Tipo R 

opcodersrtrdshamtfunct
6 bits5 bits5 bits5 bits5 bits6 bits
código da operaçãoregistrador fonteregistrador fonteregistrador destinodeslocamentosub código da operação

Formato Tipo I 

opcodersrtendereço
6 bits5 bits5 bits16 bits
código da operaçãoregistrador destinoregistrador fonteendereço de memória

Instruções

Tipo R:

InstruçãoExemplo 
ADD registrador destino, registrador fonte, registrador fonteADD $t0, $s0, $s1$t0 = $s0 + $s1
SUB registrador destino, registrador fonte, registrador fonteSUB $t1, $s3, $s4$t1 = $s3 – $s4

Tipo I:

InstruçãoExemplo 
LW registrador destino, valor ( registrador fonte)LW $t0, 20 ( $s0 )$t0 = memória [ 20 + $s0 ]
SW registrador destino, valor ( registrador fonte)SW $t0, 20 ( $s0 )memória [ 20 + $s0 ] = $t0

Exercícios

Converta as instruções abaixo:

  1. a[10] = b – c;
  2. b[245] = a + c;
  3. c[0] = b – a;

Use $s0 para a, $s1 para b e $s2 para c.

Outros artigos da série

<< Convertendo uma instrução com Array no MIPSInstruções LW e SW com Array no MIPS >>
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Hardware » Sistemas Digitais » Armazenando um valor em Array no MIPS
Comentários:
Notificações
Notificar
guest
6 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Rogério
Rogério
12/06/2018 10:24

Olá muito bom seu material.
Só confira o cálculo do deslocamento para acessar um arranjo pelos seus sobrescritos nas instruções de lw e sw. Acredito que deva considerar o tamanho do tipo de dado utilizado, se for inteiro de 32 bits, os elementos estarão de 4 em 4 bytes. O a[0]= 0*4 =0, o a[1] do 4 byte para frente e o endereço do byte inicial do elemento 15, o a[15] será 15 * 4 = 60. Considerando $s0 como o endereço de base para ‘a’ ou o a[0]:
SW $t0, 60( $s0 )

Souza
Souza
05/11/2016 17:48

Só um duvida.
SW seria: registrador fonte, valor (registrador destino).
Os dois abaixo ficaram iguais.

Apesar que no final:
LW – $t0 = memória [ 20 + $s0 ]
SW – memória [ 20 + $s0 ] = $t0
Ficaram corretas.

Tipo I:
Instrução Exemplo
LW registrador destino, valor ( registrador fonte) LW $t0, 20 ( $s0 ) $t0 = memória [ 20 + $s0 ]
SW registrador destino, valor ( registrador fonte) SW $t0, 20 ( $s0 ) memória [ 20 + $s0 ] = $t0

Elaine Cecília Gatto
Elaine Cecília Gatto
Reply to  Souza
09/11/2016 09:22

É meio confuso mesmo Souza, mas no livro do Patterson está exatamente assim. Eu preferi manter como o criador do MIPS fez!!!! Mas você pode fazer uma anotação pessoal sua para não se perder, tudo bem?!

Souza
Souza
Reply to  Elaine Cecília Gatto
09/11/2016 14:20

Tudo bem. Já fiz.

Elaine Cecília Gatto
Elaine Cecília Gatto
Reply to  Souza
18/11/2016 11:34

olha!!!!

Talvez você goste:

Séries



Outros da Série

Menu

WEBINAR
 
Porque o RTOS não faz o que eu quero?

Data: 28/10 às 19:30h - Apoio: Mouser Electronics
 
INSCREVA-SE AGORA »



 
close-link