quarta-feira, 16 de novembro de 2011

Número de Operendos das Instruções e sua Localização

(Resenha Capítulo 7)

          Uma das principais características do conjunto de instruções compreensível por um processador é o numero e a localização de seus operandos indicados em uma instrução aritmética ou lógica.
          Uma dos primeiros formatos de instrução projetados possuía quatro operandos, conforme abaixo:


Cod. Op.
Op.1
Op.2
Op.3
End. Prox. Instruc.


          Este formato de instrução (não usado mais) era completo, possuindo a localização de todos os operandos, também trazia a localização da próxima instrução a ser executada. Uma vantagem deste formato de instrução é o fato de dispensar as instruções de desvio incodicional, pois o endereço de desvio consta na instrução. A desvantagem deste formato está na grande quantidade de espaço de espaço em memória que ela ocupa, principalmente por que uma grande quantidade de instruções não precisarem de três operandos.
          Em algumas arquiteturas, as instruções possuem três operandos, dois  operandos-fonte e um operando-destino, como por exemplo em

Cod. Op.
Op.1
Op.2
Op.3

onde Op.1 e Op.2 são os operandos-fonte e Op.3 é  o operando-destino. Um problema neste formato de instrução acontece quando as operações repetem os operandos (Op.2 = Op.3, por exemplo). Isso acontece normalmente quando se deseja incrementar ou decrementar o valor de uma variável.
          Tendo isso em vista, algumas arquiteturas utilizam instruções com apenas dois operandos

Cod. Op.
Op.1
Op.2

onde Op.2 é operando-fonte e também operando-destino.
          Quanto à localização dos operandos especificados por uma instrução, podemos encontrar arquiteturas onde podem ser realizados acessos aos operandos diretamente a partir da memória principal. Por exemplo, nestas arquiteturas podemos ter instruções aritméticas/lógicas tais como:

Cod. Op.
M1
R1
R2

Cod. Op.
M1
M2
R2

Cod. Op.
M1
M2
M3

onde R1 e R2 são registradores e M1,  M2 e  M3 são endereços de locações de memória. Em um outro extremo, existem arquiteturas onde todos os operandos encontram-se apenas em registradores. As instruções aritméticas/lógicas são todas do tipo:

Cod. Op.
R1
R2
R3

Cod. Op.
R1
R2

          A partir do número de operandos explicitamente referenciados e da localização destes operandos, podemos classificar as arquiteturas nos seguintes tipos: 

Arquiteturas memória-memória: as instruções aritméticas/lógicas usam três operandos e todos os operandos podem estar na memória.

Arquiteturas registrador-memória: as instruções aritméticas/lógicas usam dois operandos, sendo que apenas um deles pode residir na memória.
  
Arquiteturas registrador-registrador: as instruções aritméticas/lógicas usam três operandos, todos em registradores. Neste caso, apenas duas instruções acessam diretamente a memória:  LOAD e  STORE. A instrução  LOAD carrega em um registrador um dado armazenado na memória e  instrução STORE armazena na memória o conteúdo de um registrador.  

          Arquiteturas memória-memória e registrador-memória apresentam como vantagem um menor número de instruções no código do programa, já que não é necessário carregar previamente em registradores os operandos-fonte de uma instrução aritmética/lógica, como acontece em uma arquitetura registrador-registrador.  Por outro lado, a existência de instruções aritméticas/lógicas mais poderosas torna mais complexa a implementação da arquitetura. As arquiteturas Intel 80x86 e Motorola MC680x0 são do tipo registrador-memória. Dentre as arquiteturas memória-memória está o DEC VAX 11.


Principais Referências:
  • Tao, Welfane K. Arquitetura e Organização de Computadores. Cap. 6. 2004, Janeiro.
  • Clícia, M. O conjunto de Instruções do Computador. Cap. 4. 2005, Abril.

Nenhum comentário:

Postar um comentário