Instruções
Tipo I
utilizam um valor imediato, que é um número constante codificado diretamente na instrução
lw
(load word): carrega um endereço da memória para um registrador. Transfere sempre uma .word (32 bits ou 4 bytes)sw
(store word): carrega o endereço de um registrador para a memóriaaddi
subi
beq
bne
Tipo R
add
sub
and
or
Sinais de controle
Controle ALU: informado na tabela na questão, depende do campo funct
RegDst:
- tipo i terão valor
00
, não registrador destino =rt
- tipo r, registrador destino =
rd
, seu valor será01
Branch: se o valor da próxima instrução vem de um deslocamento ou da instrução seguinte na memória (+4)
- instruções de desvio, como
beq
,bne
, tem valor01
- todo o resto,
00
MemRead: permite ler a memória de dados
lw
, única instrução que lê memória de dados para salvar em um registrador,01
- todo o resto, `00
MemtoReg: determina de onde vem o dado a ser escrito no banco de registradores
- se vem da ALU, em instruções tipo r,
00
- se vem da memória, instrução
lw
,01
ALUOp: informado numa tabela da questão, depende da instrução em execução
MemWrite: permite escrever na memória de dados
sw
, única instrução que escreve na memória de dados para salvar o dado de um registrador na memória,01
- todo o resto,
00
ALUSrc: determina se o segundo operando deve ser um valor imediato ou de um registrador
- 00:
beq
,add
,sub
(tipo R no geral e comparadores) - 01: ,
addi
,subi
,lw
RegWrite: determina se o banco de registradores pode ser escrito ou não
sw
+beq
não escrevem no banco de registradores,00
- tipo i + tipo r +
lw
escrevem no banco de registradores,01
Obs: Instruções tipo r são instruções de lógica aritmética que operam diretamente nos registradores tipo i: instruções imediatas com valores constantes, addi, subi
Questões
AND Rd, Rs, Rt
- ALUControl:
0000
- RegDst:
01
- Branch:
00
- MemRead:
00
- MemtoReg:
00
- ALUOp:
10
- MemWrite:
00
- ALUSrc:
00
- RegWrite:
01
Beq Rd, Rs, adress
- ALUControl:
0110
- RegDst:
00
ou X - Branch:
01
- MemRead:
00
- MemtoReg:
00
ou X - ALUOp:
01
- MemWrite:
00
- ALUSrc:
00
- RegWrite:
00
Addi Rs, Rt, i
- ALUControl:
0001
- RegDst:
00
- Branch:
00
- MemRead:
00
- MemtoReg:
00
- ALUOp:
10
- MemWrite:
00
- ALUSrc:
01
- RegWrite:
01
Lw Rd, n(Rs)
- ALUControl:
0010
- RegDst:
00
- Branch:
00
- MemRead:
01
- MemtoReg:
01
- ALUOp:
00
- MemWrite:
00
- ALUSrc:
01
- RegWrite:
01
Implementação de novas instruções
JUMP
- Adicionar um multiplexador (MUX) para selecionar o valor de salto no caminho de dados do PC.
- Concatenar os bits do PC atual com os bits de endereço de salto da instrução.
- Introduzir o sinal de controle Jump para que o caminho de dados seja atualizado adequadamente quando essa instrução for executada.
Essas alterações são necessárias para implementar o salto incondicional.