-
Data: 2011-06-18 18:13:05
Temat: Do osób znających instrukcje procesora Z80
Od: "Piotrek" <p...@p...onet.pl> szukaj wiadomości tego autora
[ pokaż wszystkie 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
- 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ą."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- U nas propagują modę na SI, a w Chinach naukowcy SI po kolei umierają w wieku 40-50lat
Najnowsze wątki
- 2025-07-19 Zakrzewo => SAP HCM Consultant <=
- 2025-07-19 Poznań => Konsultant SAP HCM <=
- 2025-07-19 Poznań => SAP HCR Consultant <=
- 2025-07-18 celnicy pobili policjanta
- 2025-07-18 Warszawa => Technik IT - Konfiguracja i Wsparcie Sprzętowe <=
- 2025-07-18 Warszawa => Specjalista ds. Sprzętu IT i Wsparcia Technicznego <=
- 2025-07-18 Białystok => Kotlin Developer <=
- 2025-07-18 Warszawa => Sales Director (Cloud solutions) <=
- 2025-07-18 Spalinowa trauma
- 2025-07-18 Polska => Senior Key Account Manager <=
- 2025-07-18 Białystok => Programista Kotlin <=
- 2025-07-18 Szczecin => Key Account Manager IT <=
- 2025-07-18 Łódź => Programista Mainframe (z/OS, Assembler) <=
- 2025-07-18 Łódź => Mainframe (z/OS, Assembler) Developer <=
- 2025-07-18 Lublin => Delphi Programmer <=