Aula 13: Decomposição de Instruções do Tipo I e S

Objetivos


Contextualização

As instruções do tipo I:

São utilizadas para:

            addi rd, rs1, #valor;


As instruções desse tipo, para a nossa implementação básica, são:

Formato das instruções do tipo I:

Estrutura dos Campos da Instrução do tipo I
Imediato Rs1 funct3 Rd opcode
12 bits 5 bits 3 bits 5 bits 7 bits
31~20 19~15 14~12 11~7 6~0
MSB (b31) LSB (b0)

O modo de endereçamento usado nas instruções do tipo I está na figura abaixo.


As instruções do tipo S:

A instrução desse tipo, para a nossa implementação básica, é:

Exemplo de Store Word:

Organização dos campos para o formato S:

Estrutura dos Campos da Instrução do tipo S
Imediado(11:5) Rs2 Rs1 funct3 Imediado(4:0) opcode
7 bits 5 bits 5 bits 3 bits 5 bits 7 bits
31~25 24~20 19~15 14~12 11~7 6~0
MSB (b31) LSB (b0)

O modo de endereçamento usado nas instruções do tipo S está na figura abaixo.

Exemplo de Load

Sintaxe:

    lw  rd,  imediato(rs1);

Operação:

x[rd] = M[x[rs1]+extSinal(imediato)]

Onde:

extSinal = { 20{imediato[11]}, imediato }

Ou seja, o valor de 32 bits utilizado na soma terá nos seus 20 bits mais significativos a repetição do bit 11 do imediato (o bit de sinal) e os próximos 12 bits serão o próprio imediato.

Exemplo de Store

Sintaxe:

    sw  rs2,  imediato(rs1);

Operação:

M[x[rs1]+extSinal(imediato)] = x[rs2]

Onde:

extSinal = { 20{imediato[11]}, imediato }

A formação do imediato de 12 bits é feita pela concatenação do Imediado(11:5) com o Imediado(4:0). Esse valor tem o seu bit de sinal extendido da mesma forma que na instrução lw.


Exercícios

Para saber a codificação utilizada nos campos das instruções, consulte o greencard.

Para a instrução:

    lw  x1,  1000(x2)

Qual seria a sua codificação?

Imediado(12) Rs1 funct3 rd opcode
12 bits 5 bits 3 bits 5 bits 7 bits
31~20 19~15 14~12 11~7 6~0


lw: x[rd] = M(x[rs1] + extSinal(imediato)).

Consultando o greencard:

Convertendo 1000 para binário: 0d1000 = 0b0011 1110 1000 (0x3E8)

Imediado(11:0) Rs1 funct3 Rd opcode
12 bits 5 bits 3 bits 5 bits 7 bits
0011 1110 1000 00010 010 00001 0000011
31~20 19~15 14~12 11~7 6~0

Para saber a codificação utilizada nos campos das instruções, consulte o greencard.

Para a instrução:

    sw  x1,  1000(x2)

Qual seria a sua codificação?

Imediado(11:5) Rs2 Rs1 funct3 Imediado(4:0) opcode
7 bits 5 bits 5 bits 3 bits 5 bits 7 bits
31~25 24~20 19~15 14~12 11~7 6~0


sw: M(x[rs1] + extSinal(imediato)) = x[rs2].

Consultando o greencard:

Convertendo 1000 para binário: 0d1000 = 0b0011 1110 1000 (0x3E8)

Imediado(11:5) Rs2 Rs1 funct3 Imediado(4:0) opcode
7 bits 5 bits 5 bits 3 bits 5 bits 7 bits
0011111 00001 10001 010 01000 0100011
31~25 24~20 19~15 14~12 11~7 6~0


Responder o quiz de participação, no blackboard, em:

Conteúdos > Participação > Aula_13_Quiz-P1


Atividade

Faça a análise das instruções anteriores:

Simule o funcionamento de cada instrução (utilizando papel e lápis);

Com o caminho de dados pronto:

Quando estiver funcional:

Solução do fluxo de dados para lw e sw:

Esta atividade será parte da entrega intermediária.

Para facilitar, a ULA pode ser a mesma do fluxo de dados para as intruções do tipo R (soma e subtração).

Teste

Para o teste, temos que criar um pequeno programa que utilize as instruções do tipo I.

Procedimento:

Usando os botões, será possível executar o programa uma instrução por vez e reiniciar a execução.



Esta Atividade deverá ser entregue através do Blackboard!