Este artigo tem como objetivo examinar o design e a implementação de computadores redstone no Minecraft.
Veja o Capítulo 1, Tutorial sobre como construir um computador, para obter um tutorial detalhado sobre como construir um computador no Minecraft e como expandir e melhorar o exemplo. Não requer nenhum conhecimento extenso de ciência da computação. NÃO FINALIZADO.
Veja o Capítulo 2, Planejando um Computador Redstone, para conceitos básicos de computador para projetar e compreender um computador redstone no Minecraft. Não requer nenhum conhecimento extenso de ciência da computação.
- 1 Visão
- 1.1 Implementações
- 2 Capítulo 1: Tutorial sobre como construir um computador
- 2.1 Introdução e pré-requisitos
- 2.2 O Computador MASIC
- 2.3 Etapa 1: Decodificadores de memória e endereço (TEORIA)
- 2.4 Etapa 1: Decodificadores de memória e endereço (PRACTICE)
- 2.4.1 Decodificador de Endereço
- 2.5 Etapa 2: Construindo uma Unidade Lógica Aritmética (TEORIA)
- 2.5.1 Adicionando dois números
- 2.5.1.1 Números fracionais
- 2.5.2 Subtraindo dois números
- 2.5.3 Multiplicando dois números
- 2.5.1 Adicionando dois números
- 2.6 Etapa 2: Construindo uma Unidade Lógica Aritmética (PRÁTICA)
- 2.7 Passo 3: Conjunto de instruções e arquitetura da máquina (TEORIA)
- Pré-requisitos 2.7.1
- 2.7.2 O Conjunto de Instruções MASIC
- 2.7.3 Programas de escrita
- 2.7.4 Ciclo de Instrução
- 2.8 Etapa 3: Conjunto de instruções e arquitetura da máquina (PRACTICE)
- 3 Capítulo 2: Planejando um Computador Redstone
- 3.1 Fundamentos de um computador
- 3.2 Arquitetura da Máquina
- 3.3 Armazenamento de dados de computador
- 3.3.1 Armazenamento Primário
- 3.3.1.1 Registros e Sinalizadores
- 3.3.2 Caches
- 3.3.3 Memória de acesso aleatório (RAM)
- 3.3.4 Armazenamento Secundário
- 3.3.5 Armazenamento Terciário
- 3.3.1 Armazenamento Primário
- 3.4 Modelo de Execução
- 3.4.1 Harvard
- 3.4.2 de Neumann
- 3.5 tamanhos de palavras
- 3.5.1 Data-Word
- 3.5.2 Palavra de Instrução
- 3.6 Conjunto de instruções
- 3.7 Arquitetura do Computador
- 3.7.1 Ônibus
- 3.7.2 componentes
- 4 Capítulo 3: Projetando um computador
- 4.1 Arquitetura do conjunto de instruções
- Estados 4.1.1
- 4.1.2 Transições
- Palavras 4.1.2.1
- 4.1.2.2 Instruções
- 4.2 Classificação
- 4.2.1 Abstração
- 4.2.2 Mapeamento
- 4.3 Formalização
- 4.3.1 Computabilidade
- 4.3.2 variáveis
- 4.3.3 Hierarquias
- Memória 4.3.3.1
- 4.3.3.2 Execução
- 4.3.4 Semântica
- Dados 4.3.4.1
- 4.3.4.2 controle
- 4.4 Arquitetura da Máquina
- 4.4.1 Caminhos de dados
- 4.4.1.1 Processamento
- 4.4.1.2 Unidade Lógica Aritmética
- 4.4.1.2.1 Busing
- Armazenamento 4.4.1.3
- 4.4.1.3.1 Memória de acesso aleatório
- 4.4.1.3.2 Memória terciária
- 4.4.1.4 Estado da Máquina
- 4.4.1.4.1 Contador de Programa
- 4.4.2 Caminhos de controle
- 4.4.2.1 Processamento
- 4.4.2.1.1 Unidade de Controle
- 4.4.2.1.2 Busing
- Armazenamento 4.4.2.2
- 4.4.2.2.1 Memória do Programa
- 4.4.2.3 Estado da Máquina
- 4.4.2.3.1 Contador de Programa
- Relógio 4.4.2.3.2
- 4.4.2.1 Processamento
- 4.4.1 Caminhos de dados
- 4.1 Arquitetura do conjunto de instruções
- Dicas 5
- 6
- 7
Visão geral
Os computadores facilitam a implementação de ideias que são comunicadas por humanos por meio da programação.
Este artigo explicará os fundamentos do projeto e construção de um computador no Minecraft, presumindo que o leitor esteja bastante familiarizado com o redstone e os computadores em um nível básico.
Realmente não há como construir um computador sem saber como ele funciona. O tutorial tenta explicar tudo o que você precisa saber, mas requer um pouco de entendimento aqui e ali de ciência da computação, que é declarado na seção de pré-requisitos de cada guia. A parte mais profunda que cobrimos depende do IGCSE CS.
Todos os sistemas de computador têm pelo menos uma unidade de processamento. Durante a operação, as unidades de processamento executam instruções armazenadas na memória do computador. Para um bom começo em computadores Minecraft, você deve aprender ciência da computação. Existem muitas fontes e tutoriais para aprender ciência da computação, mas para um começo básico, é recomendado assistir ao Crash Course on Computer Science, especialmente os episódios 1–8. Embora não seja totalmente completo, pode funcionar como uma base para a sua compreensão dos computadores.
A maioria dos computadores no Minecraft são feitos de pó de redstone, tochas de redstone e repetidores, levando a pistões pegajosos ou lâmpadas de redstone que são controlados por uma série de botões, alavancas, placas de pressão, etc. Outras ideias propostas (não cobertas) são usar funis , carrinhos de minas ou barcos com redstone.
Veja o capítulo 1, Tutorial sobre como construir um computador, para obter um tutorial detalhado sobre como construir um computador no Minecraft e como expandir e melhorar o exemplo fornecido. Não requer nenhum conhecimento extenso de Ciência da Computação, como será explicado, mas será aprofundado.
Veja o capítulo 2, Planejando um Computador Redstone, para conceitos básicos de computador para projetar e compreender um computador redstone no Minecraft. Não requer nenhum conhecimento extenso de Ciência da Computação, mas irá se aprofundar nele.
Implementações
Os computadores podem ser usados de várias maneiras, desde criar uma casa inteligente até usá-la para executar um mapa de aventura. No entanto, devido às limitações dos computadores no Minecraft, declaradas abaixo, eles permanecem um conceito abstrato e servem como boas ferramentas para entender os conceitos de nível inferior de arquitetura de CPU e sistemas embarcados.
O que diferencia os computadores e calculadoras é que elas não podem executar várias instruções consecutivas sem a intervenção do usuário. Um computador pode comparar e avaliar as instruções em um fluxo para executar tarefas.
No entanto, no Minecraft, eles são extremamente lentos e, com seu tamanho grande, os computadores redstone são difíceis de encontrar aplicações práticas. Mesmo os computadores redstone mais rápidos levam segundos para completar um cálculo e ocupam alguns milhares de blocos de espaço. Os blocos de comando são muito superiores aos computadores no Minecraft por causa de sua velocidade e comandos legíveis de nível superior.
Os mods podem alterar a velocidade do computador, como TickrateChanger mudará a taxa de tique do jogo.
Capítulo 1: Tutorial sobre como construir um computador
Introdução e pré-requisitos
A lógica de Redstone reflete de perto a lógica binária simples, pois redstone pode estar ativado ou desativado e, portanto, pode ser interpretado como 1s ou 0s. Faremos referência neste tutorial, lógica binária básica e vários termos simples da ciência da computação. Há um excelente artigo que explica binário e conversão para binário. Por favor, leia a seção Arquitetura de construção do Computador, pois estaremos seguindo que para planejar nosso computador, ela está localizada neste artigo, obrigado.
Este capítulo se concentrará na aplicação do conhecimento e manipulação do redstone para criar um computador simples de 8 bits, e irá descrever como fazer um e como ele funciona.
Todos os assuntos serão divididos em (TEORIA) e (PRÁTICA), TEORIA irá aprofundar exatamente o que vai acontecer. PRACTICE irá cobrir como construí-lo no Minecraft, sua aparência e, possivelmente, downloads mundiais.
O computador que iremos construir (MASIC Computer)
Etapa 1: Decodificadores de memória e endereço (TEORIA) (NÃO CONCLUÍDO)
Etapa 1: decodificadores de memória e endereço (PRACTICE)
Etapa 2: Construindo uma Unidade Lógica Aritmética (TEORIA)
Etapa 2: Construindo uma Unidade Lógica Aritmética (PRÁTICA) (NÃO CONCLUÍDA)
Etapa 3: conjunto de instruções e arquitetura da máquina (TEORIA)
Etapa 3: conjunto de instruções e arquitetura da máquina (PRÁTICA) (NÃO CONCLUÍDA)
Existem três objetivos principais de design para um computador no Minecraft, para torná-lo mais adequado para sua tarefa. Há compensações a serem consideradas, como quanto maior o computador, mais lento ele ficará, porque o número de repetidores de redstone aumentará com a distância. Quanto mais memória, menos velocidade e maior tamanho.
CompacidadeQuão pequeno é o computador? No Minecraft, projetar um computador de sobrevivência provavelmente enfatizará esse ponto. O número de repetições necessárias aumentará conforme o tamanho aumenta.
memóriaQuanta memória pode conter? Até quantos bits e números pode contar? Isso é importante para computadores de grande escala, digamos, aqueles que podem fazer algoritmos mais complexos e requerem conjuntos de instruções maiores (por exemplo, fazer raízes quadradas ou trigonometria). Quanto maior o tamanho da memória ou arquitetura de bits, mais complexo o computador se tornará.
Velocidade / DesempenhoQuão rápido ele pode fazer operações? Está otimizado para executar suas tarefas? O projeto e a construção personalizados de um computador aumentarão significativamente sua velocidade, pois mais fiação e código redundantes podem ser trocados por hardware e software especialmente desenvolvidos. Isso é aparente em alguns supercomputadores do mundo real que são programados para executar uma tarefa de forma muito eficiente. A velocidade dos computadores no Minecraft é muito lenta, portanto, um mod pode ser instalado para o cliente para aumentar significativamente a velocidade do jogo e, portanto, do computador.
O Computador MASIC
O computador work in progress que faremos no tutorial. 8 bits, 16 bytes de RAM. I / O é um display de sete segmentos (para hexadecimal e decimal) e um painel de controle que faremos.
O computador MASIC pretende ser um computador de tamanho único e não se especializa em uma tarefa, portanto é totalmente programável lendo sua própria memória (explicado na Seção 2: conjuntos de instruções). O I / O simples é ótimo para uso polivalente e a memória é suficientemente dimensionada. Corre a uma velocidade bastante rápida (devido ao seu tamanho pequeno).
Etapa 1: Decodificadores de memória e endereço (TEORIA)
Os decodificadores convertem números binários em decimais. Por exemplo, olhando para o decodificador de 8 bits, 00 liga a primeira lâmpada, que representa 0. 01, liga a segunda lâmpada, que é 1. 10 liga a terceira, que é 2. 11 liga a última que é 3.
Etapa 1: decodificadores de memória e endereço (PRACTICE)
Decodificador de endereço
0000 0000 (aviso de saída 1 aceso)
0000 0001 (observe que a 2ª saída está acesa)
0000 0010
0000 0011
Este é o design do decodificador de endereço que iremos construir.
Acima está um estado simples de 2 bits, portanto, tem duas entradas (esquerda e direita) através dos repetidores. A saída é a linha redstone acima, que será DESLIGADA quando o estado for atingido. O estado é se a entrada de redstone desligará a linha de redstone acima; em caso afirmativo, o estado é as entradas do redstone. No caso acima, a esquerda deve ser DESLIGADA (0) e a direita (azul) deve ser LIGADA (1) para produzir um DESLIGADO na linha redstone superior. Portanto, ele espera um estado de OFF ON (também conhecido como 01 para binário).
Eles são coloridos em azul para os bits que devem estar LIGADOS (1) para interromper a alimentação da linha redstone superior. Uma vez que cada bit para de alimentar a linha redstone, ela é desligada.
Estas são basicamente uma ou duas portas NÃO alimentando uma porta OU e NÃO a saída.
Acima está um estado de 8 bits, ele espera 8 entradas exatamente na ordem 0000 1101. Portanto, esse estado que ele espera é 0000 1101. Assim, as tochas redstone alimentam as entradas e, portanto, vemos a linha redstone na parte superior DESLIGADA (apenas quando exatamente três tochas redstone são colocadas na ordem exata de 0000 1101).
Agora, se colocarmos vários deles juntos, podemos contar em binário com os bits azuis para obter todos os 255 estados de 8 bits. O abaixo é de 8 bits e tem quatro expectativas de estado. Veja a direita para vê-lo em ação. Agora, cada saída verde pode ser uma célula de memória e, se continuarmos contando em binário, ela chegará a 255.
A entrada é 0000 0011 (consulte as tochas redstone para a entrada) e onde os bits azuis correspondem ao estado atual, a saída verde está LIGADA.
- 0000 0000 - primeiro sinal de saída (à direita)
- 0000 0001 - segundo sinal de saída
- 0000 0010 - terceiro sinal de saída
- 0000 0011 - quarto sinal de saída
Então, agora continuamos contando em binário para chegar até 0000 1111 e paramos por aí; agora devemos ter 24 (16) expetores de estado. Agora terminamos com o decodificador de endereços. Não continuamos contando até 1111 1111 por causa das limitações do conjunto de instruções, explicadas na seção 3: conjuntos de instruções
Etapa 2: Construindo uma Unidade Lógica Aritmética (TEORIA)
A Unidade Lógica Aritmética denominada ALU irá comparar e realizar operações matemáticas com números binários e comunicar os resultados com a Unidade de Controle, o componente central do computador (e Unidade Central de Processamento, mas que será tão grande quanto o próprio computador ) Muitos tutoriais irão querer que o leitor construa primeiro uma ALU e, portanto, o tópico é amplamente coberto na Internet.
A ALU que iremos construir pode realizar quatro operações importantes em duas entradas e retornar uma saída correta. A, B, sendo ambas entradas de 8 bits
- A + B (adicionar A a B)
- A >> (bitshift A à direita (o mesmo que divisão binária por 2))
- << A (bitshift A à esquerda (o mesmo que binário multiplicar por 2))
- NÃO A (o oposto de A)
Também pode haver várias ALUs dentro de um computador, já que alguns programas exigem muitas operações para serem executados, que não dependem das operações anteriores (para que possam ser encadeadas), portanto, delegá-las a ALUs diferentes pode acelerar significativamente o programa.
somador binário
Adicionando dois números
Em uma unidade de adição, para cada bit (para nosso computador, precisamos de quatro, portanto, de 4 bits), há um somador completo. O somador completo terá três entradas, cada entrada pode ser 1 ou 0. As duas primeiras serão a entrada do usuário e a terceira será a entrada de transporte. A entrada de transporte é a saída do somador completo anterior, isso será explicado mais tarde. O somador produzirá duas instruções: primeiro, a saída e, em seguida, a saída de transporte, que é enviada como entrada para o próximo somador completo, um valor posicional para cima. Por exemplo, desejo adicionar o número 0101 a 1011. O primeiro somador completo considerará o valor da primeira casa, 1 e 1, como suas duas entradas (estamos lendo da direita para a esquerda). Não há entrada de transporte porque não há somador completo anterior. O somador completo adicionará 1 e 1; que é 0, e carrega um 1 para o próximo valor de casa. O próximo somador completo adicionaria 0 e 1 e a entrada de transporte seria 1 que o somador completo anterior declarou. A saída de 0 e 1 seria 1, mas há uma entrada de transporte de 1 e, portanto, adicionará 0 e 1 e 1, que é 0 e transporta 1 para o próximo valor de casa. Rever a adição em binário deve resolver qualquer confusão.
Todas as ALUs, para realizar operações de adição, requerem a presença de vários adicionadores. Cada dois bits alimentará um somador que, quando unido a outros somadores, produzirá uma saída que é a soma dos dois bytes somados. Um somador tem uma entrada, uma saída e dois carregam entrada / saída como uma pessoa carregaria ao fazer a adição de 9 + 1 ou 01 + 01. Os somadores são feitos de portas lógicas que são possíveis pela nomenclatura binária. Tutoriais / Lógica aritmética dá uma visão muito detalhada de somadores completos e meio somadores, por enquanto, há um esquema de como construir um. Ele fornece quatro entradas / saídas e deve ser conectado a outros somadores para criar uma unidade. Para este exemplo, conectaremos quatro somadores em nosso computador de quatro bits para que possamos incluir todos os quatro bits para fazer uma saída. Haverá um carry de entrada ausente do primeiro somador, isso porque não há nada para transportar do bit anterior, é o primeiro bit. O transporte de entrada permanecerá em zero. Haverá também um carry de saída ausente do quarto somador, e a saída deste será ignorada, pois só podemos oferecer suporte a quatro bits. A quarta saída de transporte adicional é conectada ao sinalizador de estouro para indicar que a operação não pôde ser realizada. Isso é chamado de estouro binário.
Então, basicamente, vá para o Minecraft e construa um somador binário completo (exibição de imagem) e conecte-os. Deve haver oito entradas e saídas. Tente colocar alavancas e lâmpadas redstone nas respectivas extremidades para testar sua criação. Portanto, 0010 + 0011 deve render 0101 (2 + 3 = 5, estamos lendo à direita, não à esquerda).
Números fracionários
Um computador cuida de números menores que um por meio da aritmética de ponto flutuante; ele só é útil em computadores de bits maiores (16-64 bits) e computadores que precisam usar números menores que um. A aritmética de ponto flutuante ou a aritmética de precisão arbitrária são duas maneiras de se conseguir isso. Outra maneira mais simples, mas menos eficiente, seria atribuir a todos os números uma potência de dois, de modo que eles sejam 'aumentados' pela potência de dois escolhidos. O jogador deve fazer isso com todos os números e assumir aquele como um vezes a potência dos dois que você escolheu. Por exemplo, 5 = 1012 então 5 × 23 = 1010002; cinco é aumentado em três. Então, agora, um em seu novo sistema seria 1 × 23 = 10002 e isso deixaria espaço para 0.1, 0.01 ou 0.001; 0.01 * 23 = 102. Isso leva a uma configuração mais complicada para o seu computador.
Subtraindo dois números
Um somador com todas as peças rotuladas.
A subtração de números é surpreendentemente simples. A ALU primeiro deve alterar o segundo número (o valor subtraído por) e convertê-lo de um número positivo em um número negativo. Um complemento de dois é quando você inverte o número binário (de forma que todos os 0s sejam 1s e 1s sejam 0s) e adiciona um a ele.
Exemplo: faça 10 subtraia 9
1. 0000 1001 | (9 em binário, queremos -9, não 9) |
2. 1111 0110 | (Inverta 9, de modo que todos os 0s sejam 1s e os 1s sejam 0s) |
3. 1111 0111 | adicione um (este é o complemento de dois de 9) |
4. | |
0000 1010 | (10 em binário) |
+ 1111 0111 | adicionar complemento de dois de 9 (também conhecido como -9) |
---- | |
0000 0001 | resultado (10 + (-9) = 1) (há um estouro, isso significa apenas que o resultado não é um número negativo) |
Isso representa a complexidade dos números assinados. [1] Este é um peso para o número binário para atribuí-lo como um número positivo ou negativo. Se o resultado é um número negativo ou positivo, é determinado pelo sinalizador de estouro. Se houver um estouro, isso significa que o número é positivo e, caso contrário, negativo.
Para implementar isso, você pode solicitar que a ALU faça 3 operações. Para fazer A subtrair B, as operações são
Operação: A SUB B
- NÃO SER
- (definir B para) B ADD 1
- (definir A para) A ADD B
- RETORNAR A
Multiplicando dois números
A multiplicação é a adição repetida, portanto, o mais fácil (ineficientemente) é adicionar A a uma quantidade variável de B de vezes.
Aqui está o código da pseudo-máquina para ele
Operação: A * B
- C = 0
- (definir C para) C ADD A
- (definir B para) B SUB 1
- SALTAR SE (B> 0) PARA A LINHA 2
- RETORNAR C
No entanto, existem maneiras mais eficientes de multiplicação. Um bom método é alterar repetidamente o bithift do primeiro número para a localização de cada 1 no segundo número e somá-lo.
Existem sublinhados para marcar recuos, uma vez que o preenchimento com 0s é menos intuitivo. o subscrito 2 significa binário, e os números decimais também estão em negrito
__ __11 | 3 (note que existem 2 1s) |
x_ 1011 | 11 |
---- | |
__ __11 | Mudamos 112 por 010 uma vez que o 1st bit de 10112 é 12 |
+ _ _110 | Mudamos 112 por 110 uma vez que o 2nd bit de 10112 é um 12 |
+ 1 1000 | Mudamos 112 por 310 uma vez que o 4th bit de 10112 é um 12 |
---- | de 3rd bit de 10112 é 02, então não adicionamos 112 lá |
10 0001 | 33 (resultado) |
então isso é mais eficiente para números maiores.
Operação: A * B
- C = 0
- D = 0
- (Defina A para) << A (bitshift A para a esquerda)
- SALTAR SE (BIT (D) DE B == 0) PARA A LINHA 6
- (Defina C para) C ADD A
- (Defina D para) D ADD 1
- SALTAR SE (D <COMPRIMENTO DE B) PARA A LINHA 3
- RETORNAR C
Não esqueça que
<< A (bitshift para a esquerda) é efetivamente, A * 2
e
>> A (bithift para a direita) é efetivamente, A / 2
Se os números forem previsíveis ou a CPU precisar fazer muitos números semelhantes em massa, considere o uso de uma tabela de consulta para obter rapidamente os resultados da multiplicação freqüentemente chamada. Essa é uma forma de codificar suas respostas e é usada em casos extremos.
Etapa 2: Construindo uma Unidade Lógica Aritmética (PRÁTICA)
Etapa 3: conjunto de instruções e arquitetura da máquina (TEORIA)
Esta parte é muito divertida.
Elaborando o Capítulo 2: Conjunto de instruções, estaremos criando um para o nosso.
Para o Computador MASIC, o computador que estamos construindo, tem um sistema de 8 bits, o que significa que cada instrução em cada slot da pilha de memória será de 8 bits. A pilha de memória é a memória onde qualquer informação pode ser armazenada e está na RAM. Haverá um contador, denominado contador de programa, que aumenta em 1 a cada ciclo. Um ciclo é a CPU buscando a instrução, decodificando a instrução (descobrindo o que fazer com a instrução) e executando a instrução (fazendo o que ela manda). Em seguida, ele passa para o próximo incrementando o contador do programa e lendo as informações naquele local na memória da pilha.
Portanto, cada byte na memória da pilha tem 8 bits para trabalharmos.
0000 0000
e algumas instruções requerem um endereço, digamos carregar memória em um registro para que possamos realizar operações (como adição) nele. Cada instrução será dividida em duas partes, cada uma com 4 bits. O primeiro é o TYPE. o TIPO especificará o que o computador deve fazer e o ENDEREÇO será onde estão localizados os valores que realizaremos nossas operações.
OPCODE OPERAND
então 4 bits para TYPE, podemos ter 2 ^ 4 tipos, então 16 diferentes. Nosso computador terá dois registros, então um bit será para especificar o registro no qual a operação será executada e é denotado por um x.
As instruções são colocadas no mesmo lugar que a memória e como a parte ADDRESS da instrução tem apenas quatro bits, só podemos fazer referência à memória de 1 a 16 linhas, exigindo alguma programação inteligente para caber em programas maiores. A memória também é limitada a 16 bytes por programa. Valores e instruções são essencialmente a mesma coisa, portanto, se você escrever uma instrução para armazená-la em uma linha que armazenou anteriormente uma instrução, isso efetivamente substituirá a instrução com um valor. A execução acidental de valores pode ser um problema, portanto, um comando STOP deve ser usado para evitar erros. Isso é muito para entender, portanto, boas fontes são https://www.computerscience.gcse.guru/theory/high-low-level-languages e https://scratch.mit.edu/projects/881462/ <- - realmente útil. e também não se esqueça de levar CS e ICT para seus IGCSEs.
Pré-requisitos
A seção cobrirá tópicos simples e componentes comumente encontrados em um computador, portanto, serão utilizadas as informações do capítulo 2, como ALU, RAM, registradores e manipulação de binários.
O Conjunto de Instruções MASIC
Já que o computador Aqui está o primeiro rascunho do conjunto de instruções, apenas com o essencial. Isso é baseado em outras linguagens assembly, mas foi alterado para se adaptar à nossa arquitetura. Existem dois registradores, portanto, precisamos de instruções para realizar operações em ambos os registradores.
BINARY | CÓDIGO DE OPERAÇÃO | COMO |
---|---|---|
0000 | CARGA R1 | Carregue o ENDEREÇO no registro 1 |
0001 | LOJA R1 | Armazene o conteúdo do registro 1 em ADDRESS |
0010 | JUMP R1 IF | Pule para a linha ADDRESS se o registro 1 for igual a 0 |
0011 | ADD R1 | Adicione conteúdos em ADDRESS para registrar 1 |
0100 | < | Bitshift registrador 1 esquerdo |
0101 | NÃO R1 | NOT bit a bit registrador 1 |
0110 | SALTO | Pule para a linha OPERAND |
0111 | STOP | Encerre o programa. |
1000 | CARGA R2 | Carregue o ENDEREÇO no registro 2 |
1001 | LOJA R2 | Armazene o conteúdo do registro 2 em ADDRESS |
1010 | JUMP R2 IF | Pule para a linha ADDRESS se o registro 2 for igual a 0 |
1011 | ADD R2 | Adicione ADDRESS para registrar 2 |
1100 | < | Bitshift registrador 2 esquerdo |
1101 | NÃO R2 | NOT bit a bit registrador 2 |
1110 | OUT R1 | Registro de saídas 1 |
1111 |
Para traduzir:
1000 0011 significa LOAD R2 3 porque LOADR2 é 1000 e 0011 é 3.
Eles podem estar em um processo para que as funções possam ser executadas.
Escrevendo programas
Este faz a sequência de Fibonacci: (0,1,1,2,3,5,8 ... etc.)
FIBONACCI | |||
---|---|---|---|
LINHA | BINARY | INSTRUÇÃO | COMO |
1 | 0000 1110 | CARGA R1 14 | defina o registro 1 para 0 (o valor na linha 14) |
2 | 0011 1111 | ADD R1 16 | adicione o valor na linha 16 |
3 | 1110 0000 | OUT R1 | enviar o registro |
4 | 0001 1111 | LOJA R1 16 | coloque isso na linha 16 |
5 | 0011 1110 | ADD R1 15 | adicione o valor na linha 15 |
6 | 1110 0000 | OUT R1 | enviar o registro novamente |
7 | 0001 1110 | LOJA R1 15 | agora coloque a saída de volta |
8 | 0110 0010 | SALTO 2 | não temos que zerar o registrador, então voltamos para a linha 2. |
... | |||
14 | 0000 0000 | 0 | |
15 | 0000 0001 | 1 | |
16 | 0000 0001 | 1 |
O anterior é um exemplo de linguagem assembly de baixo nível. Se fosse escrito em uma linguagem de alto nível, como C ++, seria mais parecido com isto:
#incluir usando namespace std; int main () {int n, t1 = 0, t2 = 1, nextTerm = 0; cout << "Insira o número de termos:"; cin >> n; cout << "Série Fibonacci:"; for (int i = 1; i <= n; ++ i) {// Imprime os dois primeiros termos. if (i == 1) {cout << "" << t1; Prosseguir; } if (i == 2) {cout << t2 << ""; Prosseguir; } nextTerm = t1 + t2; t1 = t2; t2 = nextTerm; cout << nextTerm << ""; } return 0; }
Ciclo de Instrução
Quadrados arredondados são componentes, quadrados são registros. Setas verdes são ônibus
O conjunto de instruções é a linguagem assembly inferior, por isso queremos integrá-la mais com o lado do hardware. Isso gira em torno do ciclo de busca-decodificação-execução (explicado acima). Na CPU, haverá 4 registros importantes,
o contador de programa (PC), mantém o controle de qual programa o computador está usando no momento
o Registro de Endereço de Memória (MAR), mantém o controle de onde o próximo local da memória estará
o Registro de Dados de Memória (MDR), mantém o controle de qual é a memória no local
o Registro de Instrução Atual (CIR), mantém o controle de qual instrução está sendo trabalhada no momento
e o Acumulador ALU (ACC), mantém o controle da entrada e saída da ALU
Também há quatro componentes a serem considerados: o decodificador de endereço, a memória, o decodificador de instruções e a ALU.
BUSCAR
O programa obterá a próxima instrução.
- PC envia o número da instrução para o MAR
- O PC é incrementado em 1, para se preparar para a próxima instrução
- O decodificador de endereço decodifica o endereço e solicita informações desse endereço da memória
- O MDR recebe as informações solicitadas (no caso da imagem, se o MAR for 0001, ele recebe 'LOADR1 1')
DECODIFICAR O programa identificará qual é a instrução
- O CIR recebe as informações do MDR, por meio do fluxo de informações
- O decodificador de instruções decodifica a instrução e o que fazer
EXECUTAR O programa irá executar a instrução
- No caso da imagem, o programa recebe 'LOADR1 1' como a instrução, o decodificador de instrução divide a instrução em opcode e operando.
O opcode é 'LOADR1' e o operando é '1'.
- O operando é enviado ao MAR, para obter as informações naquele endereço
- O MDR recebe as informações nesse endereço (no exemplo, é a mesma linha)
Agora, quatro coisas podem acontecer dependendo de qual é a instrução.
Se a instrução for uma instrução ADD, o ACC será instruído a receber as informações do fluxo de informações e a ALU executará as operações nela, enviando-as novamente para o ACC.
Se a instrução for uma instrução LOAD, a CU carregará a instrução para o registrador.
Se a instrução for uma instrução STORE, a UC irá, em vez disso, CONFIGURAR os dados no local especificado pelo MAR na memória.
Se a instrução for uma instrução OUT, a CU enviará a instrução para o periférico de saída.
REPETIR O ciclo de instrução se repete até atingir uma instrução STOP ou ficar sem memória
Etapa 3: conjunto de instruções e arquitetura da máquina (PRACTICE)
Capítulo 2: Planejando um Computador Redstone
Um computador redstone pode ser planejado de forma muito semelhante a um computador real, seguindo os princípios usados no projeto de computador e na arquitetura de hardware. Existem várias decisões importantes de design que afetarão a organização; o tamanho e o desempenho de seu futuro computador devem ser feitos concretamente antes da construção de componentes específicos.
Construir um computador redstone exigirá uma compreensão desses cinco conceitos e considerar a abordagem mais adequada, que seria mais prática para o seu computador.
- Arquitetura de máquina (componentes de um computador, o que são e o que fazem)
- Modelo de Execução (A organização dos componentes, tornando-os eficientes)
- Tamanho da palavra (quantos bits o sistema usa. Normalmente, potências de 2, cerca de 4, 8, 16 bits são normais no Minecraft)
- Conjunto de instruções (as instruções a serem executadas pela CPU)
e iremos aplicar esse conhecimento e planejar a arquitetura de nossa CPU na última seção. Esta CPU será então construída no próximo capítulo.
Fundamentos de um computador
Um computador é uma máquina que tem a capacidade de
- Leia e escreva de uma memória que pode ser endereçada
- Faça comparações sobre o estado da memória e execute uma operação como resultado disso. Essas operações incluem a regravação da memória.
- Inicie funções com base no conteúdo gravado na memória. Chamamos tal conteúdo de "programas + dados", e o ato de escrevê-los de programação.
Um exemplo notável disso é o conceito mais básico de computação, uma máquina de Turing, onde a máquina lerá uma linha infinita de código e conjunto de instruções para completar uma função.
Projetar e construir uma máquina de Turing no Minecraft é possível. No entanto, isso não é coberto, pois estaremos projetando algo mais básico.
Arquitetura da Máquina
Existem cinco componentes fundamentais em um computador moderno básico. Eles são essenciais para produzir um computador funcional e manipular dados executando cálculos.
cinco componentes de um computador
Unidade Lógica Aritmética (ALU) (opcional, mas normalmente está presente)
- Executar adição e subtração
- Compare booleanos usando portas lógicas
Unidade de Controle (CU)
- Execute / execute as instruções enviadas a ele
- Comunique-se com todos os componentes
Memória de dados
- Armazene e retorne dados da memória
Memória de Instrução
- Instruções de devolução, enviadas para a UC
- Pode ser definido, mas não precisa ser tão frequentemente quanto a memória de dados
Dispositivos de entrada / saída (I / O)
- Permite que o computador se comunique com o mundo e com o jogador.
- Pode inserir informações no computador (botão, sensor de luz do dia)
- Pode gerar informações do computador (lâmpada redstone, bloco de notas)
Armazenamento de dados de computador
Existem muitos métodos de armazenamento de dados, no Minecraft ou na vida real. Os estados da memória geralmente são binários, ligados ou desligados, e podem ser calculados com lógica booleana.
Em um computador, existem três tipos de armazenamento. Lembrando que aumentar a capacidade do dispositivo aumentaria seu tamanho, cada tipo teria velocidade e capacidade adequadas.
Armazenamento primario
Esse é o armazenamento que pode ser acessado diretamente pela CPU, conhecido como memória e tem acesso mais rápido, mas geralmente tem capacidade menor para ser endereçado mais rápido.
Registros e sinalizadores
Mais rápido é a memória armazenada na CPU. Estes são registros e sinalizadores, pois podem ser configurados quase instantaneamente e não requerem o envio de nenhum endereço, pois há apenas um byte armazenado em cada registro. Os bits de Redstone que podem ser alternados são extremamente grandes, mas podem ser alternados em 2 pontos. Isso requer uma grande quantidade de espaço, mas é perfeito para caches e registros. O redstone também é necessário para portas lógicas (não mostradas) para definir o bit, como no, enviar uma entrada faria com que o bit girasse. O portão ocuparia mais espaço. Os registros também podem utilizar o bloqueio de repetidores de redstone e cronometrá-los corretamente. Isso é explicado abaixo, na RAM). Com o uso de um relógio de computador, pode não ser necessário construir registradores. Os registros são úteis quando os dados passam pela linha antes que o CU ou ALU esteja pronto para processá-los. Ele iria salvá-lo no registro e esperar até que a CU ou ALU pudesse executar sua função.
Caches
Em segundo lugar estão os caches, que alimentam as informações no processador. Na vida real, eles são separados em níveis, cada um com velocidade e capacidades distintas. É útil pela mesma razão dos registradores.
Memória de acesso aleatório (RAM)
Em terceiro lugar está a memória de acesso aleatório (RAM), que é muito mais lenta do que os caches e registradores, pois eles têm sistemas de endereço. Eles são conectados a três barramentos, barramento de dados, barramento de controle e barramento de endereços. Os dados são enviados por meio do barramento de dados, seja configurando a RAM ou obtendo valores da RAM. O barramento de controle informa se ele está sendo obtido ou definido. O barramento de endereços informa à RAM onde está o byte. Consulte a Arquitetura do Computador para entender isso com mais profundidade. A RAM é muito útil e pode substituir totalmente a memória terciária (explicada abaixo) devido à sua não volatilidade no Minecraft. Volátil significa que quando houver perda de energia, ele perderá informações. A RAM não perderá informações ao contrário da vida real e, portanto, em um excelente método de armazenamento de informações.
A RAM, no primeiro caso, está utilizando os repetidores de bloqueio de redstone com o tempo correto. Isso requer um pouco de planejamento, mas é muito eficiente em termos de espaço. A conversão de um ônibus para as linhas a fim de bloquear os repetidores redstone também requer a configuração de temporizações. Isso consome muito tempo, muito mais do que os registros, porém, é muito compacto e eficiente. O barramento de endereço (verde) se tornaria binário para desbloquear um determinado byte, para ser lido ou definido pelo barramento de controle (segunda linha, à esquerda).
Na maioria das vezes, torná-lo volátil não tem utilidade no Minecraft, então a maneira mais fácil de fazer alguns é usar d-flip-flops e adicionar uma função de leitura e escrita. A imagem inferior mostra em vez de repetidores de bloqueio, ele usa d-flip-flops que são muito mais ineficientes em termos de espaço, mas mais simples de construir. Os D-flip-flops funcionam mais ou menos como repetidores bloqueados, uma entrada - se ligada, desbloqueia até que a entrada seja desligada e a outra a definirá uma vez desbloqueada. A saída pode ser lida como um bit e com uma porta NAND, ser ignorada ou colocada no barramento. Isso é explicado em detalhes no segundo capítulo, Tutorial sobre como construir um computador. Desculpe o pacote de textura.
Memória de acesso aleatório também conhecidos como RAM é um tipo de memória usada por programas e é volátil. Volátil significa que quando a energia é perdida, ele perderá informações. Na maioria das vezes, torná-lo volátil não tem utilidade no Minecraft, então a maneira mais fácil de fazer alguns é usar d-flip-flops e adicionar uma função de leitura e escrita.
Armazenamento secundário
Eles são equivalentes a HDDs e SSDs. Existe uma técnica de armazenamento muito compacta, envolvendo comparadores redstone com capacidade de armazenar até 1KB, sendo de tamanho praticamente.
Armazenamento Terciário
Em terceiro e último lugar, está uma memória terciária, que requer muito tempo para ler / escrever, mas pode conter grandes quantidades de informações em detrimento da velocidade. O armazenamento terciário do mundo real usa um mecanismo de montagem da memória que leva cerca de um minuto para cada unidade. Isso é usado para fins de arquivamento e para memória que raramente é usada. No Minecraft, um sistema onde as caixas do shulker são usadas e o bloco nas caixas do shulker deve ser classificado por um sistema de classificação para representar uma forma de dados. Isso também pode ser usado para criar armazenamento removível. A velocidade de leitura / gravação é bastante lenta devido à enorme quantidade de comparadores e muito tempo é necessário. Os mods mencionados acima podem acelerar a taxa de tiques e eliminar esse problema. Isso é usado para armazenar dados de longo prazo que precisavam ser carregados no início de um programa ou raramente devido à sua baixa velocidade de leitura / gravação e grande capacidade. Isso equivale ao disco rígido ou unidade de estado sólido de um computador real.
Modelo de Execução
A técnica de armazenamento de blocos de instruções chamados programas na memória é o que permite que os computadores executem uma variedade de tarefas.
O aparelho empregado por um computador para armazenar e recuperar esses programas é o modelo de execução do computador.
Dois dos modelos de execução mais bem-sucedidos do mundo, Harvard e von Neumann, funcionam em quase 100% dos computadores disponíveis hoje.
Isso é mais avançado e é para leitores curiosos e curiosos
Harvard
A arquitetura Harvard separa fisicamente o aparelho para recuperar as instruções que constituem um programa ativo daquele do aparelho de acesso a dados que o programa acessa durante a execução.
Programas escritos para computadores que empregam uma arquitetura Harvard podem ser executados até 100% mais rápido para tarefas que acessam o barramento de memória principal. Observe, entretanto, que certos circuitos de memória são necessariamente maiores para aqueles que selecionam uma arquitetura de Harvard. A arquitetura de Harvard é muito importante.
por Neumann
A arquitetura de von Neumann usa um processo de duas etapas para executar as instruções. Primeiro, a memória que contém a próxima instrução é carregada e, em seguida, a nova instrução recém-carregada tem permissão para acessar a mesma memória enquanto é executada; usar uma única memória para o programa e os dados facilita a tecnologia de metaprogramação, como compiladores e código de auto-modificação.
A arquitetura de von Neumann foi o primeiro modelo de computação proposto e quase todos os computadores do mundo real são de von Neumann por natureza.
Tamanhos de palavras
O tamanho da palavra é um fator primordial no tamanho físico de um computador.
No Minecraft, máquinas de 1 bit até 32 bits foram construídas com sucesso.
Combinações comuns de tamanho de palavra:
Dados | Instrução |
---|---|
4 | 8 |
8 | 8 |
8 | 16 |
16 | 16 |
Data-Word
A quantidade de informações que um computador pode manipular em um determinado momento é representativa do tamanho da palavra dos dados do computador.
No binário digital, o tamanho da palavra de dados do computador (medido em bits) é igual à largura ou número de canais no barramento principal do computador.
Palavras de dados comumente representam inteiros ou números inteiros codificados como padrões de dígitos binários.
O número de tamanho máximo representável por um inteiro codificado em binário é dado por 2 largura de palavra de dados em bits - 1.
Por exemplo, um computador com um tamanho de palavra de dados de 8 bits terá oito canais em seu barramento (conjunto de fios, componentes de conexão) e, portanto, podemos contar até (28 - 1). 255. Contar além de 255 não é possível com oito bits, pois a operação 255 + 1 carrega um, que requer um nono bit ou o que se chama de estouro binário ocorrerá, retornando 0 como resposta, o que é incorreto.
Isso é simplesmente visualizado;
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 255 | |
+ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
= | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Alguns tamanhos de dados inteiros comuns são:
Número máximo representável | Número de bits necessários |
---|---|
1 = (21 - 1) | 1 |
7 = (23 - 1) | 3 |
15 = (24 - 1) | 4 |
255 = (28 - 1) | 8 |
65535 = (216 - 1) | 16 |
4294967295 = (232 - 1) | 32 |
O tamanho da palavra de dados também controla o tamanho máximo dos números que podem ser processados pela ALU (unidade aritmética e lógica) de um computador.
Instrução-Palavra
A quantidade de dados de que um computador precisa para completar uma única instrução é representativa do tamanho da palavra de instrução de um computador.
O tamanho da palavra de instrução de um computador é geralmente um múltiplo de seu tamanho de palavra de dados. Isso ajuda a minimizar o desalinhamento da memória ao recuperar instruções durante a execução do programa.
Conjunto de instruções
Esta é uma coleção de instruções que a unidade de controle (CU) pode decodificar e, em seguida, executar.
As instruções são essencialmente funções executadas pelo computador, exemplos de instruções incluem:
- Adicionar, subtrair, multiplicar e dividir
- Leitura / gravação de RAM / ROM / memória terciária
- Carregar e descarregar dados na RAM
- Ramificação para outras partes do código
- Comparando registros
- Seleção de uma função lógica (NAND, NOR, NOT etc.)
As instruções podem ser programadas na RAM, carregadas da ROM ou diretamente ativadas usando uma alavanca ou botão. Cada instrução teria sua própria string binária específica atribuída a ela (por exemplo, 0000 = Carregar dados do registrador 0001 = adicionar A e B 1011 = Salvar RAM na memória terciária etc.) e provavelmente exigiria seu próprio binário para decimal ou binário para BCD para codificadores decimais e barramentos para os registradores / ALU.
Arquitetura do Computador
Dentro do computador, existe uma Unidade Central de Processamento (não confundir com a Unidade de Controle (UC), um componente dentro da CPU), que na vida real, é um componente muito pequeno e poderoso que atua mais ou menos como o cérebro do computador. No Minecraft, é difícil compactá-lo na escala que vemos na vida real, então não se preocupe se parecer errado.
Iremos primeiro projetar nossa Unidade de Processamento Central de 4 bits no próximo capítulo, pois é a coisa mais importante em nosso computador com o Modelo de Execução (o método de comunicação e organização da CPU) em mente, (discutido neste página, antes, na seção Modelo de Execução), podemos mapear a construção do computador.
Mapa da CPU, baseado no Modo de Execução Havard
A CPU segue um ciclo de quatro etapas, busca, decodifica, executa e (às vezes) armazena para executar instruções. A CPU primeiro busca a instrução da RAM, decodifica o que ela significa (a instrução provavelmente será um número e a CPU deve descobrir qual é o número) e, uma vez que ela entenda qual é a instrução, ela executará essa ação. Isso às vezes requer que os dados sejam colocados de volta no armazenamento, portanto, ele armazenará os dados. O ciclo é então repetido.
Ônibus
Existem cinco barramentos na CPU, cada um para transportar informações de um componente para o outro. Os ônibus são canais de redstone conectando cada componente. Como estamos construindo um computador de 4 bits, precisamos apenas de quatro canais em nosso barramento. Estas são as linhas vermelha e azul que conectam os componentes dentro da CPU. Observe que os ônibus azuis têm menos de quatro linhas, isso porque eles não transportam dados. Como os barramentos só podem transportar dados em uma direção (no Minecraft, devido aos repetidores funcionando em apenas uma direção), há dois barramentos conectando a CPU ao computador externo.
O primeiro barramento é o barramento de dados, isso é para transferir informações do armazenamento ou dispositivos de E / S para a UC. As instruções também são enviadas por meio desta linha. A UC também pode usar este barramento para transferir dados para a ALU. A ALU não pode transferir dados para este ônibus porque os ônibus funcionam apenas em um sentido e, uma vez que as informações são obtidas pela ALU, o ônibus corta além da ALU. As informações da ALU são transmitidas pelo barramento 2.
O segundo barramento é o barramento de dados, mas retorna os dados da ALU para a CU. A UC não pode enviar dados através deste barramento para a ALU porque o barramento vai da esquerda para a direita e funciona em apenas uma direção. A UC pode enviar informações de volta às unidades de armazenamento e é usada para definir valores de dispositivos de armazenamento.
O terceiro barramento é o barramento de endereços, para o qual a UC pode enviar o endereço de armazenamento. É aqui que residem as informações. Por exemplo, o CU pede o endereço do byte que reside em 0001. Ele envia o endereço (0001) através do barramento de endereços e a RAM retornará o valor do byte através do primeiro barramento. 0001 é a localização do byte, não o valor dele.
O quarto barramento é o barramento de controle, com o qual a UC se comunicará com a RAM. Por exemplo, um fio poderia dizer à RAM para definir o byte para o valor dos dados enviados a ele pela CU. Outra ligação poderia dizer à RAM para obter o byte do endereço enviado a ela pela CU.
O quinto barramento é outro barramento de controle, que se conecta com a ALU, que envia sinalizadores da ALU. Sinalizadores são notas que podem ser mensagens de erro. Por exemplo, a UC pode pedir à ALU para adicionar 15 e 1 em um sistema de 4 bits. Adicionar 15 e 1 em 4 bits resultaria em 0 (explicado acima) e isso é chamado de estouro binário. Isso é um erro e a ALU informará a CU sobre isso por meio do quinto barramento como um sinalizador. A CPU também pode enviar dados para a ALU e solicitar que ela execute uma ação com esses dados.
componentes
Unidade de Controle (CU) irá obter instruções da ROM de instrução (para outros computadores, as instruções podem ser alteradas e, portanto, é a RAM. Para o nosso caso, estamos executando um programa fixo e não precisamos alterar as instruções. Isso simplifica totalmente o processo e a instrução é Ler -Somente memória (ROM)). Dentro da UC, ele então decodificará a instrução, que normalmente é um número, em uma ação sensata. Em seguida, ele executará essa ação e, se a instrução exigir, armazene o resultado na RAM. Ele se comunica com a RAM através do barramento de controle e recebe sinalizadores da ALU. Ele também pode solicitar que a ALU execute ações nos dados que envia para a ALU (por exemplo, adição). Para se comunicar com a RAM, por exemplo, um fio poderia dizer à RAM para definir o byte (a localização dele é especificada por meio do terceiro, barramento de endereço) para o valor dos dados enviados a ele pela CU por meio do segundo, dados ônibus.
Unidade lógica aritmética (ALU) executará as instruções enviadas a ele da UC e comparará os números binários e se comunicará com a unidade de controle. Ele pode fazer somas e subtrações simples que podem ser repetidas para fazer a multiplicação e divisão de números inteiros, gerando um número inteiro (depois divisão). Existem também portas lógicas para booleanos, as portas lógicas fundamentais são necessárias, como a porta NOT e a porta NAND.
Agora podemos escolher entre uma variedade de designs de ônibus, cada um contribuindo para os três objetivos principais de design de um computador Minecraft mencionados acima.
Capítulo 3: Projetando um Computador
Instruction-Set-Architecture
Unidos
A memória é um número definido de bits. No Minecraft, a memória geralmente contém 8 ou 16 bits, embora os computadores com memória de 32 bits já tenham sido construídos com sucesso antes. Cada bit está em um dos dois estados possíveis: ligado ou desligado. A memória é uma série de liga e desliga, que pode ser usada para realizar certas tarefas.
Símbolos
Os computadores do mundo real usam binário, que é uma série de 1s e 0s. "1" significa "ligado" e "0" significa "desligado". No Minecraft, a melhor representação é o pó de redstone: ter um sinal significa "1" e nenhum sinal significa "0". No entanto, dependendo de quão longe o redstone está do armazenamento de memória, é possível que "0" seja qualquer coisa desde a intensidade do sinal 0 até 14. Você também pode projetar coisas para fazer "1" igual a qualquer coisa da intensidade do sinal 1 a 15.
Números
Nosso sistema decimal normal é um sistema numérico na base 10. O binário, o sistema numérico dentro dos computadores, está na base 2. Para comparar, dê uma olhada no número de 2 dígitos. Em decimal, o dígito esquerdo é o dígito de 10s. Em binário, é o dígito 2s. Por exemplo, em decimal, "10" é lido como "dez". Em binário, "10" é lido como "dois". Existem dois métodos comumente usados de conversão de decimal em binário:
O bit mais alto primeiro: este método requer um pouco de intuição. Vamos usar 42 como exemplo. Começamos procurando o maior exponencial de 2 (por exemplo, 32 [2 ^ 5] ou 65536 [2 ^ 16]). Nesse caso, é 32. Em seguida, subtraímos esse número do número em questão. 42-32 = 10. Além disso, o primeiro bit da esquerda é um "1". Em seguida, descemos para o próximo exponencial de 2 e vemos se ele é menor ou igual ao nosso número atual. Para este exemplo, o próximo é 16. 16 não é menor que 10, então o próximo bit é "0". Continuamos fazendo isso até que o número chegue a 0. Sempre que o exponencial 2 for menor ou igual ao número, subtraia-o e o próximo bit será "1". Caso contrário, o próximo bit é "0". Para continuar nosso exemplo: 8 <10-> 10-8 = 2 -> "1" 4> 2 -> "0" 2 = 2-> 2-2 = 0 -> "1" 1> 0 -> "0 "Portanto, nossa representação binária final de 42 é" 101010 ". Extravagante.
O bit mais baixo primeiro: Este método não requer memorização de 2 exponenciais. Em vez disso, ele divide repetidamente o número por 2, usando o quociente como o próximo número e o restante como o bit binário. Lembre-se, porém, de que esse método grava o número binário da direita para a esquerda, ao contrário do método anterior, que o escreve da esquerda para a direita. Vamos reutilizar nosso exemplo, 42. 42/2 = 21 r 0 (o bit mais à direita é 0) 21/2 = 10 r 1 (o próximo bit à esquerda é 1) 10/2 = 5 r 0 (o próximo bit à esquerda é 0) 5/2 = 2 r 1 (o próximo bit à esquerda é 1) 2/2 = 1 r 0 (o próximo bit à esquerda é 0) 1/2 = 0 r 1 (o próximo bit à esquerda é 1)
O quociente é 0, então paramos. Isso nos dá nosso número binário como "101010". Igual ao método anterior.
Transições
Palavras
instruções
As instruções são essencialmente funções executadas pelo computador, exemplos de instruções incluem:
- Adicionar, subtrair, multiplicar e dividir
- Leitura / gravação de RAM / ROM / memória terciária
- carregar e descarregar dados na RAM
- Ramificação para outras partes do código
- Comparando registros
- Selecionando uma função lógica (NAND, NOR, NOT etc.)
As instruções podem ser programadas na RAM, carregadas da ROM ou diretamente ativadas usando uma alavanca ou botão. Cada instrução teria sua própria string binária específica atribuída a ela (por exemplo, 0000 = Carregar dados do registrador 0001 = adicionar A e B 1011 = Salvar RAM na memória terciária etc.) e provavelmente exigiria seu próprio binário para decimal ou binário para BCD para codificadores decimais e barramentos para os registradores / ALU.
Classificação
Abstração
Mapeamento
Símbolos
Números
Funções
Formalização
Computabilidade
Variáveis
Variáveis são números, strings (conjuntos de caracteres) ou booleanos (verdadeiros ou falsos) armazenados na RAM com o propósito de executar um programa. Por exemplo, booleanos podem ser usados para manter informações se o programa atingiu um determinado estado. As seguintes informações precisam ser mantidas sobre uma variável: seu nome, tipo (número, string ou booleano) e valor. O valor de uma variável pode, como seu nome sugere, mudar. As operações podem ser feitas em variáveis. As variáveis são criadas durante a execução do programa e excluídas da memória assim que o programa é fechado. Quando um programa é reaberto, as variáveis são recriadas. É o mesmo no Minecraft.
Hierarquias
memória
A memória é onde os dados dos programas são mantidos. É volátil (é excluído quando o computador é desligado) e é usado pelo programa para armazenar dados. Por exemplo, em um programa que conta a partir de 1, 1 é salvo na memória, 1 é carregado da memória e 1 é adicionado a ele para obter 2.
Execução
Semântica
Dados
Os dados são as informações que estão sendo processadas pelo computador e são representados usando binários.
Controlo
Arquitetura da Máquina
Caminhos de dados
Processamento
Unidade Lógica Aritmética
O ALU é um dos componentes mais importantes em um computador, tanto na vida real quanto no Minecraft. Primeiro, você deve escolher as funções que deseja realizar. Na maioria das vezes, são adição, subtração e um conjunto de opções lógicas como AND, OR, NAND e similares. Você deve então construir a unidade com todas as portas lógicas e funções matemáticas que deseja e uma forma de escolher qual saída exibir.
Transporte em ônibus
O barramento é o que permite que os componentes do seu computador se comuniquem entre si. Um barramento pode ser criado usando a fiação redstone para conectar a ALU, RAM, ROM e registradores do seu computador para que eles possam enviar dados entre si. Geralmente é importante planejar onde construir os componentes do seu computador para que você não tenha que criar cabos de barramento muito longos ou, pior ainda, não tenha espaço para criar barramentos, caso em que você pode remover o componente problemático e reconstruir em um local apropriado ou use um mod como o WorldEdit para mover o componente para outro lugar.
Armazenar
Inscreva-se
Memória de acesso aleatório
Memória de acesso aleatório também conhecidos como RAM é um tipo de memória usada por programas e é volátil. Na maioria das vezes, torná-lo volátil não tem utilidade no Minecraft, então a maneira mais fácil de fazer alguns é usar d-flip-flops e adicionar uma função de leitura e escrita. Fazer um é simples. Você pode fazer 1 flip-flop e empilhá-lo pelo tempo que for necessário, com um bloco retirado de cada byte. Veja o seguinte plano para obter ajuda:
(Esquema de Redstone a ser feito) Consulte a imagem se não tiver certeza (clique nela para aumentá-la) r = fio p = repetidor b = bloco t = tocha na lateral do bloco 0 = ar
Camada 1
00trb00
rpb0tr0
Camada 2
0b0t00b
tbbbbtb
Camada 3
0r0t00r
0rprr0r
Memória terciária
A memória terciária é usada para armazenar de forma compacta grandes quantidades de dados em detrimento da velocidade. Esse tipo de memória consiste no banco de dados, onde todos os dados são realmente armazenados, e um mecanismo físico, geralmente um braço robótico, que deve mover-se fisicamente ao redor do banco de dados para buscar os dados. Por esse motivo, é extremamente lento e só é usado para informações raramente acessadas. Isso equivale ao disco rígido ou unidade de estado sólido de um computador real.
Nas versões mais recentes do Minecraft, pode ser possível criar memória terciária com pistões pegajosos combinados com blocos de limo, que podem criar "navios" que se movem e, presumivelmente, armazenam um componente Redstone que pode extrair, ler e escrever de uma parede de blocos condutores e não condutores.
Estado da máquina
Contador de programa
O contador do programa é usado para controlar de qual linha de código o computador deve estar lendo. Durante cada ciclo de clock, o decodificador acessará este contador para buscar a próxima instrução a ser executada. Algumas instruções acessarão uma quantidade diferente de dados de outra ou nenhum dado, então o decodificador irá, por sua vez, incrementar o contador do programa na quantidade apropriada para a próxima instrução. O contador também é usado por instruções de salto para controlar o fluxo do programa.
Na vida real, este contador não é um componente por si só e é simplesmente um registro ao lado de todos os outros. No Minecraft, no entanto, pode ser menos confuso criar um registro separado dos outros para armazenar os dados do contador do programa.
Caminhos de controle
Processamento
Unidade de controle
A unidade de controle é a seção do computador que interpreta as instruções e controla as outras partes do computador, como dizer à ALU se deve adicionar ou subtrair.
Transporte em ônibus
Armazenar
Memória do programa
A memória do programa é, basicamente, ROM (memória somente leitura). A ROM é mais frequentemente usada para realizar uma série de tarefas remotamente (como um programa, daí o nome). Pode ser feito para ser usado no controle do usuário (como na foto) ou com um relógio e atraso suficiente entre cada linha para que 2 não estejam ligados ao mesmo tempo. Um dos projetos mais simples e eficientes é o da imagem, que pode ou não ser acoplado a um decodificador. Pode ser ampliado facilmente, o que é outra vantagem. Aqui estão algumas dicas:
Estado da máquina
Contador de programa
Relógio
Os relógios Redstone são usados para sincronizar componentes ou para cronometrá-los. Na maioria dos casos (Minecraft), é possível evitar o uso de um, mas às vezes é necessário para o funcionamento do computador. Pode ser feito de tochas redstone em basicamente uma linha / círculo de portas NOT (um número ímpar é recomendado ou sua saída terá que ser NÃO), ou de repetidores, como mostrado na imagem acima.
Tips
- O jogador pode querer usar mods ou pacotes de dados como o WorldEdit.
- Codifique seu computador por cores (use lã azul ou concreto para RAM, amarelo para ALU, etc.)
- Comece pequeno e pegue o jeito de computadores pequenos antes de tentar máquinas mais complexas.
- Os blocos de estrutura podem ser muito úteis para mover componentes e combinar vários componentes. No entanto, observe que eles não podem ser obtidos sem o uso de comandos.
- Redstone
- Circuito de Redstone
- Relógio redstone
- Circuito lógico
- Circuito de memória
- Circuito de pulso
- Circuito de transmissão
- Tutoriais / circuitos redstone avançados
- Tutoriais / Calculadora
- Tutoriais / impressão
- Tutoriais / Telégrafo
- ↑ Representações de números assinados na pedia
Tutoriais | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Introdutório |
| ||||||||||||
Geral |
| ||||||||||||
Desafios |
| ||||||||||||
Construções |
| ||||||||||||
Sustentável |
| ||||||||||||
Encantador e fundido |
| ||||||||||||
Blockbreaking |
| ||||||||||||
Mecanismos |
| ||||||||||||
servidores |
| ||||||||||||
Técnico |
| ||||||||||||
desatualizado |
|