Operandos Imediatos e Constantes no MIPS

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

Oi pessoal! Tudo bem com todo mundo? Espero que esteja tudo certo! Dando continuidade a esta série, que trata do Conjunto de Instruções MIPS, hoje vou mostrar para vocês como trabalhar com instruções em que um dos operandos é um número, e não um registrador, como vimos até agora. Esses “números” são chamados de operandos imediatos ou então de operandos constantes.

  

Instruções MIPS com Operandos Imediatos

 

Até o momento, praticamente todas as instruções que aprendemos operavam da seguinte forma:

 

Operação registrador, registrador, registrador

 

Por exemplo:

 

ADD $t0, $s0, $s1

OR $t1, $s3, $s4

 

Mas, e quando precisarmos utilizar um valor diretamente, como nas instruções de alto nível abaixo:

 

a = b + 25;

i = i + 1; ( ou i++)

 

Como seria? É certo que muitas vezes um programa usará um valor imediato em uma ou várias operações, então, os projetistas do MIPS, prevendo este uso, desenvolveram as instruções imediatas, que oferecem versões das instruções aritméticas e lógicas, em que um dos operandos é um valor imediato, daí a vogal i é adicionada a essa instrução, para diferenciá-la da instrução MIPS tradicional. Exemplos:

 

addi rt, rs, imm           #operação soma imediata, opcode 8

ori rt, rs, imm             #operação lógica OR imediata, opcode 13

xori rt, rs, imm           #operação lógica XOR imediata, opcode 14

slti rt, rs, imm             #instrução SLT imediata, opcode 10

 

Em todas as instruções, o resultado é armazenado no registrador rt, e imm significa IMEDIATO. Incluindo valores imediatos dentro das instruções aritméticas, as operações tornam-se mais rápidas, pois ler as constantes (valores imediatos) da memória é um processo bem mais lento. O formato da instrução é do tipo I e o número a ser usado neste campo não pode extrapolar essa quantidade de bits.

 

Opcode

rs

rt

imm

6 bits

5 bits

5 bits

16 bits

 

 

Constante Zero

 

Existe um registrador chamado $zero que é muito útil e acaba por simplificar o conjunto de instruções. Algumas operações são realizadas em cima de valores zeros, portanto, ter um registrador com apenas esse valor constante zero diminui a necessidade de outras operações. Portanto, sempre que for necessário manipular o valor zero em alguma operação, lembre-se deste registrador.

 

ADDI

 

Vou demonstrar pelo menos um exemplo de instrução imediata. A partir desta, ficará mais fácil para vocês realizarem a compilação manual das outras. Tomando como exemplo a instrução dada no início deste artigo

 

a = b + 25;

 

Vejamos como fica:

 

Linguagem de Montagem:     ADDI $t0, $s0, 25      #$t0 = $s0 + 25

 

Linguagem de Máquina:        ADDI $8, $16, 25      #$8 = $16 + 25

 

Representação:

 

Opcode

rs

rt

imm

8

8

16

25

 

Código de Máquina:              00100001000100000000000000011001

 

Conclusão

 

Espero que tenham conseguido entender pessoal, mas caso existam dúvidas, por favor, deixem ali embaixo nos comentários que eu tentarei responder o mais breve possível. Para conhecer mais detalhes sobre o conjunto de instruções do MIPS, sugiro consultar o Apêndice B do livro que é referência para a escrita destes artigos: PATTERSON, D. A.; HENNESSY, J. L. “Organização e Projeto de Computadores: A Interface Hardware/Software”. 4.ª Edição, Rio de Janeiro: Elsevier, 2014.

Outros artigos da série

<< Endereços de Memória no MIPSCompilando Arrays com índice variável no MIPS >>

NEWSLETTER

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

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Elaine Cecília Gatto
Bacharel em Engenharia de Computação. Mestre em Ciência da Computação. Co-fundarora e Líder das #GarotasCPBr. Pesquisadora Convidada no Grupo de Pesquisa de "Artes em Tecnologias Emergentes" do Programa de Pós Graduação em Design na UNESP Campus Bauru. Cantora, Docente no Magistério Superior, Geek, Nerd, Otaku e Gamer. Apaixonada por Michael Jackson, Macross, Séries e Filmes de Super Heróis, Cervejas e Vinhos. Mais informações sobre mim você encontra em: http://lattes.cnpq.br/8559022477811603.

1
Deixe um comentário

avatar
 
1 Comment threads
0 Thread replies
1 Followers
 
Most reacted comment
Hottest comment thread
1 Comment authors
Marcus Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Marcus
Visitante
Marcus

obrigado professora salvou demaaaaaaais