Número máximo de códigos de operação para um microprocessador

13

insira a descrição da imagem aqui

Qual é o número máximo de opcodes para a pergunta, a resposta é a opção c, mas acho que é a opção d, porque cada endereço especifica cada local da memória, existem 16 linhas de endereço, o que significa 2 ^ 16 endereços, ou seja, 2 ^ 16 locais de memória.

Portanto, se cada local contém um código de operação, o total de 2 ^ 16 locais contém 2 ^ 16 códigos de operação e é o número máximo de códigos de operação, mas a resposta é dada como c, que é 2 ^ 12. Como isso é possível?

Chiduruppula Sharath Kumar
fonte
7
A questão é perguntar quantos códigos de código DIFERENTES no ISA, não quantas instruções podem compor o maior programa possível.
Brian Drummond
5
@BrianDrummond - com essa interpretação, no entanto, a pergunta só é significativa se você fizer suposições sobre o funcionamento do ISA que não é universal. Por exemplo, o Z80 possui um barramento de dados de 8 bits, mas em algum lugar na região de 800 códigos de operação válidos diferentes - porque usa bytes de prefixo para estender e variar as operações disponíveis.
Jules
15
A pergunta formulada no livro não faz sentido. Não há correspondência direta inerente entre o tamanho do barramento e o tamanho do código de operação. A JVM é baseada em um modelo de dados de 32 bits, mas possui opcodes de 8 bits.
chrylis -on strike-
10
Esta pergunta é incoerente, a menos que tenhamos muitas informações além do que é fornecido na pergunta. Teríamos que fazer muitas suposições sobre as características do processo para obter uma resposta - suposições que não são verdadeiras para a grande maioria dos processadores do mundo real!
David Schwartz
14
A questão é besteira. Se necessário, um opcode de instrução pode abranger várias palavras da memória. Não há limite inerente.
Hot Licks

Respostas:

31

Todas as opções estão erradas . O número máximo de códigos de operação (exclusivos) que um processador pode executar não é limitado pela largura do barramento.


Normalmente, uma CPU de mais de 12 bits é projetada para ter um comando por palavra de dados para que possa ler a maioria das instruções de uma só vez. Portanto, uma CPU normal seja projetada para um limite de 2 ^ 12 opcodes.

As arquiteturas de CPU existentes que possuem mais de 2 ^ 12 = 4096 opcodes são muito raras, simplesmente porque quase nunca é necessário tantas - muitas para aprender, muitas para serem realmente úteis, muito espaço de silício caro e desperdiçado.

Atualização : Como foi apontado nos comentários, todas as variações possíveis do conjunto de instruções x86 podem adicionar mais de 6000, dependendo de como você conta! Esta é mais uma exceção.

No entanto, para uma CPU de 4 bits, as instruções 2 ^ 4 = 16 geralmente não são suficientes, portanto muitos desses processadores possuem mais.

Pode haver várias maneiras e razões pelas quais uma CPU pode incorporar mais códigos de operação do que o que se encaixa no barramento de dados, incluindo:

Instruções de extensão de palavras

Um processador não precisa ler um comando em um único ciclo de dados - ele pode usar vários ciclos conseqüentes. De fato, a maioria das CPUs não - embora seja mais comumente usado para argumentos de instrução do que para expandir o espaço do código de operação.

Exemplo: o intel 4004 possui apenas 4 linhas que são multiplexadas como linhas de dados / endereço, palavra de dados de 4 bits, mas mais de 40 códigos de operação nas instruções de 8 bits.

Prefixos e sufixos

Um processador (CISC) pode ter quantos prefixos e sufixos de instruções forem necessários.

Esses são prefixados a uma instrução real para alterar o que ela faz - um pouco ou completamente.

Depende da sua definição de "código de operação exclusivo". Se alguém assumir que parte de uma instrução que não é dados faz parte do código de operação, seu número total incluirá todas as variações possíveis. No entanto, alguns acreditam que esses afixos são partes distintas da instrução.

Exemplo: As CPUs Intel x86, na verdade, não têm 4M opcodes. No entanto, se você contar todos os prefixos como parte de um código de operação, as CPUs modernas permitirão instruções de até 15 bYtes - são muitos códigos de operação possíveis. Embora muitos façam a mesma coisa - isso depende da definição deles como "únicos".

Modos

Um processador pode ter vários modos de operação nos quais pode ter um conjunto completamente diferente de códigos de operação.

