Qual é a diferença no sinalizador de carregamento e estouro durante a multiplicação binária?


Melhor resposta

No início, precisamos enfatizar esses pontos:

  • ALU não se importa se você está fazendo matemática com ou sem sinal.
  • ALU apenas faz o binário matemática e define os sinalizadores de forma adequada.
  • Em signed numbers o bit de sinal é um bit que indica o sinal do número. e está localizado no bit mais significativo.

– Em unsigned aritmética, precisamos observar o sinalizador de transporte para detectar erros.

– Em assinado aritmética, precisamos observar o sinalizador de estouro para detectar erros.

– O Sinalizador de transporte está definido se:

  • a adição de dois números causa a execução dos bits mais significativos (mais à esquerda) e d.
  • 1111 + 0001 = 0000 => o sinalizador de transporte está ativado.
  • a subtração de dois números requer um empréstimo no mais significativo (mais à esquerda ) bits subtraídos.
  • 0000 - 0001 = 1111 => o sinalizador de transporte está ativado.

– o Sinalizador de estouro é definido se:

  • a soma de dois números com o bit de sinal off produzir um resultado número com o bit de sinal on.
  • 0100 + 0100 = 1000 => sinalizador de estouro está ativado.
  • a soma de dois números com o bit de sinal on produz um número de resultado com o bit de sinal off.
  • 1000 + 1000 = 0000 => sinalizador de estouro está ativado.
  • Observe que : Sinal misto adição nunca ativa o sinalizador de estouro.

– para deixar mais claro, vejamos esses 2 exemplos:

1- suponha a seguinte adição binária `0111 + 0010 = 1001 `

– se estivermos fazendo matemática sem sinais

0111 + 0010 = 1001 // overflow flag is turned on.

7 + 2 = 9 // its ok, we only care about the carry flag

– se estivermos fazendo matemática com sinais

0111 + 0010 = 1001 // overflow flag is turned on.

7 + 2 = -7 // error detected

2- assuma a seguinte adição binária `1111 + 0001 = 0000`

– se estivermos fazendo matemática sem sinais

1111 + 0001 = 0000 // carry flag is turned on.

15 + 1 = 0 // error detected

– se estivermos fazendo matemática com sinais

1111 + 0001 = 0000 // carry flag is turned on.

-1 + 1 = 0 // its ok we only care about the overflow flag

// remember: Mixed-sign addition never turns on the overflow flag.

finalmente, você pode encontrar mais informações aqui: http://teaching.idallen.com/dat2343/10f/notes/040\_overflow.txt

Resposta

De um ponto de vista mecanicista, o sinalizador de carry é definido quando há um carry out do bit mais significativo. O sinalizador de estouro é definido quando há um carry para o bit mais significativo.

Com aritmética sem sinal, você só precisa se preocupar com o transporte bandeira. Se algo é realizado a partir do bit mais significativo, o resultado é muito grande para ser contido em um único registro.

Para aritmética com sinais, a situação é mais complexa. O estouro ocorre quando o sinalizador de transporte e o sinalizador de estouro são diferentes. Aqui estão todas as alternativas para adição em dois bits.

00 + 00 = 00, (0 + 0 = 0 decimal), CF = 0, OF = 0

01 + 01 = 10, (1 + 1 = -2 decimal) CF = 0, OF = 1 overflow

01 + 10 = 11, ( 1 + -2 = -1 decimal), CF = 0, OF = 0

01 + 11 = 00, ( 1 + -1 = 0 decimal), CF = 1, OF = 1

10 + 10 = 00, ( -2 + -2 = 0 decimal), CF = 1, OF = 0 overflow

10 + 11 = 01, ( -2 + -1 = 1 decimal), CF = 1, OF = 0 overflow

11 + 11 = 10, (-1 + -1 = -2 decimal), CF = 1, OF = 1

Observe que as linhas 2, 5 e 6 produzem resultados incorretos devido ao estouro e que também ocorre quando CF é diferente de OF.

Alguns processadores podem fazer essa comparação para você e o OF que você vê pode ser o resultado da comparação de um sinalizador de transporte interno com o sinalizador de transporte (saída). Ainda será válido apenas para aritmética com sinais.

Também funciona com outras aritméticas, incluindo multiplicação.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *