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óriaaddisubibeqbne
Tipo R
addsubandor
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+beqnão escrevem no banco de registradores,00
- tipo i + tipo r +
lwescrevem 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:
00ou X - Branch:
01 - MemRead:
00 - MemtoReg:
00ou 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.