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