Introdução à Arquitetura de Computadores/Instruções do MIPS: diferenças entre revisões

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Sem resumo de edição
Linha 132:
 
Mas caso você realmente precise pular mais de 32 000 instruções, isso é perfeitamente possível, desde que você altere antes o valor do registrador PC. Com isso, perde-se um pouco de desempenho, mas torna desvios de código extremamente grandes possível. E o importante é que o caso comum (programas em C com blocos menores de 8.000 linhas) roda mais rápido (regra 4 da Filosofia de Projeto do MIPS).
 
Além do '''beq''', temos também o '''bnq''', ou ''Branch if Not Equal'':
 
bne $r1, $r2, DESTINO
 
Ele funciona da mesma forma que o '''beq'''. A diferença é que ele pula um determinado número de instruções somente se o valor dos dois registradores for diferente.
 
E finalmente, temos a instrução '''j''', ou ''Jump'':
 
j ENDEREÇO
 
Ele faz com que o programa passe a executar a instrução que é encontrada no endereço dado. O endereço passado para a instrução '''j''' é sempre um número de 26 bits. Entretanto, os endereços da máquina sempre são números de 32 bits. Então como será possível saber qual o endereço em que está a instrução desejada?
 
É muito simples. Instruções sempre estarão em endereços múltiplos de 8. Então sabemos que os três últimos bits do endereço são sempre 0. Não precisamos armazená-los. Já os três primeiros bits, retiramos do PC, pois é sempre muito mais provável que nós usemos o controle de fluxo para saltar para uma posição não muito distante. Caso precisemos saltar para um posição muito distante, basta alterarmos o valor do PC primeiro. Da mesma forma que foi visto no '''beq''', o caso comum executa mais rápido desta forma. Isso é muito bom, mesmo que tenhamos mais trabalho e perda de desempenho nas pouquíssimas vezes nas quais precisamos dar saltos muito longos.
 
== Instruções de Comparações ==
 
Por fim, precisamos ver ainda instruções de comparação. Um exemplo é o '''slt''', ou ''Set Less Than'':
 
slt $r1, $r2, $r3
 
Ela armazena 1 em $r1 se $r2 < $r3 e 0 caso contrário.
 
== Resumo dos Modos de Endereçamento ==
 
Nas instruções do MIPS podemos representar os endereços de dados das seguintes formas:
 
* '''A Registrador''': Representamos o dado passando o nome do registrador no qual ele está contido. Ex: '''add $r1, $r2, $r2'''.
* '''Base-Deslocamento''': Representamos o dado passando o endereço de um vetor no qual ele está e a quantidade de bits a serem deslocados. Ex: '''lw $r5, 4($r65)'''.
* '''Imediato''': Passamos o dado escrevendo o seu valor imediato. Ex: '''addi $r1, $r2, 456'''.
* '''Relativo ao PC''': Passamos o dado descrevendo o seu valor relativo ao endereço da instrução atual. Ex: '''beq $r1, $r2, DESTINO'''.
* '''Absoluto''': passamos o valor informando o seu endereço (pseudo-)absoluto. Ex: '''j DESTINO'''.
 
Existem apenas estas 5 formas de endereçamento no MIPS. Através delas, efetuamos todas as operações necessárias.
 
[[Categoria:Ciência da Computação]]