Um computador com conjunto de instruções complexo, ou CISC, refere-se a uma abordagem de projeto de processador que utiliza um conjunto amplo e diversificado de instruções para permitir que a CPU execute mais trabalho por instrução.

O que significa CISC?
Um computador com conjunto de instruções complexas (CISC) é um CPU filosofia arquitetônica em que o processador O conjunto de instruções inclui muitas instruções, frequentemente com múltiplos modos de endereçamento e codificações de comprimento variável, de modo que instruções individuais podem executar operações de alto nível e com várias etapas.
Em um projeto CISC, uma instrução pode combinar ações como carregar dados da memória, realizar uma operação aritmética ou lógica e armazenar o resultado, o que pode reduzir o número de instruções. compilador precisa emitir para um determinado programaPara tornar essas instruções complexas práticas, as CPUs CISC normalmente dependem de uma lógica de decodificação e mecanismos de controle substanciais dentro do processador.
Historicamente, isso frequentemente incluía microcódigo que traduzia instruções complexas em etapas internas mais simples que o hardware podia executar. Implementações CISC modernas geralmente mantêm o conjunto de instruções CISC visível ao programador (para compatibilidade), enquanto internamente dividem as instruções em micro-operações menores que podem ser agendadas e executadas em um pipeline mais semelhante ao RISC, equilibrando o suporte a software legado com alto desempenho.
Arquitetura de Computador com Conjunto de Instruções Complexas
Uma arquitetura CISC centra-se num conjunto de instruções rico e visível ao programador, com muitos formatos de instruções e modos de endereçamento. As instruções são frequentemente de comprimento variável e podem operar diretamente na memória (por exemplo, uma instrução pode ler um operando da memória, computá-lo e gravá-lo de volta sem exigir instruções separadas de carga/armazenamento). flexA flexibilidade reduz a quantidade de instruções em programas compilados e mantém a ISA expressiva, mas torna a parte frontal da CPU (busca, decodificação e despacho) mais complexa, pois o processador precisa identificar os limites das instruções, decodificar mais combinações e lidar com mais formatos de operandos.
Dentro da CPU, as implementações CISC modernas normalmente traduzem essas instruções complexas em micro-operações internas mais simples (µops). Um decodificador de front-end (às vezes auxiliado por um mecanismo de microcódigo para instruções mais raras ou complexas) emite µops que fluem pelo núcleo de execução, que pode ser semelhante a um projeto no estilo RISC: unidades funcionais em pipeline, renomeação de registradores, execução fora de ordem. agendamento, previsão de ramificação e múltiplos níveis de esconderijo para ocultar a latência da memória. Essa abordagem "CISC externo, µops interno" preserva a compatibilidade com versões anteriores do ISA CISC estabelecido, ao mesmo tempo que permite alto desempenho e execução eficiente em silício contemporâneo.
Qual é um exemplo de CISC?
Um exemplo comum de CISC é o x86 Conjunto de instruções usado pela maioria das CPUs de desktops e laptops da Intel e da AMD. É considerado CISC porque oferece um grande conjunto de instruções e muitos modos de endereçamento, e algumas instruções podem realizar trabalhos relativamente complexos em uma única etapa, como ler dados da memória, executar uma operação e gravar o resultado de volta, em vez de exigir instruções separadas de carga, computação e armazenamento.
Para que serve o CISC?

