=========================================
Definição
ISA ou Instruction Set Architecture em compiladores representa a maneira que arquitetura de um conjuntos de instruções de uma determinada linguagem estruturada pode ser classificada.
Nós podemos classificar conjunto de instruções de uma CPU, bytecodes, linguagens esotéricas até coisas como receita de cozinha usando ISAs. É mais um conceito teórico do que técnico em si.
Mas afinal, o que são os conjuntos de instruções? É o conjunto de possíveis operações em que podem ser executadas dentre um determinado contexto.
Exemplo:
Contexto: máquina de empilhar cadernos.
Cojunto de instruções: colocar caderno na pilha, tirar caderno da pilha, trocar os lugares dos 2 primeiros cadernos do topo da pilha…
Os tipos mais famosos de ISAs são o RISC e CISC, e o menos conhecido o OISC. Na verdade existem vários e vários tipos de ISAs, quando uma fabricante cria uma nova arquitetura de CPUs mas ela não consegue explicar o conjunto de instruções usando algum outro tipo já existente, então elas literalmente criam nova termologia, isso foi o caso da CPU Itanium, que foi definido uma nova ISA, a EPIC.
A diferença entre RISC e CISC é simples, uma ISA é denomidada RISC ela tem um número reduzido de instruções, idealmente somente instruções de propósito geral, já no CISC exitem vários subconjuntos de instruções, por exemplo as CPUs amd64 – que são CISC, tem suas próprias instruções de propósito geral, suporte para o x86, 8086 além das várias extensões de arquiteturas, ela tem vário próprios subconjuntos de instruções.
Exemplos de ISAs, usando esolangs
Usar linguagens de programação esotéricas como exemplos é algo que acho mais natural do que usar assembly de CPUs justamente por ser algo de maior nível de abstração.
OISC
OISC é a classificação de conjuntos de instruções onde há apenas 1 instrução, como é o caso da linguagem FlipJump!
FlipJump é uma linguagem de programação intecionada a ser a linguagem de programação mais primitiva que existe. É uma lingagem de programação que contém apenas uma instrução, onde não existe o conceito de bytes, words, nimble, apenas bits mas ainda sim é possível fazer qualquer computação moderna. A maneira que essa linguagem funciona é extremamente simples. Existe um número “infinito” células, cada célula possui largura de 1 bit. A instrução aceita 2 argumentos, que são eles:
Flip (primeiro argumento) - O offset (relativo ao ponteiro da célula atual) da célula para ter seu valor invertido.
Jump (segundo argumento) - O novo valor do ponteiro.
O programa consiste em uma lista dessas instruções que são executados sequênciamente.
RISC
RISC é a classificação de conjuntos de instruções onde idealmente existem apenas instruções de propósito geral (manipulação de memória & aritmética).
Brainfuck é uma linguagem de programação esotérica que simula uma máquina de turing em toda sua glória.
Ela opera numa “fita” de memória de 30.000 células, sendo que cada célula tem 1 byte de largura.
Ela contém 8 operadores, sendo eles:
\(+\) Incrementa o valor na célula atual.
\(-\) Decrementa o valor na célula atual.
\(>\) Incrementa o ponteiro da célula atual.
\(<\) Decrementa o ponteiro da célula atual.
\([\) Vai para o \(]\) correspondente se o valor da célula atual for 0.
\(]\) Vai para o \([\) correspondente se o valor da célula atual diferente 0.
\(.\) Imprime o valor da célula atual.
\(,\) Entrada do novo valor para a célula atual.
Essa linguagem contém apenas 8 operadores de propósito geral então podemos classifica-la como RISC.
CISC
Não existem esolangs classificadas como CISC no mundo real, o mais próximo que temos são linguagens de programações que contém vários operadores, como é o caso de C++.
Essa linguagem contém aproximadamente 80 palavras chaves, não incluindo as funcionalidades fornecidas pela biblioteca padrão, a qual que qualquer compilador compatível precisa implementar.
Isso em minha opinião classificaria essa linguagem com modelo de arquitetura CISC.
Sobre as CPUs
Nos dias atuais existem duas arquiteturas de processadores predominantes, x86 e ARM, uma tendo seu conjunto de instruções classificado como CISC e outro RISC. Não existe e nunca existiu um processador comercial com conjunto de instruções tipo OISC, esse modelo é simplesmente inviável.
os CPUs ARM tem um número aproximado de 50 instruções diferentes que são de propósito geral, por esse número de instruções ser pequeno abre um espaço maior para a otimização dessas instruções que resulta nelas consumindo menos . Agora uma desvantagem dessas CPUs pelas suas instruções serem mais genéricas pode ser que algoritmos que precisam de instruções mais especializadas sejam mais lentas.
Os CPUs x86 modernos, existem aproximadamente 1000 instruções diferentes, óbviamente que a grande maioria delas não são de propósito geral – o software raramente usa elas. Há menos espaço para a otimização das instruções de propósito geral, o que falta na otimização de instruções de uso geral ele retribui como instruções especializadas.