Arytmetyka U2, U1

Dyskusje ogólne na temat "cyfrówki" czyli wszystko o TTL/CMOS, językach VHDL i VERILOG, bramkach, rejestrach, przerzutnikach... Dobre miejsce na pytania odnośnie uniwersalnych programatorów (np. Willem) a także podłączania własnych peryferiów do komputera PC.
ODPOWIEDZ
moz486
-
Posty: 3
Rejestracja: 13 sty 2009, 11:09
Lokalizacja: Wrocław

Arytmetyka U2, U1

Post autor: moz486 » 13 sty 2009, 11:24

Witam,
Mam pewien problem, nie do końca wiem kiedy wynik jest poprawny w U2:
Przykład 1:

Kod: Zaznacz cały

kod U2, k=4;
  1000   (-8)
 +1101   (-3)
---------
1|0101   (-11)
Teraz pytanie, jeśli wynik przekroczy zakres to bit nadmiaru jest po prostu ignorowany?
Jeśli tak, to wynik jest niepoprawny, ale czy zapisujemy go jako 0101 czy po prostu jest on niepoprawny i już? Chodzi o zadanie na kolokwium, mam napisać, że wynik niepoprawny, czy 0101, bo np. w innych przykładach też jest przekroczenie zakresu, ignorujemy bit, który nie mieści się i wynik okazuje się poprawny, ale to można sprawdzić tylko przekształcając na system dziesiętny?
W U1 dodajemy bit nadmiaru do pozycji najmniej znaczącej i wychodzi dla przykładu powyżej 0110 i też wynik nie jest -11, czy to jest też niepoprawne czy wynikiem jest 0110?
Komputer wiadomo jak liczy, gdy przekroczy zakres to będzie to liczba, która została uzyskana, mimo że jest niepoprawna.
Dzięki z góry za pomoc.

Awatar użytkownika
Melon
Użytkownik
Posty: 128
Rejestracja: 20 cze 2008, 15:53
Lokalizacja: Kraków / Jarosław
Kontakt:

Post autor: Melon » 13 sty 2009, 13:07

Komputer widzi wynik 0101, czyli +5. Dodatkowo komputer powinien też ustawić flagi C i bodajże V, jeżeli mnie pamięć nie myli, które powinieneś wykorzystać w interpretacji wyniku.

Wynik jest niepoprawny.

moz486
-
Posty: 3
Rejestracja: 13 sty 2009, 11:09
Lokalizacja: Wrocław

Post autor: moz486 » 13 sty 2009, 14:33

Dla U2 będzie +5, a dla U1 będzie +6, czy wynik dla U1 też jest niepoprawny?

Awatar użytkownika
Melon
Użytkownik
Posty: 128
Rejestracja: 20 cze 2008, 15:53
Lokalizacja: Kraków / Jarosław
Kontakt:

Post autor: Melon » 13 sty 2009, 16:17

A jaki wynik jest poprawny? [:

moz486
-
Posty: 3
Rejestracja: 13 sty 2009, 11:09
Lokalizacja: Wrocław

Post autor: moz486 » 13 sty 2009, 17:08

Rozumiem, że w U2 wynik jest niepoprawny bo odcinamy jedynkę najbardziej znaczącą i wychodzi 5, ale w U1 dla tego samego przykładu jedynkę najbardziej znaczącą dodajemy do pozycji najmniej znaczącej czyli przenosimy, wtedy wychodzi jakiś wynik 6 czy 5 czy 7??? i czy wynik jest poprawny zawsze dla U1, i jak się liczy w systemie U1?

Awatar użytkownika
Melon
Użytkownik
Posty: 128
Rejestracja: 20 cze 2008, 15:53
Lokalizacja: Kraków / Jarosław
Kontakt:

Post autor: Melon » 13 sty 2009, 22:14

http://layer.uci.agh.edu.pl/maglay/wron ... komb_arytm

Ciebie interesują układy dodające, od strony 7. Mam nadzieję, że to rozwieje Twoje wątpliwości

Servibilis
-
Posty: 1
Rejestracja: 25 sie 2013, 14:13
Lokalizacja: Warszawa

Post autor: Servibilis » 25 sie 2013, 14:16

Witam!

Ja mam takie pytanie odnośnie tego tematu, chciałbym wykonać działanie

13 + (- 20,25)

w kodzie U1 i U2

13 w U1 to 001101
20,25 w U1 to 010100,01

Wiem jak zamienić 20 na -20 w U1 ale nie wiem jednak jak zamienić liczbę z przecinkiem 20,25 na ujemną i dodać, żeby wynik się zgadzał i wynosił -7,75, czy ktoś mógłby mi wytłumaczyć?

Pozdrawiam

Awatar użytkownika
kayron
Użytkownik
Posty: 2066
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 25 sie 2013, 16:16

Odsyłam do książki WNT panów K.Sacha i A. Rydzewski "Mikroprocesor w pytaniach i odpowiedziach" z 1985 roku. Tam to jest przedstawione łopatologicznie, na przykładzie CPU Z80.
Zacytuję fragment.
Działania dodawania i odejmowania liczb, całkowitych ze znakiem w zapisie U2, są identyczne do przedstawionych, zmienia się tylko warunek przekroczenia zakresu przez wynik.
Przekroczenie zakresu przez liczby w zapisie U2 nazywa się nadmiarem - V (ang. overflow). nadniar jest sumą modulo 2 przeniesień Cn i Cn-1.
V = Cn xor Cn-1 = Cn Cn-1 v Cn Cn-1
przykład:
_ 11111011 -5
+ 11110000 -16
------------
Cn=1 11101011 -21
Cn-1=1 czyli V = 0
W przypadku liczb z przecinkiem, sprawa się komplikuje, bo trzeba to odpowiednio zapisać i liczyc.

ODPOWIEDZ