Care este diferența dintre semnalele de transport și depășire în timpul multiplicării binare?


Cel mai bun răspuns

La început trebuie să subliniem aceste puncte:

  • ALU nu-i pasă dacă faceți matematică semnată sau nesemnată.
  • ALU face doar binele matematică și setează corespunzător steagurile.
  • În signed numbers bitul de semn este un bit care indică semnul numărului și se află în bitul cel mai semnificativ.

– În aritmetică nesemnată , trebuie să urmărim steagul de transport pentru a detecta erorile.

– În semnat aritmetică, trebuie să urmărim semnalizatorul de depășire pentru a detecta erorile.

Semnalizare de transport este setat dacă:

  • Adăugarea a două numere determină o realizare a celor mai semnificativi (cei mai la stânga) biți adde d.
  • 1111 + 0001 = 0000 => indicatorul de transport este activat.
  • scăderea a două numere necesită un împrumut în cel mai semnificativ (cel mai stâng ) biți scăpați.
  • 0000 - 0001 = 1111 => indicatorul de transport este activat.

Overflow Flag este setat dacă:

  • suma a două numere cu bitul de semn off dă un rezultat număr cu bitul de semn on.
  • 0100 + 0100 = 1000 => semnalizatorul de deversare este activat.
  • suma a două numere cu bitul de semn on dă un număr de rezultat cu bitul de semn off.
  • 1000 + 1000 = 0000 => semnalizatorul de deversare este activat.
  • Rețineți că : semn mixt adăugarea nu activează niciodată semnalizatorul de revărsare.

– pentru a fi mai clar, să vedem cele 2 exemple:

1- presupunem următoarea adăugare binară `0111 + 0010 = 1001 `

– dacă facem matematică nesemnată

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

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

– dacă facem matematică semnată

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

7 + 2 = -7 // error detected

2- presupunem următoarea adăugare binară `1111 + 0001 = 0000`

– dacă facem matematică nesemnată

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

15 + 1 = 0 // error detected

– dacă facem matematică semnată

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.

în cele din urmă, puteți găsi mai multe informații aici: http://teaching.idallen.com/dat2343/10f/notes/040\_overflow.txt

Răspuns

Din punct de vedere mecanicist, semnalizatorul de transport este setat atunci când există o efectuare a celui mai semnificativ bit. Semnalizatorul de revărsare este setat atunci când există un carry în cel mai semnificativ bit.

Cu aritmetică nesemnată trebuie să vă faceți griji doar cu privire la carry steag. Dacă se realizează ceva din bitul cel mai semnificativ, atunci rezultatul este prea mare pentru a fi cuprins într-un singur registru.

Pentru aritmetica semnată situația este mai complexă. Depășirea are loc atunci când semnalizatorul de transport și semnalizatorul de depășire sunt diferite. Iată toate alternativele pentru adăugarea pe doi biți.

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

Rețineți că liniile 2, 5 și 6 produc rezultate incorecte datorită revărsării și că acestea sunt, de asemenea, atunci când CF este diferit de OF.

Unii procesoare pot face această comparație pentru dvs. și OF-ul pe care îl vedeți ar putea fi rezultatul comparării unui steag intern de transport cu steagul de transport (out). Va fi în continuare valabil numai pentru aritmetica semnată.

Funcționează și cu alte aritmetice, inclusiv multiplicarea.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *