Todas as operações:
1. Lê memória e incrementa PC
[Link] valor dos registradores em A e B e decodifica branch
ADD rd, rs, rt | rd <- rs + rt
AND rd, rs, rt | rd <- rs & rt
SUB rd, rs, rt | rs <- rs - rt
[Link] operação e grava em ALUOut
[Link] ALUOut no registrador
DIV rs, rt
MULT rs, rt
[Link] operação e grava resultado nos registradores HI e LO
MFHI rd
MFLO rd
[Link] o valor em HI ou LO em rd
JR rs
[Link] o endereço que está em rs no PC
SLL rd, rt, shamt | rd <- rt << shamt
SRA rd, rt, shamt | rd <- rt >> shamt*
SRL rd, rt, shamt | rd <- rt >> shamt
[Link] o valor do registrador B em ‘shamt’ unidades e grava em rd
SLLV rd, rs, rt | rd <- rs << rt
SRAV rd, rs, rt | rd <- rs >> rt*
3. Desloca o valor do registrador A uma quantidade definida pelo
registrador B e grava em rt
SLT rd, rs, rt | rd <- (rs < rt) ? 1 : 0
[Link] o valor do registrador A com o valor de B e joga o valor da
flag LT estendido para 32 bits em rd
RTE | PC <- EPC
3. Carrega o valor do registrador EPC em PC
ADDI rt, rs, immediate | rt <- rs + immediate
ADDIU rt, rs, immediate | rt <- rs + immediate
[Link] a soma do valor no registrador A com o numero ‘immediate’
estendido para 32 bits, e salva em ALUOut
[Link] o valor de ALUOut em rt
SLTI rt, rs, immediate | rt <- (rs < immediate) ? 1 : 0
[Link] o valor do registrador A com o valor de ‘immediate’
estendido para 32 bits e joga o valor da flag LT estendido para 32
bits em rt
BEQ rs, rt, offset | Desvia se rs == rt
BNE rs, rt, offset | Desvia se rs != rt
3. Compara os valores dos registradores A e B e envia o resultado da
flag EQ para o controlador
4. Grava o valor em ALUOut (calculado no segundo clock, ver primeira
pagina) em PC caso EQ == 1 (no BEQ) ou EQ == 0 (no BNE)
BLE rs, rt, offset | Desvia se rs <= rt
BGT rs, rt, offset | Desvia se rs > rt
3. Compara os valores dos registradores A e B e envia o resultado da
flag GT para o controlador
4. Grava o valor em ALUOut (calculado no segundo clock, ver primeira
pagina) em PC caso GT == 1 (no BGT) ou GT == 0 (no BLE)
BEQM rs, rt, offset | Desvia se Mem[rs] == rt
[Link] o valor na memória, na posição especificada no registrador A,
e grava em MDR
[Link] o valor em MDR com o valor no registrador B e envia o
resultado da flag EQ para o controlador
5. Grava o valor em ALUOut (calculado no segundo clock, ver primeira
pagina) em PC caso EQ == 0
LUI rt, immediate | rt <- immediate << 16
[Link] o valor de ‘immediate’ deslocado em 16 bits para a esquerda em
rt
LW rt, offset(rs) | rt <- Mem[rs + offset]
LH rt, offset(rs) | rt <- halfword Mem[rs + offset]
LB rt, offset(rs) | rt <- byte Mem[rs + offset]
[Link] a soma de rs com ‘offset’ estendido para 32 bits, e salva a
informação deste endereço da memória em MDR
[Link] o valor de MDR, após passar por LS(Load Size, define o tamanho
do que vai ser gravado) em rt
SW rt, offset(rs)
SH rt, offset(rs)
SB rt, offset(rs)
[Link] a soma de rs com ‘offset’ estendido para 32 bits, e salva em
ALUOut
[Link] a informação contida na posição de memoria definida por
ALUOut em MDR
[Link] o valor do registrador B na posição de memória definida por
ALUOut, após passar por SS(Store Size, define o tamanho do que vai ser
gravado, sem perda de informação)
J offset
[Link] ‘offset’ em 2 bits para a esquerda, concatena com [31..28]
de PC e grava o resultado em PC
JAL offset
[Link] o valor de PC+4 em ALUOut
4. Desloca ‘offset’ em 2 bits para a esquerda, concatena com [31..28]
de PC, grava o resultado em PC e grava o valor de ALUOut no
registrador 31