Exemplos: o intel x86_64 possui modos de 32 bits (real / v86 / protegido) e de 64 bits que possuem códigos de operação distintos. As CPUs ARM podem ter os modos ARM de 32 bits e polegar de 16 bits.

Multiplexação de bits de barramento

As perguntas indicam "linhas de dados" e "linhas de endereço", no entanto, o barramento de dados interno e o barramento de endereços interno podem ser maiores que a quantidade real de linhas de barramento.

Os dados do barramento multiplexado são enviados sequencialmente, isto é, a primeira metade, depois a segunda metade. A CPU a armazena em registros internos de tamanho normal e opera com eles.

Isso geralmente é feito para reduzir custos e / ou tamanho da pegada física do chip.

Os exemplos incluem intel 4004, qualquer coisa no barramento de dados LPC, e NEC VR4300, CPU da Nintendo64 que tinha apenas barramento de dados de 32 linhas.

Nenhum barramento paralelo

Como continuação do ponto anterior, uma CPU nem precisa expor um barramento paralelo.

Uma CPU pode facilmente expor apenas um barramento seqüencial como I2C, SPI, etc.

Provavelmente não é muito econômico produzir uma CPU tão dedicada, mas muitos microcontroladores de baixa contagem de pinos (que incluem CPU e memória) são feitos dessa maneira para salvar esses preciosos pinos para algo mais útil. Por exemplo, os chips atmel ATTINY4 / 5/6/10 têm apenas 6 pinos no total, dois para alimentação, um para reinicialização e três para uso geral. As instruções são enviadas via interface proprietária de 3 linhas sequencialmente.

Dependendo da sua definição de microcontrolador, ele pode ser considerado um microprocessador ou pode ser programado para atuar como um (por exemplo, simular uma CPU dedicada com um ou mais barramentos seqüenciais).

Esta pergunta afirma claramente que algum tipo de barramento de dados está exposto, mas não que seja um barramento paralelo. Em teoria, os dados de 12 linhas de ônibus poderia consistir de uma única série de dados de linha e 11 auxilary / Terreno / estado linhas , embora isso provavelmente não seria uma ideia muito sensata.

Barramento de instruções dedicado

Na verdade, um processador nem precisa aceitar instruções nas mesmas linhas de barramento que os dados.

Esse poderia ser o caso facilmente quando as ALUs eram chips discretos, e não parte de um microprocessador, mas agora não é economicamente viável na maioria das vezes.

Mas nada impede que você implemente uma CPU com linhas dedicadas apenas para obter instruções. Essa CPU pode ser útil quando uma única operação deve ser realizada em uma matriz de dados (SIMD).

Como a largura do barramento de instruções é completamente arbitrária, o mesmo ocorre com a contagem máxima possível de códigos de operação.

Jack White
fonte
4
Como ponto de interesse, o x86-64 possui entre 1000 e 6000 opcodes, dependendo de quem você pergunta ( 1 , 2 , 3 ).
LMS
Nunca tentei contá-los, mas com todas as variações, faz sentido.
Jack White
13

O número máximo de opcodes pode realmente ser pensado de duas maneiras:

  • O número máximo possível de códigos de operação exclusivos.

Isso pode ser obtido a partir da largura da instrução e não da largura do barramento de dados. Normalmente, um código de operação cabe em um único acesso à memória e, em seguida, a resposta é 2 ^ 12. Mas um processador pode implementar um processo de decodificação de código de operação multiciclo para estender o número de possíveis códigos de operação para além de 2 ^ 12.

  • O número máximo de instruções (contendo códigos de operação) que o processador pode endereçar diretamente.

O número máximo de instruções (contendo códigos de operação) que o processador pode endereçar diretamente é limitado pela largura do barramento de endereços (2 ^ 16). Indiretamente, o processador pode, no entanto, ser capaz de endereçar mais memória, por exemplo, um código de operação pode facilitar uma troca de página ou uma operação semelhante para buscar instruções de outra fonte.

