Aritmética e Lógica
Neste Capítulo vamos lidar essencialmente com a Divisão, uma operação resolvida por processo iterativo. Mais concretamente iremos ver como o computador resolve uma operação de Divisão de dois números de 8 bits em complemento para dois.
Antes de prosseguirmos, queremos salientar que, muito mais do que a análise de uma operação de divisão binária, de importância muito relativa no contexto global do conhecimento do funcionamento lógico de um computador, este Capítulo tem uma enorme contribuição para a evolução de raciocínios lógicos baseados num conhecimento concreto da contribuição de cada componente e principalmente na análise profunda da forma como os sinais evoluem e se transmitem no tempo, portanto da Lógica Temporizada.
O pormenor a que vamos chegar, analisando o comportamento de cada linha identificada do circuito, analisando quadros com a evolução dos valores à entrada e saída das Básculas e nos diversos componentes do circuito em cada ciclo de clock, não é evidentemente só para entender um circuito, mas para consolidar o raciocínio lógico e o conhecimento do comportamento dos diversos componentes que são utilizados bem como a evolução dos sinais ao longo do tempo, tanto dentro de cada componente como no circuito como um todo, isto é, a Lógica Temporizada no seu melhor.
Entendemos este Capítulo como um marco essencial no conhecimento de alguns dos circuitos referidos no Capítulo anterior, pela aplicação prática que certamente consolidará o seu conhecimento.
Também vai dar um bom contributo para um melhor domínio do conceito de Lógica Temporizada, apelando sempre a este no entendimento da evolução dos valores dos sinais nas entradas e saídas das Básculas e no interior de um circuito durante o ciclo de clock. Esperamos que após a leitura deste Capítulo o ciclo de clock e a sua evolução passem a fazer parte do nosso raciocínio quando pensarmos em informática.
Fizemos por isso com mais este contributo para o entendimento do tal conceito tão importante.
Vamos à operação de Divisão binária. Começamos por desenvolver o algoritmo da divisão, pois é por aí que temos que começar, levando à essência aquilo que fazemos e como fazemos quando executamos qualquer ação que pretendemos ensinar ao computador. Neste Capítulo vamos desenvolver o algoritmo da divisão de dois números binários de 8 bits, onde vamos executar passo a passo aquilo que fazemos na operação a papel e lápis:
“Baixa-se o primeiro dígito do dividendo e vê-se se o divisor cabe nele, por outras palavras se a diminuição entre ele e o divisor produz um resultado positivo, ou ainda, se esse dígito é maior que o quociente. Se for coloca-se no resultado o número de vezes que ele cabe, o que no nosso caso será no máximo uma vez (1). Se não for coloca-se 0 no quociente. Baixa-se o segundo dígito do dividendo e procede-se como anteriormente e assim sucessivamente até ao último dígito do divisor.”
É isto que se tenta mostrar graficamente neste Capítulo, efetuando as operações necessárias a tirarmos as nossas conclusões e ligando-as com linhas da mesma cor para cada uma.
Depois vamos associar os passos deste algoritmo à ação de circuitos lógicos que vimos no Capítulo anterior, que fazem exatamente o mesmo que nós fizemos no algoritmo, dígito a dígito, um por cada ciclo de clock.
Seguindo o procedimento que temos vindo a adotar, tudo será criado através de deduções lógicas a partir do algoritmo. Os circuitos aparecerão como executantes de cada uma das análises do algoritmo e tentaremos chegar logicamente a essa conclusão. Para isso seguiremos o circuito linha a linha, identificando o porquê de cada uma, de onde sai, para onde vai e porquê. Analisaremos também a evolução dos valores nos diferentes circuitos ao longo das diversas iterações.
A Comparação será a operação aritmética final deste Capítulo. Comparar é um elemento fundamental da programação. A comparação devolve sempre um valor booliano verdadeiro ou falso como resultado da operação que efetua sobre os seus operandos. 2 é maior do que 3? Falso (0)! 3+4 é maior do que 2-1? Verdadeiro (1)!
É o seu resultado que vai influenciar uma decisão condicional. É com base nesses valores booleanos que o Multiplexer vai escolher a entrada, ou que o Demultiplexer vai escolher a saída. Por exemplo se um programa vai continuar a executar na sua sequência normal ou se vai executar um salto. Ou de onde vem o valor para uma operação.
Ver a síntese global deste trabalho
Inserimos de seguida o índice da edição em livro como forma de descrição dos temas abordados neste Capítulo