Arquitetura do conjunto de instruções

O processador hipotético apresentado em sala de aula possui as seguintes características:

  1. palavra de 32 bits
  2. 8 registradores de 32 bits com os respectivos identificadores: 0,1,2,3,4,5,6,7, sendo que o registrador 0 armazena o valor constante 0
  3. capacidade máxima de endereçamento de 65536 palavras de memória
  4. instruções de 32 bits

O conjunto de instruções desta máquina é composto de 8 instruções:

 

Instrução em Linguagem de Montagem

Ação

add regA regB destreg

soma o conteúdo do registrador regA com o conteúdo de regB e armazena resultado no registrador destreg

addi regA regB imediato

soma o conteúdo do registrador regA com o valor imediato e armazena resultado no registrador regB

lw regA regB deslocamento

carrega no registrador regB o conteúdo da palavra da memória cujo endereço é a soma do conteúdo do registrador regA com o valor deslocamento

sw regA regB deslocamento

armazena o conteúdo do registrador regB na palavra da memória cujo endereço é a soma do conteúdo do registrador regA com o valor deslocamento

beq regA regB deslocamento

caso os conteúdos dos registradores regA e regB sejam iguais, vai para o endereço PC+1+deslocamento, onde PC é o endereço da instrução beq

halt

incrementa o valor de PC e para execução do programa

noop

incrementa o valor de PC e vai para próxima instrução


Linguagem de máquina - Representando instruções em binário

Cada registrador possui um conjunto de bits associado:

add  regA  regB destreg
 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9  8  7  6  5  4  3  2  1  0
------------------------------------------------------------------------------------------------
|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
------------------------------------------------------------------------------------------------
31-25 = 0 
24-22=código de operação
21-19=regA
18-16=regB
15-3=0
2-0=destreg
 
add 1 2 5
31-25 = 0 
24-22=código de operação=000
21-19=regA=1=001
18-16=regB=2=010
15-3=0
2-0=destreg=5=101
 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9  8  7  6  5  4  3  2  1  0
------------------------------------------------------------------------------------------------
| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 1| 0| 1| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 1| 0| 1| 
------------------------------------------------------------------------------------------------
 
lw regA regB deslocamento
 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9  8  7  6  5  4  3  2  1  0
------------------------------------------------------------------------------------------------
|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
------------------------------------------------------------------------------------------------
31-25 = 0 
24-22=código de operação=010
21-19=regA
18-16=regB
15-0=deslocamento expresso em C2 (16 bits: -32768 a +32767)
 
Programa em C:
A[300]=h+A[300]
Programa em linguagem de montagem:
Supondo h alocada no registrador 2  e endereço base de A no registrador 6:
 
lw 6 5 300
add 5 2 5
sw 6 5 300
 
lw 6 5 300
31-25 = 0 
24-22=código de operação=010
21-19=regA=6=110
18-16=regB=5=101
15-0=0000000100101100 
 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9  8  7  6  5  4  3  2  1  0
------------------------------------------------------------------------------------------------
| 0| 0| 0| 0| 0| 0| 0| 0| 1| 0| 1| 1| 0| 1| 0| 1| 0| 0| 0| 0| 0| 0| 0| 1| 0| 0| 1| 0| 1| 1| 0| 0| 
------------------------------------------------------------------------------------------------
 
add 5 2 5
31-25 = 0 
24-22=código de operação=000
21-19=regA=5=101
18-16=regB=2=010
15-3=0
2-0=destreg=5=101
 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9  8  7  6  5  4  3  2  1  0
------------------------------------------------------------------------------------------------
| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 1| 0| 1| 0| 1| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 1| 0| 1| 
------------------------------------------------------------------------------------------------
 
sw 6 5 300
31-25 = 0 
24-22=código de operação=011
21-19=regA=6=110
18-16=regB=5=101
15-0=0000000100101100 
 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9  8  7  6  5  4  3  2  1  0
------------------------------------------------------------------------------------------------
| 0| 0| 0| 0| 0| 0| 0| 0| 1| 1| 1| 1| 0| 1| 0| 1| 0| 0| 0| 0| 0| 0| 0| 1| 0| 0| 1| 0| 1| 1| 0| 0| 
------------------------------------------------------------------------------------------------

Instruções de desvio


Programa em C:

 
 
if (x!=y)
  f=g+x;
else
  f=g+y;

Instrução de linguagem de montagem: beq regA regB L1
Caso conteúdo de regA igual ao conteúdo de regB vai para instrução no endereço L1, caso contrário executa a próxima instrução.
Supondo x alocada no registrador 1, y em 2, f em 3 e g em 4, teremos o seguinte código:

 
      beq 1 2 ELSE
      add 4 1 3
      beq 1 1  EXIT
ELSE  add 4 2 3
EXIT 

Formato das instruções:

 
beq regA regB label
 
 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9  8  7  6  5  4  3  2  1  0
------------------------------------------------------------------------------------------------
|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
------------------------------------------------------------------------------------------------
31-25 = 0 
24-22=código de operação=100
21-19=regA
18-16=regB
15-0=deslocamento expresso em C2 (16 bits: -32768 a +32767)-vai para PC+1+deslocamento