HKOB
fonte
2
A questão não é tão ambígua. Se fosse para ser interpretado como seu segundo ponto, teria sido formulado como "o número máximo de instruções que podem ser armazenadas / endereçadas / ...". A palavra "opcode" deixa bem claro que é sobre o conjunto de instruções, não sobre o intervalo endereçável.
pouca fé perdida em SE
11
+1 por mencionar que os códigos operacionais com várias palavras são bem possíveis; portanto, a pergunta não é muito boa.
Spehro Pefhany
2
Os falantes nativos de inglês geralmente têm um viés que dificulta a compreensão do significado das palavras que usam. Quando falantes internacionais de inglês lêem ou ouvem, eles podem não ter o segundo significado (pretendido). O mesmo se aplica quando um aluno aprende uma nova expressão - se as formulações são ambíguas, é fácil entender mal. Então, eu acho que o aluno aprendeu que cada instrução contém uma parte do código de operação. Sim, eu diria que é verdade. Realmente, a redação da questão 01. é ambígua.
HKOB 5/05
4
@SpehroPefhany Sim, a pergunta é sem dúvida ambígua sem contexto adicional. Se o OP aprendeu que, qualquer que seja a duração da instrução, o código de operação será buscado no primeiro acesso à memória, a resposta é (c); caso contrário, não poderá ser respondido. A questão é: o OP deu contexto suficiente em sua pergunta EE.SE ou seus professores deram algo por garantido e formularam uma pergunta ambígua?
Lorenzo Donati apoia Monica no
1
@SpehroPefhany verdadeiro :) Mas o Inglês - talvez para o seu incômodo leve - também são parte do mundo Inglês Internacional ( bbc.com/capital/story/... )
HKOB
4

Você está certo em ficar confuso com esta pergunta - está muito mal escrita.

No entanto, suspeito que o objetivo desta pergunta é determinar o tamanho da palavra de instrução para a máquina. Dados os dados muito incompletos fornecidos, isso deve corresponder à largura do barramento de dados ; a largura do barramento de endereços determina o tamanho máximo da memória principal.

Na prática, o campo "opcode" das instruções de uma determinada máquina é geralmente significativamente menor que a própria instrução, mas a instrução pode ser mais ampla que o barramento de dados.

O antigo Motorola 68008 é um exemplo disso - era uma versão com custo reduzido do 68000 com um barramento de dados de 8 bits, mas usava as mesmas palavras de instruções de 16 bits, nas quais normalmente 7 bits determinam o código de operação (o restante identifique os registros de origem e destino e o modo de endereçamento, todos os quais devem ser considerados operandos , não opcode ). Se você incluir os bits do modo de endereçamento no código de operação, como alguns fazem, isso cria um campo de 10 bits no código de operação. As instruções reais podem ser substancialmente mais longas em alguns modos de endereçamento.

Chromatix
fonte
"o restante identifica os registros de origem e destino, e o modo de endereçamento, todos os quais devem ser considerados operandos, não opcode" ... bem, isso é um pouco de opinião. Para uma arquitetura RISC, isso é claramente verdade, mas em muitos casos as arquiteturas CISC são definidas de maneira ad hoc que provavelmente faz sentido contar cada combinação como um código de operação separado. O Z80 é um exemplo disso - enquanto muitas de suas instruções têm uma ou duas seleções de registro codificadas nos bits do código de operação, os modos de endereçamento são inteiramente ad-hoc e os prefixos alteram a interpretação de ...
Jules
... o modo de endereçamento e o registro em muitos casos, o que torna a interpretação dos registros dos campos de bits um pouco menos simples. A maioria da documentação e montadores parecem trabalhar no entendimento, portanto, de que cada combinação de instruções e registradores é um código de operação separado, e apenas valores imediatos e valores de deslocamento de endereço indireto são realmente operandos. Essa visão de mundo é compartilhada por seu antecessor, o intel 8080, onde o formato padrão da linguagem assembly tinha registros operados por uma instrução codificada como parte do mnemônico, não fornecida como argumento.
Jules
Verdadeiro - o Z80 é típico de CPUs microcodificadas de 8 bits dessa maneira. O 6502 tinha um mapeamento de código de operação mais lógico que permitia otimizar o circuito de decodificação. Mas eu estava falando especificamente sobre 68K, que tem campos de modo de endereçamento e registro de destino muito distintos em suas instruções. Após subtrair esses, o campo opcode ainda pode ser maior que o barramento de dados do 68008.
Chromatix
1

Edson DeCastro projetou um computador quase exatamente assim, o PDP-8, com 15 endereços e 12 linhas de dados.

Portanto, a resposta para a pergunta publicada é de 574 códigos operacionais, porque o PDP-8 tinha 284 códigos operacionais e Ed é apenas meio louco.

Slartibartfast
fonte
2
Não sei por que o voto negativo - esta é uma resposta tão boa quanto qualquer outra, dado que a pergunta é essencialmente sem sentido. :)
Jules
Eu suspeito que o downvote é porque 284 * 2 = 568, não 574.
Mark