Organização e Arquitetura de Computadores
##MIPS
###Operações aritméticas
- add
- addi
- sub
subi(não existe, utiliza addi, com um parametro negativo)
###Operações lógicas
| Operação | Operador C / Java | Instrução MIPS |
|---|---|---|
| Binary Shift Left | << | sll |
| Binary Shift Right | >> | srl |
| Bit-by-bit AND | & | and, andi |
| Bit-by-bit OR | | | or,ori |
| Bit-by-bit NOT | ~ | nor* |
| *para realizar o nor realizar um not, deve-se fazer: nor $s0,$s0,$zero. de outra forma nor equivale a x = ~(x|y) |
||
###Carregamento de constantes
Constantes no MIPS, tem no máximo 16bits, portanto para
32bits:
| Desejamos carregar por exemplo: 0xFFFFAAAA | ||
|---|---|---|
| ori | $t0,$zero,0xFFFF | 0x0000FFFF |
| sll | $s0,$t0,16 | 0xFFFF0000 |
| ori | s0,$s0,0xAAAA | 0xFFFFAAAA |
###Instruções de tomada de decisão if-then-else
- Desvios
- If-then-else
- Comparadores
- Switch
#####Rótulos / Labels
Apontam um endereço de memória por um nome especificado.
label: add $s1,$s2,$s0
agora quando referenciado label, sabemos que vai pra parte do processamento que tem label: no início.
#####Desvios A label deve estar em até 2^16 instruções para continuar sendo identificada, pois as instruções ocupam 16 bits.
*Desvios condicionais
beq: branch on equal
beq $s0, $s1, Igual #Se $s0==$s1, desvie para o endereço do label Igual
bne: branch on not equal
bne $s0, $s1, Diferente #Se $s0!=$s1, desvie para o endereço do label Diferente
*Desvios incondicionais
j (Jump)
j Fim # Desvie para o endereço do label Fim
O jump deve estar em uma instrução a 2^26, pois a operação ocupa 6 bits.
jal (Jump and Link)
Salva o endereço atual em $ra e desvie.
Suporte para chamadas de procedimentos.
jr (Jump Register)
Desvie para o endereço no registrador X.
Suporte para retorno de procesimentos.
#####Comparadores
sit (Set if less than)
portanto pra representar: if (a<b){c=a;}else{c=b;}, temos:
sit $t0,$s1,$s2
beq $t0,$zero,else
add $s0,$zero,$s1
j exit
else:add $s0, $zero, $s2
exit: #... restante das instruções.
siti (Set if less than imediate)
portanto pra representar: if (a<10){c=a;}else{c=10;}, temos:
siti $t0,$s1,10
beq $t0,$zero,else
add $s0,$zero,$s1
j exit
else:addi $s0, $zero, 10
exit: #... restante das instruções.