Introdução
Um processador ou outro periférico programável fornece ou disponibiliza para o programador
um conjunto de operações e instruções, também costuma fornecer um montador Assembly, que
transforma o conjunto de instruções em código de máquina para ser utilizado pelo componente.
No caso de processadores quando o conjunto de instruções for reduzido leva-o a ter o nome de
RISC e se forem complexas, o nome de CISC. A arquitetura CISC, ou Complex Instruction Set
Computer, é uma arquitetura bem complexa sendo capaz de executar várias centenas de
instruções complexas diferentes, se tornando extremamente versátil.
Exemplos famosos de processadores CISC são o 386 e o 486. Já a arquitetura RISC, ou Reduced
Instruction Set Computer, é um tipo de arquitetura de processador que surgiu no começo da
década de 80 quando a tendência era construir chips com conjuntos de instruções cada vez mais
complexos, os famosos processadores CISC. Foi então que alguns fabricantes tiveram a ideia de
seguir o caminho oposto, criando o padrão RISC (Reduced Instruction Set Computer, ou
“computador com um conjunto reduzido de instruções”).
1
CISC
CISC ou Complex Instruction Set Computer é uma arquitetura de processadores capaz de
executar centenas de instruções complexas diferentes o que a torna extremamente versátil.
Exemplos de processadores que utilizam essa arquitetura são os 386 e os 486 da Intel. Os
processadores baseados na computação de conjunto de instruções complexas contêm uma micro-
programação, ou seja, um conjunto de códigos de instruções que são gravados no processador,
permitindo-lhe receber as instruções dos programas e executá-las, utilizando as instruções
contidas na sua micro-programação. Seria como quebrar estas instruções, já em baixo nível, em
diversas instruções mais próximas do hardware (as instruções contidas no microcódigo do
processador).
Como característica marcante esta arquitetura contém um conjunto grande de instruções, a
maioria deles em um elevado grau de complexidade. Algumas características dessa arquitetura
são:
• Controle microprogramado;
• Modos registrador-registrador, registrador-memória, e memória registrador;
• Múltiplos modos de endereçamento à memória, incluindo indexação (vetores);
• Instruções de largura (tamanho) variável, conforme modo de endereçamento utilizado;
2
• nstruções requerem múltiplos ciclos de máquina para execução, variando também com o
modo de endereçamento;
• Poucos registradores;
• Registradores especializados.
RISC
RISC (acrônimo de Reduced Instruction Set Computer; em português, "Computador com um
conjunto reduzido de instruções") A arquitetura RISC é constituída por um pequeno conjunto de
instruções simples que são executadas diretamente pelo hardware, onde não há a intervenção de
um interpretador (microcódigo), o que significa que as instruções são executadas em apenas uma
micro-instrução (de uma única forma e seguindo um mesmo padrão). As máquinas RISC só se
tornaram viáveis devido aos avanços de software otimizado para essa arquitetura, através da
utilização de compiladores otimizados e que compensem a simplicidade dessa arquitetura. Existe
um conjunto de características que permite uma definição de arquitetura básica RISC, são elas:
• Utilização de apenas uma instrução por ciclo do datapath (ULA, registradores e os
barramentos que fazem sua conexão);
• O processo de carregar/armazenar, ou seja, as referências à memória são feitas por
instruções especiais de load/store;
• Inexistência de microcódigo, fazendo com que a complexidade esteja no compilador;
• Instruções de formato fixo;
• Conjunto reduzido de instruções, facilitando a organização da UC de modo que esta tenha
uma interpretação simples e rápida;
• Utilização de pipeline (é uma técnica de dividir a execução de uma instrução em fases ou
estágios, abrindo espaço para execução simultânea de múltiplas instruções);
• Utilização de múltiplos conjuntos de registradores.
Ao contrário dos complexos CISC, os processadores RISC são capazes de executar apenas
poucas instruções simples, e justamente por isso que os chips baseados nesta arquitetura são mais
simples e muito mais baratos.
3
Uma outra vantagem dos processadores que utilizam essa arquitetura é o fato de terem um menor
número de circuitos internos, permite que se trabalhe com clocks mais altos. Um bom exemplo
são os processadores Alpha, que em 97 já operavam a 600 MHz.
Conjunto de instruções presentes num processador RISC
O conjunto de instruções que cada processador suporta é bastante variado. Contudo é possível
identificar e caracterizar grupos de instruções que se encontram presentes em qualquer
arquitectura:
Para transferência de informação: integram este grupo as instruções que transferem
informação entre registos e a memória (load/store,..), entre registros (simulado no
assembler do MIPS, e implementado com uma soma com o registo 0), diretamente entre
posições de memória (suportado por ex. no M680x0, mas não disponível em qualquer
arquitectura RISC), ou entre registos e a stack, com incremento/decremento automático
do sp (disponível em qualquer arquitectura CISC, mas incomum em arquitecturas RISC);
Operações aritméticas e lógicas: soma, subtração e multiplicação com inteiros, e
operações lógicas AND, OR, NOT, ShiftLeft/Right são as mais comuns; alguns
processadores suportam ainda a divisão, quer diretamente por hardware, quer por
microprogramação;
4
Para controlo de fluxo: incluem-se neste grupo as instruções de salto condicional e
incondicional, para endereços absolutos, especificados por registos ou ainda relativos a
um dado registo, com ou sem salvaguarda automática do endereço de retorno (caso das
rotinas).
Registros visíveis ao programador
Um dos aspectos essenciais para um programador em assembly é saber de quantos registos
dispõe, qual é a sua dimensão, e em que circunstâncias esses registos podem ser usados.
Em arquitecturas RISC
No caso das arquitecturas RISC, a grande maioria dos processadores possui 32 registos genéricos
de 32 bits- para representar valores inteiros e/ou endereços de memória – para além de 32
registos de 32 bits para representação de valores em vírgula flutuante. Estes registos são
considerados de uso genérico e podem ser usados explicitamente por qualquer instrução que
aceda a operandos em registos, com excepção de um registro que contém o valor zero e que não
pode ser alterado (só de leitura). Ainda visível ao programador está sempre também o apontador
para a próxima instrução, o instruction pointer ou program counter.
Na arquitectura MIPS
A arquitectura Mips contém também 32 registros genéricos de 32 bits (0 ao 31), para além do pc,
sendo o registo 0 apenas para a leitura com o valor zero; dos restantes, apenas o registo 31, é
implicitamente usado por uma instrução (de invocação de uma rotina, para guardar o endereço de
retorno). Adicionalmente, o MIPS contém ainda 2 registos para poder operar com operandos de
64 bits, como acontece no caso da multiplicação e da divisão, chamando-lhes de high e low A
arquitectura MIPS prevê ainda 32 registos de 32 bits para vírgula flutuante (f0 a f31), os quais
poderão ser organizados em (até) 16 registos de precisão dupla, com 64 bits (as designações par
dos registos). As primeiras implementações da arquitectura MIPS (família R20x0 e R30x0) não
dispõem de unidade de vírgula flutuante incluída no microprocessador, implementando estas
funções em coprocessador separado (R2010 e R3010), de acordo com o que foi dito
anteriormente.
5
Em arquitecturas CISC (M680x0, ix86)
A existência de um grande n.º de registos nas arquitecturas RISC, aliado à evolução da
tecnologia dos compiladores dos últimos anos (em especial na geração de código), vem
permitindo representar a maioria das variáveis escalares directamente em registo, não havendo
necessidade de recorrer com tanta frequência à memória. Esta organização não foi contudo
economicamente viável nas gerações anteriores de microprocessadores, com destaque para a
família da Motorola (M680x0) e, ainda mais antiga, a família da Intel (ix86). Estes processadores
dispunham de um menor n.º de registos e, consequentemente, uma diferente organização que
suportasse eficientemente diversos mecanismos de acesso à memória.
No caso da família M680x0, o programador tinha disponível dois bancos de 8 registos genéricos
de 32 bits: um para dados (D) e outro para apontadores para a memória (A), suportando este
último banco um variado leque de modos de endereçamento à memória. Apenas um dos registos
(A7) é usado implicitamente em certas operações de manuseamento da stack.
A família da Intel é mais complicada, por não ter verdadeiramente registos de uso genérico. A
arquitectura de base dispõe efectivamente de 4 registos para conter operandos aritméticos (A, B,
C e D), mais 4 para trabalhar com apontadores para a memória (BP, SP, DI e SI) e outros 4 para
lidar com uma memória segmentada (CS, DS, SS e ES; a única maneira de uma arquitectura de
16 bits poder aceder a mais de 64k células de memória). Cada um destes registos não pode ser
considerado de uso genérico, pois quase todos eles são usados implicitamente (isto é, sem o
programador explicitar o seu uso) em várias instruções (por ex., os registos A e D funcionam de
acumuladores em operações de multiplicação e divisão, enquanto o registo C é usado
implicitamente como variável de contagem em instruções de controlo de ciclos). A situação
complica-se ainda mais com a variação da dimensão dos registos na mesma família (de registos
de 16 bits no i286 para registos de 32 bits no i386), pois o formato de instrução foi concebido
para distinguir apenas operandos de 8 e de 16 bits, e um bit bastava; para garantir
compatibilidade ao longo de toda a arquitectura, os novos processadores têm de distinguir
operandos de 8, 16 e 32 bits, usando o mesmo formato de instrução.
6
Conclusão
Ao contrário da complexa arquitetura CISC, os processadores RISC são capazes de executar
apenas algumas poucas instruções simples, o que justifica o fato de os chips baseados nesta
arquitetura serem mais simples e muito mais baratos. Outra vantagem dos processadores RISC, é
que por terem um menor número de circuitos internos, podem trabalhar com clocks mais altos.
Um processador RISC é capaz de executar instruções muito mais rapidamente.
7
Referências
MONTEIRO, Mário A. Introdução à Organização de Computadores, 5a edição. Editora LTC,
2007.
PROENÇA, Alberto José. Notas de estudo: Arquitectura de Computadores.1999/00
STALLINGS, William. Arquitetura e Organização de Computadores. Tradução da 8a edição.
Editora Prentice Hall Brasil, 2002.
TANENBAUM, Andrew S. Organização Estruturada de Computadores. Tradução da 5a edição.
Editora Prentice Hall Brasil, 2007.