Módulo IV - Aritmética do Complemento de dois pag. 4/5

Na seção anterior, você viu que números com sinal são representados em microprocessadores em complemento de dois. Nesta seção você verá a razão.

Na eletrônica digital de dispositivos tais como computadores, circuitos simples custam menos e operam mais rápido do que circuitos mais complexos. Logo números em complementos de dois são usados na aritmética pois eles permitem os circuitos mais simples, baratos e rápidos.

Uma característica do sistema de complemento de dois é que tanto os números com sinal quanto os números sem sinal podem ser somados pelo mesmo circuito. Por exemplo, suponha que você deseja somar os números sem sinal 13210 e 1410.

O microprocessador tem um circuito ALU que pode somar números binários sem sinal, quando aparece o padrão 10000100 em uma entrada e 00001110 na outra entrada, resulta 10010010 na saída.

   100001002 +13210
+ 000011102 + 1410
----------------------
  100100102 +14610

Surge a pergunta: como a ALU sabe que os padrões de bits nas entradas representam número sem sinal e não números em complemento de dois? E a resposta é: não sabe. A ALU sempre soma como se as entradas fossem números binários sem sinal. Sempre produzirá o resultado correto, mesmo se as entradas forem números em complemento de dois.

Observe o exemplo anterior. Se você assumir que as entradas são números com sinal em complemento de dois, então:

Verifique que os padrões de bits são os mesmos. Apenas o significado mudou. No primeiro exemplo, nós assumimos que o padrão de bits representa números sem sinal e o somador produz o resultado sem sinal conveniente. No segundo exemplo, nós assumimos que os padrões de bits representam números com sinal. Novamente, o somador fornece o resultado correto.    100001002 - 12410
+ 000011102 + 1410
------------------------

  100100102 - 11010

Isto comprova um ponto muito importante. O somador na ALU sempre soma padrões de bits como se eles fossem números binários sem sinal. É a nossa interpretação destes padrões que decide se números com ou sem sinal estão sendo indicados. O bom do complemento de dois é que os padrões de bits podem ser interpretados de qualquer maneira. Isto nos permite trabalhar como números com e sem sinal sem requerer diferentes circuitos para cada padrão.

A aritmética de complemento de dois também simplifica a ALU em outro ponto. Todo o microprocessador tem uma instrução de subtração. Assim, a ALU deve ser capacitada a subtrair um número de outro. Entretanto, se isto necessitar de um circuito de subtração separado, a complexidade e o custo da ALU seria aumentado. Felizmente, a aritmética de complemento de dois permite a ALU, realizar operações de subtração usando um circuito somador. Ou seja, a CPU usa o mesmo circuito tanto para soma como para subtração.

A CPU realiza a subtração por processo de adição binária. Para ver como isto funciona, será útil estudar um processo similar com o sistema numérico decimal. O equivalente decimal do complemento de dois é chamado complemento de dez. Desde que você está mais familiarizado com o sistema numérico decimal, examinaremos conjuntamente a aritmética do complemento de dez.

SUBTRAÇÃO EM COMPLEMENTO DE DOIS

Como na aritmética de complemento de dez, você pode formar o complemento de dois subtraindo o número de uma potência da base (dois). Entretanto, como a CPU não pode subtrair diretamente, ela usa o método dado anteriormente para achar o complemento de dois. Uma vez que o complemento de dois foi formado, a CPU pode realizar uma subtração indiretamente pela adição do complemento de dois do Subtraendo com Minuendo.

 Para ilustrar este ponto, olhe para as seguintes duas maneiras de subtrair 2610 de 6910.

Os dois números são expressos como eles seriam num microprocessador de 8 bits. O método simples de subtração é:

fig402

Enquanto este método funciona muito bem no papel, ele é de pouca utilidade para o microprocessador desde que a CPU não tem circuitaria de subtração. Entretanto a CPU pode realizar subtração pelo método indireto de adicionar o complemento de dois do subtraendo ao minuendo.

Jogue fora o transporte final
fig402a