As arquiteturas CISC são utilizadas quando a compatibilidade, o amplo suporte de software e a execução eficiente de cargas de trabalho de propósito geral são importantes. Elas são mais frequentemente encontradas em plataformas de computação convencionais, onde um ecossistema maduro e a estabilidade da ISA a longo prazo são grandes vantagens. Os usos mais comuns incluem:
- Computadores PC e laptops de uso geral (plataformas x86)Funciona todos os dias aplicações, navegadoresFerramentas de escritório e aplicativos de mídia em um conjunto de instruções amplamente suportado, com alto desempenho em cargas de trabalho mistas.
- Estações de trabalho e servers. Potencializa computadores com uso intensivo de computação e I / O-cargas de trabalho pesadas, como virtualização, bases de dadose aplicações empresariais, onde uma ISA estável e ampla otimização entre compiladores e sistemas operacionais são valiosos.
- Virtualização e cloud hospedagem. Suporta densidade VM implantações e hosts de contêineres graças à maturidade Hardwares recursos de virtualização e um vasto ecossistema de ferramentas e suporte a sistemas operacionais convidados.
- Compatibilidade com softwares antigos. Mantém aplicativos antigos em execução sem necessidade de reescrita, pois as plataformas CISC (especialmente x86) priorizam a compatibilidade com versões anteriores em diversas gerações de CPUs.
- Sistemas comerciais e industriais com longos ciclos de vidaUtilizado em ambientes onde a atualização de software é cara ou arriscada, portanto, manter a compatibilidade com os binários e cadeias de ferramentas existentes é um requisito prático.
Quais são os benefícios e as limitações do CISC?
Os projetos CISC são construídos em torno de um conjunto de instruções robusto que pode expressar operações complexas em menos instruções, o que simplifica o código compilado e preserva a compatibilidade entre gerações de hardware. Ao mesmo tempo, o suporte a muitos formatos e comportamentos de instruções aumenta a complexidade da CPU, o que pode afetar a eficiência energética, a sobrecarga de decodificação e o custo total do projeto. Esta seção detalha as vantagens do CISC e as desvantagens mais perceptíveis.
Benefícios do CISC
As arquiteturas CISC visam realizar mais trabalho por instrução, fornecendo um conjunto abrangente de operações e modos de endereçamento. Na prática, isso resulta em diversas vantagens, especialmente em ecossistemas onde a compatibilidade e as ferramentas consolidadas são importantes. Entre elas:
- Alta densidade de código (binários menores). Como uma única instrução pode executar tarefas de várias etapas (como acesso à memória e aritmética), os programas geralmente usam menos instruções no geral, o que pode reduzir a pressão sobre a busca de instruções e melhorar a utilização do cache.
- Forte compatibilidade com versões anterioresAs plataformas CISC (principalmente x86) tendem a preservar a capacidade de executar softwares antigos em diversas gerações de CPUs, protegendo aplicações de longa duração e reduzindo os custos de migração.
- Flexmodos de endereçamento possíveisAs instruções CISC podem referenciar a memória de maneiras mais variadas (base + índice + deslocamento, índice escalonado, etc.), o que pode reduzir instruções extras para cálculo de endereço e movimentação de dados.
- Ecossistema maduro de compiladores e ferramentas. As ISAs CISC populares contam com décadas de otimização em compiladores, depuradores, analisadores de desempenho e bibliotecas de performance, facilitando a criação e o ajuste de software.
- Expressão eficiente de operações complexasAlgumas tarefas podem ser codificadas diretamente (por exemplo, manipulação de strings e bits ou operações aritméticas especializadas), o que pode simplificar a saída do compilador e, às vezes, melhorar o desempenho para padrões específicos.
- Desempenho prático em cargas de trabalho mistas. As CPUs CISC modernas frequentemente combinam a estabilidade da ISA CISC com microarquitetura avançada (execução fora de ordem, previsão de desvios, cache profundo), oferecendo alto desempenho em diversas cargas de trabalho do mundo real, mantendo a compatibilidade de software intacta.
Limitações do CISC
O CISC traz consigo algumas desvantagens, pois suportar um grande, flexO conjunto de instruções flexível adiciona complexidade à interface da CPU e à lógica de controle. Essas limitações não tornam o CISC "pior", mas influenciam o consumo de energia, o custo do projeto e a forma como o desempenho é alcançado.
- Decodificação de instruções mais complexasInstruções de comprimento variável e muitos formatos aumentam o trabalho necessário para encontrar os limites das instruções e decodificar os operandos, o que adiciona latência e design de front-end complexidade.
- Maior complexidade de hardware e custo do silício. Suportar várias instruções, modos de endereçamento e comportamentos legados exige mais lógica de controle (frequentemente incluindo microcódigo), o que pode aumentar o número de transistores e o esforço de validação.
- Potencialmente, maior consumo de energia. Uma interface de usuário e um caminho de controle mais complexos podem aumentar o consumo de energia, especialmente em comparação com ISAs mais simples em ambientes com restrições de energia (embora as implementações modernas variem bastante).
- É mais difícil criar pipelines eficientes no nível ISA. Instruções complexas podem envolver um número variável de etapas internas, o que torna mais difícil projetar um pipeline simples e uniforme sem traduzir as instruções em operações internas menores.
- O desempenho depende muito da tradução interna (µops). Muitas CPUs CISC modernas dividem as instruções em micro-operações; o desempenho depende então da decodificação. largura de banda, caches de µop e eficiência de agendamento, não apenas a "instrução complexa" em si.
- Inchaço da ISA e limitações legadasManter décadas de retrocompatibilidade pode limitar a rapidez com que a ISA pode ser aprimorada e pode forçar o suporte contínuo a instruções raramente usadas que ainda precisam de comportamento correto.
- Menos ideal para aplicações embarcadas de baixíssimo consumo de energia.Em dispositivos pequenos, com custos e consumo de energia limitados, os benefícios de uma ampla compatibilidade e instruções abrangentes podem não compensar a sobrecarga de uma implementação mais complexa.
Perguntas frequentes sobre CISC
Aqui estão as respostas para as perguntas mais frequentes sobre o CISC.
CISC vs. RISC
Vamos examinar as diferenças entre CISC e RISC com mais detalhes:
| Aspecto | CISC (Computador com Conjunto de Instruções Complexas) | RISC (Computador com Conjunto de Instruções Reduzido) |
| Tamanho do conjunto de instruções | Amplo e diversificado, com muitas instruções especializadas. | Menor e mais minimalista, com foco em operações comuns. |
| Complexidade da instrução | As instruções podem executar operações de várias etapas (por exemplo, carregar + calcular + armazenar). | As instruções são simples e geralmente executam uma única operação. |
| Duração da instrução | Instruções de comprimento variável. | Instruções de comprimento fixo. |
| Modos de endereçamento | Vários modos de endereçamento, oferecendo alta flexcapacidade. | Poucos modos de endereçamento, mantidos simples e consistentes. |
| Acesso à memória | As instruções podem operar diretamente na memória. | Arquitetura de carga/armazenamento: somente as funções de carga e armazenamento acessam a memória. |
| complexidade do projeto da CPU | Decodificação e lógica de controle mais complexas, frequentemente utilizando microcódigo. | Lógica de decodificação e controle mais simples. |
| Eficiência de dutos | Mais difícil no nível ISA devido ao comportamento variável das instruções. | Mais fácil e eficiente devido às instruções uniformes. |
| Densidade de código | Geralmente mais alto (binários menores). | Geralmente menor (mais instruções necessárias). |
| Eficiência energética | Normalmente, o consumo de energia é maior devido à complexidade. | Normalmente, são mais eficientes em termos de energia, especialmente em núcleos simples. |
| Dependência do compilador | Menor dependência da otimização do compilador para a seleção de instruções. | Depende muito da otimização do compilador. |
| Compatibilidade com versões anteriores | Forte enfoque na compatibilidade a longo prazo. | A compatibilidade é menos enfatizada entre as gerações. |
| Casos de uso comuns | PCs, laptops, estações de trabalho, servers (ex.: sistemas x86). | Dispositivos móveis, sistemas embarcados, ARMBaseada servers. |
O CISC reduz o tamanho do programa?
Sim, o CISC pode reduzir o tamanho do programa devido às suas instruções mais abrangentes e flexOs modos de endereçamento flexíveis geralmente permitem que um compilador expresse o mesmo trabalho com menos instruções, o que normalmente produz binários de código de máquina menores (maior densidade de código) do que uma implementação RISC comparável. Dito isso, a vantagem de tamanho depende da carga de trabalho, do compilador e dos detalhes da ISA. Compiladores e recursos RISC modernos (como codificações de instruções compactadas em algumas ISAs) podem reduzir a diferença, portanto, o CISC nem sempre produz programas menores em todos os casos.
Os processadores modernos são CISC?
Muitos processadores modernos são CISC no nível do conjunto de instruções, principalmente os x86/x86-64 Processadores da Intel e da AMD usados na maioria dos PCs e em muitos serversMas uma grande parte das CPUs modernas são RISC (como ARM em celulares e muitos laptops, e RISC-V em sistemas embarcados em crescimento e alguns outros). server(uso de acelerador). Além disso, mesmo quando uma CPU é externamente "CISC" (x86), os projetos modernos geralmente executam instruções internamente como micro-operações mais simples, de modo que a microarquitetura muitas vezes parece RISC, embora o ISA permaneça CISC por questões de compatibilidade.