Dodawanie i odejmowanie liczb o przeciwnych znakach w Z80?

Dodawanie i odejmowanie liczb o przeciwnych znakach w Z80?
  • Rejestracja: dni
  • Ostatnio: dni
0

Jednego nie rozumiem.

Z tego, co się orientuję (popraw mnie ktoś, jeśli się mylę), to dodawanie liczb o przeciwnych znakach jest zaimplementowane jako dodawanie właśnie - nie jako odejmowanie modułu drugiej liczby od pierwszej.

Z drugiej strony, Z80 zapamiętuje liczby w ten sposób, że najstarszy bit to jest bit znaku. I tak na przykład 3 będzie miało reprezentację 00000011, natomiast -1 będzie miało reprezentację 10000001.

No ale to się jakby nie zgadza. No bo 3+(-1)=2. Dodając jednak reprezentacje obu liczb w Z80 będziemy mieli 00000011+10000001=10000100, czyli -4.

Gdzie robię błąd?

  • Rejestracja: dni
  • Ostatnio: dni
0

Jeśli zapis liczb jest taki jak przedstawiłeś to jest to kod ZM(znak-moduł) i operacje arytmetyczne wyglądają trochę inaczej niż na zwykłym zapisie dwójkowym.

Tutaj masz to opisane -> http://edu.i-lo.tarnow.pl/inf/alg/006_bin/0016.php#arytmetyka

AL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1493
0

Nie jestem ekspertem od Z80, ale czy tam nie wykorzystywano zapisu uzupełnieniowego do 2? Wtedy bit znaku się zgadza a i reszta arytmetyki mocno się upraszcza.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.