Isto ilustra o principal motivo para o uso do sistema do complemento de dois para representar números com sinal. Ele permite a CPU realizar subtração e adição com o mesmo circuito.O método que a CPU usa para realizar subtração é de pouca importância para o uso de microprocessadores. A maioria dos microprocessadores tem uma instrução de subtração. Esta instrução é usada como qualquer outra sem preocupação de como ela é realizada internamente.

Quando a subtração é implementada, a CPU automaticamente toma conta de operações como complementar o subtraendo, adição e desprezar o transporte. O procedimento foi explicado aqui apenas para você entender a importância da aritmética do complemento de dois.

ARITMÉTICA DE NÚMEROS COM SINAL

Existem muitas aplicações nas quais o microprocessador deve trabalhar com números com sinal. Nestes casos, eles são representados na forma de complemento de dois. Enquanto isto simplifica grandemente a circuitaria da CPU, força um trabalho extra ao programador que deve se assegurar que todos os números com sinal são colocados no microcomputador em complemento de dois. Também, os dados resultantes produzidos pela CPU devem ser em complemento de dois. Mostraremos como a CPU de 8 bits manipula números com sinal.

Assuma que a CPU vai somar dois números positivos +7 e +3. Como uma CPU de 8 bits está sendo suposta, a operação aritmética será:

fig501a Os bits de sinal estão sublinhados. Lembre-se que quando representamos números com sinal, o MSB é o bit de sinal. Um 0 representa "+" e um 1 representa "-". Neste exemplo, você somou +7 com +3 para formar a soma +1010.

Enquanto esta operação parece suficientemente direta, é fácil cometer um erro quando se soma números positivos. Lembre-se que o maior número positivo que se pode representar em complemento de dois é +12710. Se a soma exceder este valor, um erro ocorre.
Por exemplo, suponha que você tente somar +6510 com +6710. A CPU soma os números como se eles fossem números sem sinal.

Se a resposta é interpretada como um número em complemento de dois, um erro ocorreu. Você somou dois números positivos e a resposta parece ser negativa visto que o MSB da soma é 1. Isto é chamado "overflow" de complemento de dois. Ocorre quando a soma excede +12710. Muitos microprocessadores têm uma maneira de detectar esta condição. fig501b

O ponto positivo do sistema de complemento de dois é ilustrado quando você soma números com sinais diferentes. Por exemplo, assuma que um microprocessador de 8 bits vai somar +7 e -3. Lembre-se que desde que estes são números com sinal eles devem ser representados em complemento de dois. Ou seja, +7 é representado por 000001112 enquanto -3 é representado por 111111012.

Observe que a soma é correta se você ignorar o bit de transporte final.

Lembre-se que a CPU soma os dois números como se eles fossem números binários sem sinal. É apenas a nossa interpretação da resposta que faz o sistema trabalhar para números com sinal.

   

O sistema também funciona quando o número negativo é o maior. Quando -9 é somado a +8 o resultado deve ser -1.

Os números com sinal devem ser representados em complemento de dois.

-1 = 1111 1111

O último caso envolve dois números negativos. Se ambos os números são negativos, então a soma deve ser negativa. Por exemplo, suponha a CPU somando -3 e -4. Obviamente o resultado deve ser -7. Os dois números com sinal devem ser representados em complemento de dois. Ou seja; -3 deve ser representado como 111111012 enquanto -4 deve ser representado como 111111002.

A CPU soma estes dois padrões de bits como se eles fossem números binários sem sinal. Assim, o resultado é:

Novamente o resultado é correto se você ignorar o bit de transporte final.

Quando você soma dois números negativos, você deve se lembrar da capacidade da CPU. O maior número negativo que pode ser representado por 8 bits é -128. Se a soma exceder este valor, o resultado estará errado.

Por exemplo, some -12010 com -1810.Observe que o bit de sinal na soma é o 0, representando um número positivo.

Assim, a CPU somou dois números negativos e produziu um resultado positivo. Este erro aparente é causado pela superação da capacidade de 8 bits.

Este é um outro exemplo do "overflow" de complemento de dois.

ICEA/EAD © 2005
Operações Lógicas