-
Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.onet.pl!newsgate.m10r2.onet.pl!niu
sy.onet.pl
From: "Piotrek" <p...@p...onet.pl>
Newsgroups: pl.comp.programming
Subject: Do osób znających instrukcje procesora Z80
Date: Sat, 18 Jun 2011 20:13:05 +0200
Organization: Onet.pl
Lines: 80
Sender: n...@n...onet.pl
Message-ID: <5...@n...onet.pl>
NNTP-Posting-Host: newsgate.m10r2.onet.pl
Mime-Version: 1.0
Content-Type: text/plain; charset="iso-8859-2"
Content-Transfer-Encoding: 8bit
X-Trace: newsgate.onet.pl 1308420785 31305 213.180.150.14 (18 Jun 2011 18:13:05 GMT)
X-Complaints-To: n...@o...pl
NNTP-Posting-Date: Sat, 18 Jun 2011 18:13:05 +0000 (UTC)
Content-Disposition: inline
X-Mailer: http://niusy.onet.pl
X-Forwarded-For: 62.141.227.102, 10.174.28.54
X-User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET
CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Xref: news-archive.icm.edu.pl pl.comp.programming:191025
[ ukryj nagłówki ]Parę miesięcy temu nosiłem się z zamiarem napisania emulatora jakiejś
rzeczywistej maszyny, wybór padł na ZX Spectrum i procesor Z80. Od jakiegoś
czasu wcielam swój plan w życie, tzn. pieczołowicie emuluję kolejne instrukcje
procesora i potwierdziło się to, czego się obawiałem-nie rozumiem jak
instrukcje odejmowania oddziałują na pewne flagi (tzn. dlaczego oddziałują
inaczej niż mi się zdaje). Z manuali i stron, którymi się posiłkuję, można
wyczytać między wierszami, że odejmowanie z technicznego punktu widzenia
niczym nie różni się od dodawania, tzn. procesor Z80 operację odejmowania
wewnętrznie i tak konwertuje sobie do operacji dodawania, jedynie stan flagi N
odróżnia te działania od siebie, cała arytmetyka odbywa się w kodzie
uzupełnieniowym do 2. Coś mnie jednak tknęło i poprosiłem na pewnym
anglojęzycznym forum o zweryfikowanie moich przypuszczeń co do wyników trzech
przykładowych działań i okazało się, że we wszystkich trzech przypadkach się
myliłem (w każdym wynik był dokładnie przeciwny niż sądziłem).
Załóżmy, że ograniczymy rozważania do operacji na rejestrach 8-bitowych. Moje
wątpliwości dotyczyły zachowania flag C (przeniesienia, ustawianej gdy nastąpi
przeniesienie z bitu 7, tzn. wynik nie zmieści się na 8 bitach) i H
(półprzeniesienia, ustawianej gdy dojdzie do przeniesienia z bitu 3 na 4).
Rozpatrywane były następujące operacje:
1) działanie 3 - 5 (w praktyce załadowanie pierwszej wartości do rejestru A i
wykonanie instrukcji SUB 5).
Moim zdaniem nie dojdzie tu do półprzeniesienia, zdaniem mojego dyskutanta-tak.
Oto jak rozumowałem:
3 - 5 to dla procesora de facto 3 + (-5), 3 to bitowo 00000011,
-5 to 11111011 (działamy w U2).
Zapisując to jedno pod drugim i rachując pisemnie od prawej do lewej (od
najmłodszego bitu do najstarszego) i zakładając, że procesor liczy to tak
samo, dostaję kolejno:
- na pozycji 0 sumę 1 + 1 -> mamy przeniesienie z bitu 0 na 1
- na pozycji 1 sumę 1 + 1 + 1 (przeniesienie) -> mamy przeniesienie z 1 na 2
- na pozycji 2 sumę 0 + 0 + 1 (przeniesienie) -> brak przeniesienia z 2 na 3
Ponieważ ostatnie działanie nie wygenerowało nowego przeniesienia, a dalej nie
mamy już sytuacji, w której sumowalibyśmy dwie jedynki, nie ma bata, żeby
wygenerowało nam się nowe przeniesienie, w szczególności przeniesienie z bitu
3 na 4. Zdaniem mojego dyskutanta jednak występuje. Gdzie tu błądzę?
2) działanie 11 - (-5)
Tu według mojego rozumowania procesor tłumaczy sobie to odejmowanie na
dodawanie 11 + 5. Dalej, postępując analogicznie jak w przypadku 1), widzę jak
byk przeniesienie z bitu 3 na 4, którego zdaniem mojego dyskutanta nie ma.
Wygląda na to, że błądzę tak, jak w przypadku 1), tylko nie wiem dlaczego.
3) Postawiłem tezę, że odjęcie czegokolwiek od 0 nie może spowodować żadnego
przeniesienia. Mój argument: skoro dla Z80 0 - cokolwiek to w rzeczywistości
0 + (- cokolwiek), a 0 bitowo to po prostu 00000000, nie możemy przy
którejkolwiek parze bitów dostać sumu większej od 1, więc nie ma mowy o
przeniesieniu na którejkolwiek pozycji. Mój dyskutant oczywiście stwierdził,
że mylę się po raz trzeci i odjęcie od 0 czegokolwiek poza 0 wygeneruje i
przeniesienie, i półprzeniesienie. Za prawdziwością tego, co mówi, przemawia
niestety też jedna z oficjalnych dokumentacji, która w odniesieniu do
instrukcji NEG (która jest właśnie odjęciem wartości rejestru A od 0 i
wstawieniem do tegoż rejestru wyniku tego działania) mówi, że flaga C ma być
ustawiona zawsze z wyjątkiem sytuacji, w której przed wykonaniem instrukcji
rejestr A zawierał wartość 0.
Zastanawiające jest to, że mój tok rozumowania we wszystkich przypadkach
prowadzi do stwierdzenia będącego negacją stanu faktycznego. Wygląda na to, że
nie myślę źle, tylko moje rozumowanie opiera się na jakiejś błędnej
przesłance. Niestety, mojemu dyskutantowi nie chciało się już wczytywać w mój
tok myślenia prowadzący do złych wyników, mam nadzieję, że komuś z Was zechce
się wyprowadzić mnie z błędu. Odsyłanie mnie do literatury raczej w niczym tu
nie pomoże-przeglądam równolegle kilka manuali i właściwie żaden nie rozwiewa
moich wątpliwości. Owszem, da się w nich znaleźć przykłady na to jak operacje
dodawania wpływają na stan poszczególnych flag, ale o odejmowaniu praktycznie
się nie wspomina, ewentualnie sugeruje się tylko, że przy odejmowaniu "jest
tak samo". Wygląda na to, że jednak nie do końca, dlatego też bardzo proszę
Was o wytknięcie mi błędów w rozumowaniu.
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Następne wpisy z tego wątku
- 18.06.11 18:47 Sebastian Biały
- 18.06.11 18:54 Bronek Kozicki
- 18.06.11 23:07 Piotrek
- 18.06.11 23:11 Piotrek
- 19.06.11 07:56 Bronek Kozicki
- 19.06.11 18:50 Mariusz Kruk
- 19.06.11 21:06 Artur Muszyński
Najnowsze wątki z tej grupy
- Na grupie comp.os.linux.advocacy CrudeSausage twierdzi, że Micro$lop używa SI do szyfrowania formatu dok. XML
- Błąd w Sofcie Powodem Wymiany 3 Duńskich Fregat Typu Iver Huitfeldt
- Grok zaczął nadużywać wulgaryzmów i wprost obrażać niektóre znane osoby
- Can you activate BMW 48V 10Ah Li-Ion battery, connecting to CAN-USB laptop interface ?
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- Ada-Europe - AEiC 2025 early registration deadline imminent
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- ,,Polski przemysł jest w stanie agonalnym" - podkreślił dobitnie, wskazując na brak zamówień.
- Rewolucja w debugowaniu!!! SI analizuje zrzuty pamięci systemu M$ Windows!!!
- Brednie w wiki - hasło Dehomag
- Perfidne ataki krakerów z KRLD na skrypciarzy JS i Pajton
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
Najnowsze wątki
- 2025-08-06 Gdynia => Konsultant wdrożeniowy (systemy controlingowe) <=
- 2025-08-06 Białystok => Inżynier oprogramowania .Net <=
- 2025-08-06 "[...] sejmowe wystąpienie posłanki Klaudii Jachiry, która zakończyła je słowami ,,Sława Ukrainie"."
- 2025-08-05 "Chiny przekraczają w wydobyciu 4 mld ton węgla, Indie i USA ponad 1 mld, a Rosja 500 mln ton [...]"
- 2025-08-05 Panuje się 181 159,42 zł./mies. na posła w 2026r.
- 2025-08-05 "Chiny przekraczają w wydobyciu 4 mld ton węgla, Indie i USA ponad 1 mld, a Rosja 500 mln ton [...]"
- 2025-08-05 Czy cos fi przechodzi przez trafo separujące?
- 2025-08-05 kajaki i promile
- 2025-08-05 Re: Tesla jest bezpieczna, wczoraj spaliła się doszczętnie na Ursynowie i nikomu się nic nie stało
- 2025-08-05 Gdynia => Przedstawiciel handlowy / KAM (branża TSL) <=
- 2025-08-05 Re: Atak na lekarza w Oławie. Policja zatrzymała sprawcę na lotnisku Polska Agencja Prasowa 4 sierpnia 2025, 12:16 FACEBOOK X E-MAIL KOPIUJ LINK W szpitalu w Oławie 37-letni pacjent zaatakował lekarza, po tym, jak ten odmówił mu wypisania długoterminowego
- 2025-08-05 B2B i książka przychodów i rozchodów
- 2025-08-04 Re: Atak na lekarza w Oławie. Policja zatrzymała sprawcę na lotnisku Polska Agencja Prasowa 4 sierpnia 2025, 12:16 FACEBOOK X E-MAIL KOPIUJ LINK W szpitalu w Oławie 37-letni pacjent zaatakował lekarza, po tym, jak ten odmówił mu wypisania długoterminowego
- 2025-08-04 Na grupie comp.os.linux.advocacy CrudeSausage twierdzi, że Micro$lop używa SI do szyfrowania formatu dok. XML
- 2025-08-04 Na grupie comp.os.linux.advocacy CrudeSausage twierdzi, że Micro$lop używa SI do szyfrowania formatu dok. XML