Ir para o fim do documento e referências.
Carrega um registrador, determinado na instrução ($t), com a palavra localizada na posição de memória que é o resultado da soma do conteúdo do segundo registrador (também definido na instrução: $s) e o valor imediato. O imediato possui 16 bits.
Instrução | Formato | Opcode/Funct | Operação (sintaxe estilo C) |
---|---|---|---|
lw $t, imediato($s) | I | 0x23 / NA | $t = MEM[endereço]; PC += 4; |
O valor do endereço é dado pela soma de dois inteiros de 32 bits:
O primeiro, chamado de base, é o conteúdo do registrador definido na instrução ($s);
E o segundo, chamado de deslocamento, é gerado pela extensão do sinal do campo imediato (que é de 16 bits).
A extensão do sinal do valor imediato, cria um valor de 32 bits, onde:
Os 16 bits mais significativos (31~16) = {imediato[15]}. Ou seja, repete 16 vezes o valor do bit 15 do valor imediato;
Os 16 bits menos significativos (15~0) = imediato. Ou seja, o próprio imediato.
O seja, o endereço é a soma do conteúdo do registrador com o seguinte agregado:
Armazena o conteúdo de um registrador, definido na instrução ($t), na posição de memória determinada pela soma do conteúdo de um segundo registrador (também definido na instrução: $s) com o valor imediato. O imediato possui 16 bits.
Instrução | Formato | Opcode/Funct | Operação (sintaxe estilo C) |
---|---|---|---|
sw $t, imediato($s) | I | 0x2B / NA | MEM[endereço] = $t; PC += 4; |
O valor do endereço é dado pela soma de dois inteiros de 32 bits:
O primeiro, chamado de base, é o conteúdo do registrador definido na instrução ($s);
E o segundo, chamado de deslocamento, é gerado pela extensão do sinal do campo imediato (que é de 16 bits).
A extensão do sinal do valor imediato, cria um valor de 32 bits, onde:
Os 16 bits mais significativos (31~16) = {imediato[15]}. Ou seja, repete 16 vezes o valor do bit 15 do valor imediato;
Os 16 bits menos significativos (15~0) = imediato. Ou seja, o próprio imediato.
O seja, o endereço é a soma do conteúdo do registrador com o seguinte agregado:
Soma o conteúdo de dois registradores, definidos na instrução, e armazena o resultado em um terceiro registrador (também definido na instrução), que pode, ou não, ser um dos dois anteriores.
Instrução | Formato | Opcode/Funct | Operação (sintaxe estilo C) |
---|---|---|---|
add $d, $s, $t | R | 0x0 / 0x20 | $d = $s + $t; PC += 4; |
Faz a subtração entre o conteúdo de dois registradores, definidos na instrução, e armazena o resultado em um terceiro registrador (também definido na instrução), que pode, ou não, ser um dos dois anteriores.
Instrução | Formato | Opcode/Funct | Operação (sintaxe estilo C) |
---|---|---|---|
sub $d, $s, $t | R | 0x0 / 0x22 | $d = $s - $t; PC += 4; |
Executa a operação lógica “E”, bit a bit, entre o conteúdo de dois registradores, definidos na instrução, e armazena o resultado em um terceiro registrador (também definido na instrução), que pode, ou não, ser um dos dois anteriores.
Instrução | Formato | Opcode/Funct | Operação (sintaxe estilo C) |
---|---|---|---|
and $d, $s, $t | R | 0x0 / 0x24 | $d = $s & $t; PC += 4; |
Executa a operação lógica “OU”, bit a bit, entre o conteúdo de dois registradores, definidos na instrução, e armazena o resultado em um terceiro registrador (também definido na instrução), que pode, ou não, ser um dos dois anteriores.
Instrução | Formato | Opcode/Funct | Operação (sintaxe estilo C) |
---|---|---|---|
or $d, $s, $t | R | 0x0 / 0x25 | $d = $s | $t; PC += 4; |
Compara o conteúdo de dois registradores (definidos na instrução) e indica o resultado em um terceiro registrador (também definido na instrução). Usando o exemplo da tabela abaixo, se o conteúdo do registrador $s for menor que o conteúdo do registrador $t, o registrador $d recebe o valor 1. Caso contrário, $d recebe o valor 0.
Instrução | Formato | Opcode/Funct | Operação (sintaxe estilo C) |
---|---|---|---|
slt $d, $s, $t | R | 0x0 / 0x2A | $d = ($s < $t ? 1: 0); PC += 4; |
Os registradores comparados contém inteiros com sinal.
Compara o conteúdo de dois registradores definidos na instrução. Se forem iguais, desvia para o endereço definido por (PC+4)+(extSinal(imediato << 2)). Caso contrário, continua na próxima instrução.
Instrução | Formato | Opcode/Funct | Operação (sintaxe estilo C) |
---|---|---|---|
beq $s, $t, imediato | I | 0x04 / NA | if($s == $t) PC += 4 + (Imediato << 2) else PC += 4; |
Ou seja, o endereço de desvio é a soma do PC+4 e do agregado:
Instrução | Formato | Opcode/Funct | Operação (sintaxe estilo C) |
---|---|---|---|
j valor | J | 0x02 / NA | PC = destino; |
O valor de destino é calculado da através do seguinte agregado:
Ou seja, os quatro bits mais significativos do PC+4, concatenado com os 26 bits do campo valor, concatenado com dois bits com o valor 0.
Tipo R:
Formato | Bits: | |||||
---|---|---|---|---|---|---|
31 ~ 26 | 25 ~ 21 | 20 ~ 16 | 15 ~ 11 | 10 ~ 6 | 5 ~ 0 | |
tipo R | 0x0 | Rs | Rt | Rd | sem uso | funct |
Tipo I:
Formato | Bits: | |||
---|---|---|---|---|
31 ~ 26 | 25 ~ 21 | 20 ~ 16 | 15 ~ 0 | |
tipo I | opcode | Rs | Rd | valor imediato (16 bits) |
Tipo J:
Formato | Bits: | |
---|---|---|
31 ~ 26 | 25 ~ 0 | |
tipo J | opcode | valor imediato (26 bits) |
O subconjunto “B” possui as instruções do subconjunto “A” e adiciona as listadas abaixo:
A instrução de carga:
As instruções lógico-aritméticas:
Soma com imediato (addi);
E lógico com imediato (ANDI);
OU lógico com imediato (ORI);
Comparação menor que imediato (set if less than: slti).
As instruções de desvio:
Desvio se não igual (branch not equal: bne);
Salto e conecta (jump and link: jal);
Salto por registrador (jump register: jr).
Cabe ao aluno pesquisar o funcionamento dessas instruções.
Ir para o início do documento.