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